<?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>41053</bug_id>
          
          <creation_ts>2010-06-23 01:47:16 -0700</creation_ts>
          <short_desc>Rename LegacyHTMLTreeConstructor to LegacyHTMLTreeBuilder</short_desc>
          <delta_ts>2010-06-23 02:06:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>241753</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:47:16 -0700</bug_when>
    <thetext>Rename LegacyHTMLTreeConstructor to LegacyHTMLTreeBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241754</commentid>
    <comment_count>1</comment_count>
      <attachid>59491</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:50:09 -0700</bug_when>
    <thetext>Created attachment 59491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241755</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 01:51:50 -0700</bug_when>
    <thetext>Attachment 59491 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/dom/DocumentParser.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241756</commentid>
    <comment_count>3</comment_count>
      <attachid>59492</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:52:41 -0700</bug_when>
    <thetext>Created attachment 59492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241758</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 01:55:46 -0700</bug_when>
    <thetext>Attachment 59492 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/dom/DocumentParser.h:28:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241759</commentid>
    <comment_count>5</comment_count>
      <attachid>59492</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 01:55:54 -0700</bug_when>
    <thetext>Comment on attachment 59492
Patch

No comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241761</commentid>
    <comment_count>6</comment_count>
      <attachid>59493</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 01:56:17 -0700</bug_when>
    <thetext>Created attachment 59493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241764</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-23 01:58:48 -0700</bug_when>
    <thetext>Attachment 59492 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3313601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241766</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 02:04:02 -0700</bug_when>
    <thetext>Committed r61677: &lt;http://trac.webkit.org/changeset/61677&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241767</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 02:06:26 -0700</bug_when>
    <thetext>Attachment 59493 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3318678</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59491</attachid>
            <date>2010-06-23 01:50:09 -0700</date>
            <delta_ts>2010-06-23 01:52:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41053-20100623015007.patch</filename>
            <type>text/plain</type>
            <size>210708</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA2LTIzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVu
YW1lIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgdG8gTGVnYWN5SFRNTFRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTA1MworCisg
ICAgICAgIFRoZXJlIHdhcyBzb21lIGRlYmF0ZSBhYm91dCB3aGV0aGVyIHRvIGNhbGwgdGhpcyBj
bGFzcyAoYW5kIHRoZQorICAgICAgICBub24tbGVnYWN5IHZlcnNpb24pICJ0cmVlIGJ1aWxkZXIi
IG9yICJ0cmVlIGNvbnN0cnVjdG9yIi4gIE1hY2llagorICAgICAgICBwb2ludGVkIG91dCB0aGF0
IG90aGVyIGltcGxlbWVudGF0aW9ucyAoaW5jbHVkaW5nIE1vemlsbGEgYW5kIEhUTUw1TGliKQor
ICAgICAgICBjYWxsIGl0IGEgdHJlZSBidWlsZGVyLiAgVGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0
YW5jZSBzZWVtcyB0byBiZSBjYWxsCisgICAgICAgIGl0IHRoYXQgZm9yIG5vdy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGh0bWwv
SFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBh
cnNlcjo6aHRtbFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9IVE1M
VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6bGVnYWN5
VHJlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aHRt
bFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OkxlZ2FjeUhUTUxU
cmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6On5M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OnNldEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjps
aW1pdERlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aW5z
ZXJ0Tm9kZUFmdGVyTGltaXREZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnBhcnNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpwYXJzZURvY3R5cGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Omluc2VydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJhbWVzZXRDcmVh
dGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkZENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkdENyZWF0ZUVycm9yQ2hlY2spOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9yQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpydENyZWF0ZUVy
cm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVT
ZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0
ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpw
Q2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MVHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0hlYWRpbmdUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVSZXNp
ZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnB1c2hCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wT25lQmxvY2tDb21tb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwb3BPbmVCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om1vdmVPbmVCbG9ja1RvU3RhY2spOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjaGVja0lmSGFzUEVsZW1lbnRJblNjb3Bl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wSW5saW5lQmxv
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJlZUJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlSGVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZUlzaW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzdGFydEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlcG9ydEVycm9yVG9Db25zb2xl
KToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oLgorICAgICAgICAqIGh0bWwv
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9M
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9TdGVw
UmFuZ2UuY3BwOgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CisKIDIwMTAtMDYtMjMgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJ
KHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQsNyArMjY0LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAJaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwIFwKIAlodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAgXAogCWh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBcCi0JaHRtbC9MZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yLmNwcCBcCisJaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
IAlodG1sL0hUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1
bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgXApJbmRleDogV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTk3Miw3ICs5NzIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAK
ICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCi0gICAgaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcAorICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAogICAgIGh0
bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwCiAgICAgaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVy
LmNwcAogICAgIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDYxNjc1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTIy
MSw4ICsxMjIxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBh
cmFncmFwaEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwK
IAlXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHAgXAotCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggXAorCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
KwlXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggXAogCVdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclF1aXJrcy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjA4LDggKzE2MDgsOCBAQAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQu
aCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvci5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgnLAogICAgICAg
ICAgICAgJ2h0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwJywKICAgICAgICAgICAgICdodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcnNlclNj
aGVkdWxlci5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw3ICs2NzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0bWwvSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwKLSAgICBodG1sL0xl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVp
bGRlci5jcHAgXAogICAgIGh0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIFwKICAgICBodG1s
L0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIFwKICAgICBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNw
cCBcCkBAIC0xNDE3LDcgKzE0MTcsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0hUTUxQYXJh
Z3JhcGhFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKICAgICBodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmggXAotICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5oIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIFwKICAgICBodG1sL0hU
TUxQbHVnSW5FbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIFwK
ICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2NTM3LDExICszNjUzNywxMSBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
ci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ4Miw3
ICsyNDgyLDcgQEAKIAkJOTNFQjM1NUYwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwICovOyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOThFRjA4
MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYz
NUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJOTNGMTk4RUYwODI0
NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8q
IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlB
QkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI1MTIsNyArMjUxMiw3IEBACiAJCTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3Jl
Vmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSAqLzsg
fTsKIAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2
MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBOTIwODI0NUU1OTAw
MUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5j
cHAgKi87IH07Ci0JCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjUwMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKKwkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVl
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI1MjAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NzgwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovOyB9OwogCQk5
M0YxOUFCOTA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmNwcCAqLzsgfTsKQEAgLTEwNjU4LDggKzEwNjU4LDggQEAKIAkJRjUyM0QyM0MwMkRFNDM5
NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjNFMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRjAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjUwMDJERTQzOTYw
MTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJRjUyM0QyNTAwMkRFNDM5NjAx
ODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKKwkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNE
MjUzMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQlGNTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNl
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xMzc1Niw4ICsxMzc1Niw4IEBA
CiAJCQkJQjAxNDlFN0MxMUE0QjIxNTAwMTk2QTdCIC8qIEltYWdlUmVzaXplclRocmVhZC5oICov
LAogCQkJCUE0NTZGQTI0MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5jcHAgKi8s
CiAJCQkJQTQ1NkZBMjUxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggKi8sCi0J
CQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Iu
Y3BwICovLAotCQkJCUY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggKi8sCisJCQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhU
TUxUcmVlQnVpbGRlci5jcHAgKi8sCisJCQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oICovLAogCQkJCUU0NDYxMzlCMENENjMzMTAwMEZBREE3NSAv
KiBNZWRpYUVycm9yLmggKi8sCiAJCQkJRTQ0NjEzOUMwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlh
RXJyb3IuaWRsICovLAogCQkJCUU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBMZWdhY3lQcmVs
b2FkU2Nhbm5lci5jcHAgKi8sCkBAIC0xODY4NSw3ICsxODY4NSw3IEBACiAJCQkJQTQ1NkZBMjcx
MUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUVDOUFGQjBBNzFBMkM2MDBFRUVBRUQgLyogTGFuZ3VhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjE5OEVGMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1MEQ5MUU2QUYw
MDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NUJF
QjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5
MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKQEAgLTIxMTA3
LDcgKzIxMTA3LDcgQEAKIAkJCQlBNDU2RkEyNjExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8q
IExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4
IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTlCMDgyNDVFNTkw
MDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdl
YkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVD
IC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBF
QUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDcgKzc2LDcgQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRpdGxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
IgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcjsK
KyAgICBjbGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiAgICAgY2xhc3MgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOwogICAgIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKICAgICBjbGFzcyBYU1NB
dWRpdG9yOwpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkge30KIAot
ICAgICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIGh0bWxUcmVlQ29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyKiBodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
ICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJz
ZXIoKSB7IHJldHVybiAwOyB9CiAKICAgICAgICAgWFNTQXVkaXRvciogeHNzQXVkaXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fWFNTQXVkaXRvcjsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAJKHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBpbnQgSFRNTERvY3Vt
ZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBjCiAgICAgcmV0dXJuIG1fdG9rZW5pemVyLT5jb2x1
bW5OdW1iZXIoKTsKIH0KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciogSFRNTERvY3VtZW50
UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QKK0xlZ2FjeUhUTUxUcmVlQnVpbGRl
ciogSFRNTERvY3VtZW50UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV90cmVlQ29uc3RydWN0b3ItPmxlZ2FjeVRyZWVDb25zdHJ1Y3RvcigpOwogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaAkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgY2xhc3MgSFRNTFRva2VuaXplcjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXI7CiBjbGFz
cyBIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBIVE1MUHJlbG9hZFNjYW5uZXI7Ci1jbGFzcyBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOworY2xhc3MgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOwogY2xh
c3MgU2NyaXB0Q29udHJvbGxlcjsKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKQEAgLTcwLDkg
KzcwLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdG
b3JTdHlsZXNoZWV0cygpOwogICAgIHZpcnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKLSAgICAvLyBGSVhNRTogSFRNTEZv
cm1Db250cm9sRWxlbWVudCBhY2Nlc3NlcyB0aGUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciB2
aWEgdGhpcyBtZXRob2QuCi0gICAgLy8gUmVtb3ZlIHRoaXMgd2hlbiB0aGUgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3RvciBpcyBubyBsb25nZXIgdXNlZC4KLSAgICB2aXJ0dWFsIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3IqIGh0bWxUcmVlQ29uc3RydWN0b3IoKSBjb25zdDsKKyAgICAvLyBGSVhN
RTogSFRNTEZvcm1Db250cm9sRWxlbWVudCBhY2Nlc3NlcyB0aGUgTGVnYWN5SFRNTFRyZWVCdWls
ZGVyIHZpYSB0aGlzIG1ldGhvZC4KKyAgICAvLyBSZW1vdmUgdGhpcyB3aGVuIHRoZSBMZWdhY3lI
VE1MVHJlZUJ1aWxkZXIgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgdmlydHVhbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIqIGh0bWxUcmVlQ29uc3RydWN0b3IoKSBjb25zdDsKIAogICAgIC8vIEhUTUxT
Y3JpcHRSdW5uZXJIb3N0CiAgICAgdmlydHVhbCB2b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNv
dXJjZSopOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2
aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAt
MTc4LDcgKzE3OCw3IEBAIHZvaWQgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20K
IHsKICAgICAvLyBJZiB0aGUgZm9ybSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0
cmVlLCBwcmVzZXJ2ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndp
c2UsIG51bGwgb3V0IG91ciBmb3JtIGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0n
cyBsaXN0IG9mIGVsZW1lbnRzLgotICAgIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIHRyZWVD
b25zdHJ1Y3RvciA9IDA7CisgICAgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKiB0cmVlQ29uc3RydWN0
b3IgPSAwOwogICAgIGlmIChEb2N1bWVudFBhcnNlciogcGFyc2VyID0gZG9jdW1lbnQoKS0+cGFy
c2VyKCkpCiAgICAgICAgIHRyZWVDb25zdHJ1Y3RvciA9IHBhcnNlci0+aHRtbFRyZWVDb25zdHJ1
Y3RvcigpOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTY3
MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAi
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVp
bGRlci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWV0ZXJF
bGVtZW50LmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJGb3Jt
RGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVk
ZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWV0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUHJv
Z3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNz
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAi
Rm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNz
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRyZWVC
dWlsZGVyLmNwcAkocmV2aXNpb24gNjE2NzQpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWls
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1
aWxkZXIoSFRNTFRvawogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9u
TW9kZShJbml0aWFsKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9sZWdh
Y3lUcmVlQ29uc3RydWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoZG9jdW1lbnQs
IHJlcG9ydEVycm9ycykpCisgICAgLCBtX2xlZ2FjeVRyZWVDb25zdHJ1Y3RvcihuZXcgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyKGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9sYXN0U2Ny
aXB0RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQogICAgICwg
bV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkK
ICAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCkKQEAgLTY2LDcgKzY2LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIo
SFRNTFRvawogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJ
bml0aWFsKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAgICwgbV9sZWdhY3lUcmVl
Q29uc3RydWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoZnJhZ21lbnQsIHNjcmlw
dGluZ1Blcm1pc3Npb24pKQorICAgICwgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3IobmV3IExlZ2Fj
eUhUTUxUcmVlQnVpbGRlcihmcmFnbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBt
X2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUp
CiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJl
clZhbHVlKQogICAgICwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVy
bWlzc2lvbikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYxNjc0KQorKysg
V2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxUb2tlbjsKIGNs
YXNzIEhUTUxEb2N1bWVudDsKLWNsYXNzIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I7CitjbGFz
cyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBOb2RlOwogCiBjbGFzcyBIVE1MVHJlZUJ1
aWxkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGRpcnR5LCByb3R0ZW4gaGFjayB0byBrZWVwIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQgaGFwcHkKICAgICAvLyB1bnRpbCB3ZSBzdG9wIHVzaW5nIHRoZSBs
ZWdhY3kgcGFyc2VyLiBETyBOT1QgQ0FMTCBUSElTIE1FVEhPRC4KLSAgICBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKiBsZWdhY3lUcmVlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2xl
Z2FjeVRyZWVDb25zdHJ1Y3Rvci5nZXQoKTsgfQorICAgIExlZ2FjeUhUTUxUcmVlQnVpbGRlciog
bGVnYWN5VHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9sZWdhY3lUcmVlQ29uc3Ry
dWN0b3IuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICAvLyBSZXByZXNlbnRzIEhUTUw1ICJpbnNl
cnRpb24gbW9kZSIKQEAgLTk5LDggKzk5LDggQEAgcHJpdmF0ZToKICAgICAvLyBmcm9tIHdpdGhp
biBwYXJzZXIgYWN0aW9ucy4KICAgICBIVE1MVG9rZW5pemVyKiBtX3Rva2VuaXplcjsKIAotICAg
IC8vIFdlJ3JlIHJlLXVzaW5nIGxvZ2ljIGZyb20gdGhlIG9sZCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yIHdoaWxlIHRoaXMgY2xhc3MgaXMgYmVpbmcgd3JpdHRlbi4KLSAgICBPd25QdHI8TGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcj4gbV9sZWdhY3lUcmVlQ29uc3RydWN0b3I7CisgICAgLy8g
V2UncmUgcmUtdXNpbmcgbG9naWMgZnJvbSB0aGUgb2xkIExlZ2FjeUhUTUxUcmVlQnVpbGRlciB3
aGlsZSB0aGlzIGNsYXNzIGlzIGJlaW5nIHdyaXR0ZW4uCisgICAgT3duUHRyPExlZ2FjeUhUTUxU
cmVlQnVpbGRlcj4gbV9sZWdhY3lUcmVlQ29uc3RydWN0b3I7CiAKICAgICAvLyBUaGVzZSBtZW1i
ZXJzIGFyZSBpbnRlbnRpb25hbGx5IGR1cGxpY2F0ZWQgYXMgdGhlIGZpcnN0IHNldCBpcyBhIGhh
Y2sKICAgICAvLyBvbiB0b3Agb2YgdGhlIGxlZ2FjeSBwYXJzZXIgd2hpY2ggd2lsbCBldmVudHVh
bGx5IGJlIHJlbW92ZWQuCkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyLmNwcAkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIgogI2luY2x1ZGUgIkltYWdlTG9h
ZGVyLmgiCkBAIC0xNTksNyArMTU5LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdh
Y3lIVE1MRG9jdQogICAgICwgbV90aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
Ojp0aW1lckZpcmVkKQogICAgICwgbV9leHRlcm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKICAg
ICAsIG1fZG9jKGRvYykKLSAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKGRvYywgcmVwb3J0RXJyb3JzKSkKKyAgICAsIG1fdHJlZUNvbnN0cnVjdG9y
KG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZG9jLCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9p
bldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCkBAIC0xOTksNyArMTk5LDcgQEAg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdQogICAgICwgbV90aW1lcih0
aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKQogICAgICwgbV9leHRl
cm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRl
RXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKICAgICAsIG1fZG9jKGZyYWctPmRvY3VtZW50KCkp
Ci0gICAgLCBtX3RyZWVDb25zdHJ1Y3RvcihuZXcgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcihm
cmFnLCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZnJhZywgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBt
X2luV3JpdGUoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50KHRydWUpCiAgICAgLCBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKSW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNzIEhUTUxTY3JpcHRFbGVtZW50OwogY2xhc3MgSFRN
TFZpZXdTb3VyY2VEb2N1bWVudDsKIGNsYXNzIEZyYW1lVmlldzsKLWNsYXNzIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I7CitjbGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBOb2Rl
OwogY2xhc3MgTGVnYWN5UHJlbG9hZFNjYW5uZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwpA
QCAtMTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2Ny
aXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwogCi0gICAgdmlydHVhbCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKiBodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmVl
Q29uc3RydWN0b3IuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQnVpbGRlciog
aHRtbFRyZWVDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZUNvbnN0cnVjdG9yLmdl
dCgpOyB9CiAgICAgdmlydHVhbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqIGFzSFRNTERvY3Vt
ZW50UGFyc2VyKCkgeyByZXR1cm4gdGhpczsgfQogCiBwcml2YXRlOgpAQCAtNDMyLDcgKzQzMiw3
IEBAIHByaXZhdGU6CiAKICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zcmM7CiAgICAgRG9jdW1lbnQq
IG1fZG9jOwotICAgIE93blB0cjxMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yPiBtX3RyZWVDb25z
dHJ1Y3RvcjsKKyAgICBPd25QdHI8TGVnYWN5SFRNTFRyZWVCdWlsZGVyPiBtX3RyZWVDb25zdHJ1
Y3RvcjsKICAgICBib29sIG1faW5Xcml0ZTsKICAgICBib29sIG1fZnJhZ21lbnQ7CiAgICAgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fc2NyaXB0aW5nUGVybWlzc2lvbjsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY3MikJKGZyb20g
V2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwOjYxNjcyKQorKysgV2Vi
Q29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzQ0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1q
b25lc0BrZGUub3JnKQorICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0Br
ZGUub3JnKQorICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMp
IDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jk
cy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2lu
Y2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
VHlwZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MRExpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0
b3J5LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1s
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxNYXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBh
cnNlclF1aXJrcy5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50LmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAi
TG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5n
cy5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3N0YXRpYyBj
b25zdCB1bnNpZ25lZCBjTWF4UmVkdW5kYW50VGFnRGVwdGggPSAyMDsKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBjUmVzaWR1YWxTdHlsZU1heERlcHRoID0gMjAwOworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNSZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQgPSA1OworCisKK3N0YXRpYyBjb25zdCBp
bnQgbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5ID0gMzsKKworLy8gQSBjYXAgb24gdGhlIG51bWJl
ciBvZiB0YWdzIHdpdGggcHJpb3JpdHkgbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5IG9yIGhpZ2hl
cgorLy8gYWxsb3dlZCBpbiBtX2Jsb2NrU3RhY2suIFRoZSBjYXAgaXMgZW5mb3JjZWQgYnkgYWRk
aW5nIHN1Y2ggbmV3IGVsZW1lbnRzIGFzCisvLyBzaWJsaW5ncyBpbnN0ZWFkIG9mIGNoaWxkcmVu
IG9uY2UgaXQgaXMgcmVhY2hlZC4KK3N0YXRpYyBjb25zdCBzaXplX3QgY01heEJsb2NrRGVwdGgg
PSA0MDk2OworCisKK3R5cGVkZWYgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gVGFnTmFtZVNl
dDsKKwordGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUgPgorc3RhdGljIHZvaWQgYWRkVGFncyhU
YWdOYW1lU2V0JiBzZXQsIFF1YWxpZmllZE5hbWUgKCZuYW1lcylbQXJyYXlTaXplXSkKK3sKKyAg
ICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IEFycmF5U2l6ZTsgeCsrKSB7CisgICAgICAgIGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1lc1t4XTsKKyAgICAgICAgc2V0LmFkZChuYW1lLmxv
Y2FsTmFtZSgpLmltcGwoKSk7CisgICAgfQorfQorCitzdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5v
bmNvcHlhYmxlIHsKKyAgICBIVE1MU3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgdCwgaW50
IGx2bCwgTm9kZSogbiwgYm9vbCByLCBIVE1MU3RhY2tFbGVtKiBueCkKKyAgICAgICAgOiB0YWdO
YW1lKHQpCisgICAgICAgICwgbGV2ZWwobHZsKQorICAgICAgICAsIHN0cmF5VGFibGVDb250ZW50
KGZhbHNlKQorICAgICAgICAsIG5vZGUobikKKyAgICAgICAgLCBkaWRSZWZOb2RlKHIpCisgICAg
ICAgICwgbmV4dChueCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkZXJlZk5vZGUoKQorICAg
IHsKKyAgICAgICAgaWYgKGRpZFJlZk5vZGUpCisgICAgICAgICAgICBub2RlLT5kZXJlZigpOwor
ICAgIH0KKworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBi
b29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGUqIG5vZGU7CisgICAgYm9vbCBkaWRSZWZO
b2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7Cit9OworCisvKioKKyAqIFRoZSBwYXJzZXIg
cGFyc2VzIHRva2VuaXplZCBpbnB1dCBpbnRvIHRoZSBkb2N1bWVudCwgYnVpbGRpbmcgdXAgdGhl
CisgKiBkb2N1bWVudCB0cmVlLiBJZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQsIHBhcnNp
bmcgaXQgaXMgc3RyYWlnaHRmb3J3YXJkLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUg
dG8gaGFuZGxlIG1hbnkgSFRNTCBkb2N1bWVudHMgdGhhdCBhcmUgbm90IHdlbGwtZm9ybWVkLAor
ICogc28gdGhlIHBhcnNlciBoYXMgdG8gYmUgdG9sZXJhbnQgYWJvdXQgZXJyb3JzLgorICoKKyAq
IFdlIGhhdmUgdG8gdGFrZSBjYXJlIG9mIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXJyb3IgY29u
ZGl0aW9uczoKKyAqCisgKiAxLiBUaGUgZWxlbWVudCBiZWluZyBhZGRlZCBpcyBleHBsaWNpdGx5
IGZvcmJpZGRlbiBpbnNpZGUgc29tZSBvdXRlciB0YWcuCisgKiAgICBJbiB0aGlzIGNhc2Ugd2Ug
c2hvdWxkIGNsb3NlIGFsbCB0YWdzIHVwIHRvIHRoZSBvbmUsIHdoaWNoIGZvcmJpZHMKKyAqICAg
IHRoZSBlbGVtZW50LCBhbmQgYWRkIGl0IGFmdGVyd2FyZHMuCisgKgorICogMi4gV2UgYXJlIG5v
dCBhbGxvd2VkIHRvIGFkZCB0aGUgZWxlbWVudCBkaXJlY3RseS4gSXQgY291bGQgYmUgdGhhdAor
ICogICAgdGhlIHBlcnNvbiB3cml0aW5nIHRoZSBkb2N1bWVudCBmb3Jnb3Qgc29tZSB0YWcgaW4g
YmV0d2VlbiAob3IgdGhhdCB0aGUKKyAqICAgIHRhZyBpbiBiZXR3ZWVuIGlzIG9wdGlvbmFsKS4g
VGhpcyBjb3VsZCBiZSB0aGUgY2FzZSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAqICAgIHRhZ3M6IEhU
TUwgSEVBRCBCT0RZIFRCT0RZIFRSIFREIExJIChkaWQgSSBmb3JnZXQgYW55PykuCisgKgorICog
My4gV2Ugd2FudCB0byBhZGQgYSBibG9jayBlbGVtZW50IGluc2lkZSB0byBhbiBpbmxpbmUgZWxl
bWVudC4gQ2xvc2UgYWxsCisgKiAgICBpbmxpbmUgZWxlbWVudHMgdXAgdG8gdGhlIG5leHQgaGln
aGVyIGJsb2NrIGVsZW1lbnQuCisgKgorICogNC4gSWYgdGhpcyBkb2Vzbid0IGhlbHAsIGNsb3Nl
IGVsZW1lbnRzIHVudGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFkZCB0aGUKKyAqICAgIGVsZW1lbnQg
b3IgaWdub3JlIHRoZSB0YWcuCisgKgorICovCisKK0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3J0
RXJyb3JzKQorICAgIDogbV9kb2N1bWVudChkb2MpCisgICAgLCBtX2N1cnJlbnQoZG9jKQorICAg
ICwgbV9kaWRSZWZDdXJyZW50KGZhbHNlKQorICAgICwgbV9ibG9ja1N0YWNrKDApCisgICAgLCBt
X2Jsb2Nrc0luU3RhY2soMCkKKyAgICAsIG1fdHJlZURlcHRoKDApCisgICAgLCBtX2hhc1BFbGVt
ZW50SW5TY29wZShOb3RJblNjb3BlKQorICAgICwgbV9pbkJvZHkoZmFsc2UpCisgICAgLCBtX2hh
dmVDb250ZW50KGZhbHNlKQorICAgICwgbV9oYXZlRnJhbWVTZXQoZmFsc2UpCisgICAgLCBtX2lz
UGFyc2luZ0ZyYWdtZW50KGZhbHNlKQorICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3Jz
KQorICAgICwgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoZmFsc2UpCisgICAg
LCBtX2luU3RyYXlUYWJsZUNvbnRlbnQoMCkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCisgICAgLCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50
LT5wYWdlKCkgPyBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRl
SFRNTFBhcnNlclF1aXJrcygpIDogMCkKK3sKK30KKworTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50KiBmcmFnLCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKKyAgICA6IG1fZG9j
dW1lbnQoZnJhZy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY3VycmVudChmcmFnKQorICAgICwgbV9k
aWRSZWZDdXJyZW50KHRydWUpCisgICAgLCBtX2Jsb2NrU3RhY2soMCkKKyAgICAsIG1fYmxvY2tz
SW5TdGFjaygwKQorICAgICwgbV90cmVlRGVwdGgoMCkKKyAgICAsIG1faGFzUEVsZW1lbnRJblNj
b3BlKE5vdEluU2NvcGUpCisgICAgLCBtX2luQm9keSh0cnVlKQorICAgICwgbV9oYXZlQ29udGVu
dChmYWxzZSkKKyAgICAsIG1faGF2ZUZyYW1lU2V0KGZhbHNlKQorICAgICwgbV9pc1BhcnNpbmdG
cmFnbWVudCh0cnVlKQorICAgICwgbV9yZXBvcnRFcnJvcnMoZmFsc2UpCisgICAgLCBtX2hhbmRs
aW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKKyAgICAsIG1faW5TdHJheVRhYmxl
Q29udGVudCgwKQorICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Np
b24pCisgICAgLCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50LT5wYWdlKCkgPyBtX2RvY3VtZW50
LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIDog
MCkKK3sKKyAgICBpZiAoZnJhZykKKyAgICAgICAgZnJhZy0+cmVmKCk7Cit9CisKK0xlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6On5MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCkKK3sKKyAgICBm
cmVlQmxvY2soKTsKKyAgICBpZiAobV9kaWRSZWZDdXJyZW50KQorICAgICAgICBtX2N1cnJlbnQt
PmRlcmVmKCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVzZXQoKQor
eworICAgIEFTU0VSVCghbV9pc1BhcnNpbmdGcmFnbWVudCk7CisKKyAgICBzZXRDdXJyZW50KG1f
ZG9jdW1lbnQpOworCisgICAgZnJlZUJsb2NrKCk7CisKKyAgICBtX3RyZWVEZXB0aCA9IDA7Cisg
ICAgbV9pbkJvZHkgPSBmYWxzZTsKKyAgICBtX2hhdmVGcmFtZVNldCA9IGZhbHNlOworICAgIG1f
aGF2ZUNvbnRlbnQgPSBmYWxzZTsKKyAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQgPSAwOworCisg
ICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAwOworICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAw
OworICAgIG1faGVhZCA9IDA7CisgICAgbV9pc2luZGV4RWxlbWVudCA9IDA7CisKKyAgICBtX3Nr
aXBNb2RlVGFnID0gbnVsbEF0b207CisgICAgCisgICAgaWYgKG1fcGFyc2VyUXVpcmtzKQorICAg
ICAgICBtX3BhcnNlclF1aXJrcy0+cmVzZXQoKTsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpzZXRDdXJyZW50KE5vZGUqIG5ld0N1cnJlbnQpIAoreworICAgIGJvb2wgZGlk
UmVmTmV3Q3VycmVudCA9IG5ld0N1cnJlbnQgJiYgbmV3Q3VycmVudCAhPSBtX2RvY3VtZW50Owor
ICAgIGlmIChkaWRSZWZOZXdDdXJyZW50KSAKKyAgICAgICAgbmV3Q3VycmVudC0+cmVmKCk7IAor
ICAgIGlmIChtX2RpZFJlZkN1cnJlbnQpIAorICAgICAgICBtX2N1cnJlbnQtPmRlcmVmKCk7Cisg
ICAgbV9jdXJyZW50ID0gbmV3Q3VycmVudDsKKyAgICBtX2RpZFJlZkN1cnJlbnQgPSBkaWRSZWZO
ZXdDdXJyZW50OworfQorCitpbmxpbmUgc3RhdGljIGludCB0YWdQcmlvcml0eU9mTm9kZShOb2Rl
KiBuKQoreworICAgIHJldHVybiBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKK30KKworaW5saW5lIHZvaWQgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bGltaXREZXB0aChpbnQgdGFnUHJpb3JpdHkpCit7CisgICAg
d2hpbGUgKG1fdHJlZURlcHRoID49IG1heERPTVRyZWVEZXB0aCkKKyAgICAgICAgcG9wQmxvY2so
bV9ibG9ja1N0YWNrLT50YWdOYW1lKTsKKyAgICBpZiAodGFnUHJpb3JpdHkgPj0gbWluQmxvY2tM
ZXZlbFRhZ1ByaW9yaXR5KSB7CisgICAgICAgIHdoaWxlIChtX2Jsb2Nrc0luU3RhY2sgPj0gY01h
eEJsb2NrRGVwdGgpCisgICAgICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUp
OworICAgIH0KK30KKworaW5saW5lIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5z
ZXJ0Tm9kZUFmdGVyTGltaXREZXB0aChOb2RlKiBuLCBib29sIGZsYXQpCit7CisgICAgbGltaXRE
ZXB0aCh0YWdQcmlvcml0eU9mTm9kZShuKSk7CisgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxh
dCk7Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cGFy
c2VUb2tlbihUb2tlbiogdCkKK3sKKyAgICBpZiAoIW1fc2tpcE1vZGVUYWcuaXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKCF0LT5iZWdpblRhZyAmJiB0LT50YWdOYW1lID09IG1fc2tpcE1vZGVUYWcp
CisgICAgICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIHRhZyBmb3IgdGhlIGN1cnJlbnQgc2tpcCBt
b2RlLCBzbyB3ZSdyZSBkb25lIHNraXBwaW5nLgorICAgICAgICAgICAgbV9za2lwTW9kZVRhZyA9
IG51bGxBdG9tOworICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQtPmxvY2FsTmFtZSgpID09IHQt
PnRhZ05hbWUpCisgICAgICAgICAgICAvLyBEbyBub3Qgc2tpcCA8L2lmcmFtZT4uCisgICAgICAg
ICAgICAvLyBGSVhNRTogV2hhdCBkb2VzIHRoYXQgY29tbWVudCBtZWFuPyBIb3cgY2FuIGl0IGJl
IHJpZ2h0IHRvIHBhcnNlIGEgdG9rZW4gd2l0aG91dCBjbGVhcmluZyBtX3NraXBNb2RlVGFnPwor
ICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJy
Pi4gQmUgY29tcGF0aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2Ug
PGJyPi4KKyAgICBpZiAodC0+aXNDbG9zZVRhZyhiclRhZykgJiYgbV9kb2N1bWVudC0+aW5Db21w
YXRNb2RlKCkpIHsKKyAgICAgICAgcmVwb3J0RXJyb3IoTWFsZm9ybWVkQlJFcnJvcik7CisgICAg
ICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7
CisgICAgICAgIHByb2Nlc3NDbG9zZVRhZyh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8gSWdub3JlIHNwYWNlcywgaWYgd2UncmUgbm90IGluc2lkZSBhIHBhcmFncmFwaCBv
ciBvdGhlciBpbmxpbmUgY29kZS4KKyAgICAvLyBEbyBub3QgYWx0ZXIgdGhlIHRleHQgaWYgaXQg
aXMgcGFydCBvZiBhIHNjcmlwdFRhZy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAm
JiB0LT50ZXh0ICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc2NyaXB0VGFnKSB7CisgICAg
ICAgIGlmIChtX2luQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBtX2N1cnJlbnQtPmxvY2FsTmFtZSgp
ICE9IHN0eWxlVGFnICYmCisgICAgICAgICAgICBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHRp
dGxlVGFnICYmICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAg
ICBtX2hhdmVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxOb2RlPiBu
OworICAgICAgICBTdHJpbmcgdGV4dCA9IHQtPnRleHQuZ2V0KCk7CisgICAgICAgIHVuc2lnbmVk
IGNoYXJzTGVmdCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChjaGFyc0xlZnQpIHsK
KyAgICAgICAgICAgIC8vIHNwbGl0IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5vZGVzIG9mIG1h
bmFnZWFibGUgc2l6ZQorICAgICAgICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1p
dChtX2RvY3VtZW50LCB0ZXh0LCBjaGFyc0xlZnQpOworICAgICAgICAgICAgaWYgKCFpbnNlcnRO
b2RlQWZ0ZXJMaW1pdERlcHRoKG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbjsKKyAgICB9CisK
KyAgICBSZWZQdHI8Tm9kZT4gbiA9IGdldE5vZGUodCk7CisgICAgLy8ganVzdCB0byBiZSBzdXJl
LCBhbmQgdG8gY2F0Y2ggY3VycmVudGx5IHVuaW1wbGVtZW50ZWQgc3R1ZmYKKyAgICBpZiAoIW4p
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gc2V0IGF0dHJpYnV0ZXMKKyAgICBpZiAobi0+
aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihuLmdldCgpKTsKKyAgICAgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lv
biA9PSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQgfHwgdC0+dGFnTmFtZSAhPSBzY3JpcHRUYWcp
CisgICAgICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMuZ2V0KCksIG1fc2NyaXB0
aW5nUGVybWlzc2lvbik7CisKKyAgICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3Nl
IHRhZ3MKKyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzT3B0
aW9uYWwpCisgICAgICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGEgZm9yYmlkZGVuIGVuZCB0YWcg
cmVxdWlyZW1lbnQsIGFuZCBpZiB0aGUgYnJva2VuIFhNTCBzZWxmLWNsb3NpbmcKKyAgICAgICAg
Ly8gc3ludGF4IHdhcyB1c2VkLCByZXBvcnQgYW4gZXJyb3IuCisgICAgICAgIGlmICh0LT5icm9r
ZW5YTUxTdHlsZSAmJiBlLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRl
bikgeworICAgICAgICAgICAgaWYgKHQtPnRhZ05hbWUgPT0gc2NyaXB0VGFnKQorICAgICAgICAg
ICAgICAgIHJlcG9ydEVycm9yKEluY29ycmVjdFhNTENsb3NlU2NyaXB0V2FybmluZyk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoSW5jb3JyZWN0WE1MU2Vs
ZkNsb3NlRXJyb3IsICZ0LT50YWdOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgh
aW5zZXJ0Tm9kZUFmdGVyTGltaXREZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpIHsK
KyAgICAgICAgLy8gd2UgY291bGRuJ3QgaW5zZXJ0IHRoZSBub2RlCisKKyAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuLmdldCgpKTsKKyAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVtZW50ID09IG4pCisgICAg
ICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gMDsKKworICAgICAgICBpZiAobV9jdXJyZW50
Rm9ybUVsZW1lbnQgPT0gbikKKyAgICAgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsK
KworICAgICAgICBpZiAobV9oZWFkID09IG4pCisgICAgICAgICAgICBtX2hlYWQgPSAwOworCisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwordm9pZCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpwYXJzZURvY3R5cGVUb2tlbihEb2N0eXBlVG9rZW4qIHQpCit7
CisgICAgLy8gSWdub3JlIGFueSBkb2N0eXBlIGFmdGVyIHRoZSBmaXJzdC4gIElnbm9yZSBkb2N0
eXBlcyBpbiBmcmFnbWVudHMuCisgICAgaWYgKG1fZG9jdW1lbnQtPmRvY3R5cGUoKSB8fCBtX2lz
UGFyc2luZ0ZyYWdtZW50IHx8IG1fY3VycmVudCAhPSBtX2RvY3VtZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBNYWtlIGEgbmV3IGRvY3R5cGUgbm9kZSBhbmQgc2V0IGl0IGFzIG91ciBk
b2N0eXBlLgorICAgIG1fZG9jdW1lbnQtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1f
ZG9jdW1lbnQsIFN0cmluZzo6YWRvcHQodC0+bV9uYW1lKSwgU3RyaW5nOjphZG9wdCh0LT5tX3B1
YmxpY0lEKSwgU3RyaW5nOjphZG9wdCh0LT5tX3N5c3RlbUlEKSkpOworICAgIGlmICh0LT5tX2Zv
cmNlUXVpcmtzKQorICAgICAgICBtX2RvY3VtZW50LT5zZXRQYXJzZU1vZGUoRG9jdW1lbnQ6OkNv
bXBhdCk7Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9uKGNvbnN0IE5vZGUqIG4pCit7
CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGZv
b3RUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGhlYWRUYWcpOworfQorCitzdGF0aWMgYm9vbCBpc1Rh
YmxlUGFydChjb25zdCBOb2RlKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRyVGFn
KSB8fCBuLT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRoVGFnKQorICAgICAg
ICB8fCBpc1RhYmxlU2VjdGlvbihuKTsKK30KKworc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQo
Y29uc3QgTm9kZSogbikKK3sKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwg
aXNUYWJsZVBhcnQobik7Cit9CisKK3N0YXRpYyBib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnIHx8
IHRhZ05hbWUgPT0gY2FwdGlvblRhZyB8fCB0YWdOYW1lID09IHRkVGFnCisgICAgICAgIHx8IHRh
Z05hbWUgPT0gdGhUYWcgfHwgdGFnTmFtZSA9PSBidXR0b25UYWcgfHwgdGFnTmFtZSA9PSBtYXJx
dWVlVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gb2JqZWN0VGFnIHx8IHRhZ05hbWUgPT0gdGFi
bGVUYWcgfHwgdGFnTmFtZSA9PSBodG1sVGFnOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6Omluc2VydE5vZGUoTm9kZSogbiwgYm9vbCBmbGF0KQoreworICAgIFJlZlB0cjxO
b2RlPiBwcm90ZWN0Tm9kZShuKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
ID0gbi0+bG9jYWxOYW1lKCk7CisgICAgCisgICAgLy8gPHRhYmxlPiBpcyBuZXZlciBhbGxvd2Vk
IGluc2lkZSBzdHJheSB0YWJsZSBjb250ZW50LiAgQWx3YXlzIHBvcCBvdXQgb2YgdGhlIHN0cmF5
IHRhYmxlIGNvbnRlbnQKKyAgICAvLyBhbmQgY2xvc2UgdXAgdGhlIGZpcnN0IHRhYmxlLCBhbmQg
dGhlbiBzdGFydCB0aGUgc2Vjb25kIHRhYmxlIGFzIGEgc2libGluZy4KKyAgICBpZiAobV9pblN0
cmF5VGFibGVDb250ZW50ICYmIGxvY2FsTmFtZSA9PSB0YWJsZVRhZykKKyAgICAgICAgcG9wQmxv
Y2sodGFibGVUYWcpOworCisgICAgaWYgKG1fcGFyc2VyUXVpcmtzICYmICFtX3BhcnNlclF1aXJr
cy0+c2hvdWxkSW5zZXJ0Tm9kZShtX2N1cnJlbnQsIG4pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpbnQgdGFnUHJpb3JpdHkgPSB0YWdQcmlvcml0eU9mTm9kZShuKTsKKworICAgIC8v
IGxldCdzIGJlIHN0dXBpZCBhbmQganVzdCB0cnkgdG8gaW5zZXJ0IGl0LgorICAgIC8vIHRoaXMg
c2hvdWxkIHdvcmsgaWYgdGhlIGRvY3VtZW50IGlzIHdlbGwtZm9ybWVkCisgICAgTm9kZSogbmV3
Tm9kZSA9IG1fY3VycmVudC0+YWRkQ2hpbGQobik7CisgICAgaWYgKCFuZXdOb2RlKQorICAgICAg
ICByZXR1cm4gaGFuZGxlRXJyb3IobiwgZmxhdCwgbG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7IC8v
IFRyeSB0byBoYW5kbGUgdGhlIGVycm9yLgorCisgICAgLy8gZG9uJ3QgcHVzaCBlbGVtZW50cyB3
aXRob3V0IGVuZCB0YWdzIChlLmcuLCA8aW1nPikgb24gdGhlIHN0YWNrCisgICAgYm9vbCBwYXJl
bnRBdHRhY2hlZCA9IG1fY3VycmVudC0+YXR0YWNoZWQoKTsKKyAgICBpZiAodGFnUHJpb3JpdHkg
PiAwICYmICFmbGF0KSB7CisgICAgICAgIGlmIChuZXdOb2RlID09IG1fY3VycmVudCkgeworICAg
ICAgICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBvbmx5IGJlIGhpdCB3aGVuIGEgZGVtb3RlZCA8
Zm9ybT4gaXMgcGxhY2VkIGluc2lkZSBhIHRhYmxlLgorICAgICAgICAgICAgQVNTRVJUKGxvY2Fs
TmFtZSA9PSBmb3JtVGFnKTsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKEZvcm1JbnNpZGVUYWJs
ZVBhcnRFcnJvciwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgSFRNTEZv
cm1FbGVtZW50KiBmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obik7CisgICAg
ICAgICAgICBmb3JtLT5zZXREZW1vdGVkKHRydWUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gVGhlIHB1c2hCbG9jayBmdW5jdGlvbiB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIGN1
cnJlbnQgdG8gdGhlIGJsb2NrIHN0YWNrCisgICAgICAgICAgICAvLyBzbyB3ZSdyZSBndWFyYW50
ZWVkIHRoYXQgbV9kaWRSZWZDdXJyZW50IGlzIGZhbHNlLiBUaGUgY29kZSBiZWxvdyBpcyBhbgor
ICAgICAgICAgICAgLy8gb3B0aW1pemVkIHZlcnNpb24gb2Ygc2V0Q3VycmVudCB0aGF0IHRha2Vz
IGFkdmFudGFnZSBvZiB0aGF0IGZhY3QgYW5kIGFsc28KKyAgICAgICAgICAgIC8vIGFzc3VtZXMg
dGhhdCBuZXdOb2RlIGlzIG5laXRoZXIgMCBub3IgYSBwb2ludGVyIHRvIHRoZSBkb2N1bWVudC4K
KyAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAg
ICAgIG5ld05vZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQo
IW1fZGlkUmVmQ3VycmVudCk7CisgICAgICAgICAgICBuZXdOb2RlLT5yZWYoKTsgCisgICAgICAg
ICAgICBtX2N1cnJlbnQgPSBuZXdOb2RlOworICAgICAgICAgICAgbV9kaWRSZWZDdXJyZW50ID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFj
aGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICBuLT5hdHRhY2goKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVk
KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICBuLT5hdHRhY2goKTsKKyAg
ICAgICAgbi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgfQorCisgICAgaWYgKGxvY2Fs
TmFtZSA9PSBodG1sVGFnICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgIW1faXNQYXJzaW5nRnJh
Z21lbnQpCisgICAgICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERv
Y3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAg
IC8vIEVycm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9m
IHNwZWNpZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7CisKKyAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBk
ZWNpZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCisgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSkgeworICAgICAgICBIVE1MRWxlbWVudCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
bik7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUodHJUYWcpIHx8IGgtPmhhc0xvY2FsTmFt
ZSh0aFRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRkVGFnKSkgeworICAgICAgICAgICAgaWYgKG1f
aW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgeworICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxO
YW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgLy8gcG9wIG91
dCB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCisgICAgICAgICAg
ICAgICAgd2hpbGUgKG1fYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkK
KyAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0Tm9kZShuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoaGVhZFRhZykpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0Rv
Y3VtZW50Tm9kZSgpICYmICFtX2N1cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKKyAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOworICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUobWV0YVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpIHx8IGgtPmhh
c0xvY2FsTmFtZShiYXNlVGFnKSkgeworICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZh
bHNlOworICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKKyAgICAgICAgICAgICAgICBjcmVhdGVI
ZWFkKCk7CisgICAgICAgICAgICAgICAgY3JlYXRlZEhlYWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG1faGVhZCkgeworICAgICAgICAgICAgICAgIGlmICghY3JlYXRl
ZEhlYWQpCisgICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250
ZW50RXJyb3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAobV9oZWFkLT5hZGRDaGlsZChuKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaHRt
bFRhZykpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkg
eworICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSAmJiBt
X2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbV9p
c1BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihSZWR1
bmRhbnRIVE1MQm9keUVycm9yLCAmbG9jYWxOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4
aXN0aW5nIG9uZQorICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3Zl
cndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICBO
YW1lZE5vZGVNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmlidXRlcyh0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZXhpc3RpbmdIVE1MID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1dGVz
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYm
IGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJp
YnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPm5hbWUoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhpc3RpbmdIVE1MLT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwgaXQt
PnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChoLT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShzdHlsZVRh
ZykgfHwgaC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykpIHsKKyAgICAgICAgICAgIGJvb2wgY3Jl
YXRlZEhlYWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghbV9oZWFkKSB7CisgICAgICAgICAg
ICAgICAgY3JlYXRlSGVhZCgpOworICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2hlYWQpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBuZXdOb2RlID0gbV9oZWFkLT5hZGRDaGlsZChuKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIW5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5h
bWUoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkSGVhZCkK
KyAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZENvbnRlbnRFcnJv
ciwgJmxvY2FsTmFtZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAg
ICAgICAgICAgICAgICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICAg
ICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRh
Y2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICBuLT5h
dHRhY2goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChtX2luQm9keSkgeworICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKGgt
PnRhZ1FOYW1lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYm9keVRhZykpIHsKKyAgICAg
ICAgICAgIGlmIChtX2luQm9keSAmJiBtX2RvY3VtZW50LT5ib2R5KCkgJiYgIW1faXNQYXJzaW5n
RnJhZ21lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVs
ZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCisgICAgICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJp
YnV0ZXMKKyAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJp
Z2h0Y29sb3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgorICAgICAgICAgICAgICAgIHJl
cG9ydEVycm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2NhbE5hbWUpOworICAgICAgICAg
ICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRy
aWJ1dGVzKHRydWUpOworICAgICAgICAgICAgICAgIEVsZW1lbnQqIGV4aXN0aW5nQm9keSA9IG1f
ZG9jdW1lbnQtPmJvZHkoKTsKKyAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGJtYXAgPSBl
eGlzdGluZ0JvZHktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAg
ICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+bmFtZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQm9keS0+c2V0QXR0cmlidXRlKGl0LT5uYW1l
KCksIGl0LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50
Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoYXJlYVRhZykpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRN
YXBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkQXJlYUVy
cm9yLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
TWFwRWxlbWVudC0+YWRkQ2hpbGQobik7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hl
ZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGgtPmhhc0xv
Y2FsTmFtZShjYXB0aW9uVGFnKSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkKG1f
Y3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzVGFi
bGVQYXJ0KG1fY3VycmVudCkpCisgICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKG4tPmlzQ29tbWVudE5vZGUoKSAmJiAhbV9oZWFkKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAyLiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJl
bnRseSBhY3RpdmUgZWxlbWVudCB0byBkbyBzb21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCisg
ICAgaWYgKG1fY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50
KiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2N1cnJlbnQpOworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1lID0gaC0+bG9jYWxOYW1lKCk7CisgICAgICAg
IGlmIChoLT5oYXNMb2NhbE5hbWUoaHRtbFRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50
KiBlbHQgPSBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4p
IDogMDsKKyAgICAgICAgICAgIGlmIChlbHQgJiYgKGVsdC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRh
ZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8CisgICAgICAgICAgICAgICAgZWx0
LT5oYXNMb2NhbE5hbWUobWV0YVRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwK
KyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8IGVsdC0+aGFz
TG9jYWxOYW1lKGVtYmVkVGFnKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1l
KHRpdGxlVGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShpc2luZGV4VGFnKSB8fAorICAgICAgICAg
ICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKGJhc2VUYWcpKSkgeworICAgICAgICAgICAgICAgIGlm
ICghbV9oZWFkKSB7CisgICAgICAgICAgICAgICAgICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVu
dDo6Y3JlYXRlKG1fZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKG1f
aGVhZC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG4t
PmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nh
c3Q8VGV4dCo+KG4pOworICAgICAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hp
dGVzcGFjZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1faGF2ZUZyYW1lU2V0KSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGhlYWQgZXhpc3RzLgorICAgICAgICAgICAg
ICAgICAgICAvLyBCdXQgbm90IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBNYWlsLCB3aGVyZSB0aGUg
aW1wbGljaXQgPGhlYWQ+IGlzbid0IGV4cGVjdGVkIC0gPHJkYXI6Ly9wcm9ibGVtLzY4NjM3OTU+
CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCAmJiBzaG91bGRD
cmVhdGVJbXBsaWNpdEhlYWQobV9kb2N1bWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVIZWFkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcG9wQmxvY2soaGVhZFRhZyk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOworICAgICAgICAgICAgICAgICAgICBpbnNl
cnROb2RlKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1lc2V0Q29udGVudEVy
cm9yLCAmbG9jYWxOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoaGVhZFRhZykpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGh0
bWxUYWcpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIGJvZHkgc3RhcnRzIGhlcmUuLi4K
KyAgICAgICAgICAgICAgICBpZiAoIW1faGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50VGFnTmFtZSA9PSBoZWFkVGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICBzdGFydEJv
ZHkoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MQm9keUVsZW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRF
cnJvcihNaXNwbGFjZWRGcmFtZXNldENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGFkZHJlc3NUYWcpIHx8
IGgtPmhhc0xvY2FsTmFtZShmb250VGFnKQorICAgICAgICAgICAgICAgICAgIHx8IGgtPmhhc0xv
Y2FsTmFtZShzdHlsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkgeworICAgICAg
ICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUs
ICZjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoY2FwdGlvblRhZykpIHsKKyAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBp
biBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAg
ICByZXBvcnRFcnJvcihNaXNwbGFjZWRDYXB0aW9uQ29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsK
KyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgIGlmIChp
c1RhYmxlUGFydChuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0
KTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpIHx8IGgtPmhh
c0xvY2FsTmFtZSh0clRhZykgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9y
KE1pc3BsYWNlZFRhYmxlRXJyb3IsICZjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICAgICAg
aWYgKG1faXNQYXJzaW5nRnJhZ21lbnQgJiYgIWgtPmhhc0xvY2FsTmFtZSh0YWJsZVRhZykpCisg
ICAgICAgICAgICAgICAgICAgIC8vIGZyYWdtZW50IG1heSBjb250YWluIHRhYmxlIHBhcnRzIHdp
dGhvdXQgPHRhYmxlPiBhbmNlc3RvciwgcG9wIHRoZW0gb25lIGJ5IG9uZQorICAgICAgICAgICAg
ICAgICAgICBwb3BCbG9jayhoLT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcG9wQmxv
Y2sobG9jYWxOYW1lKTsgLy8gZW5kIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOyAgICAgIC8vIC4uLmFuZCBzdGFydCBhIG5ldyBvbmUKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBOb2RlKiBwYXJlbnQg
PSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgbWF5IGhh
dmUgcmVtb3ZlZCB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50IGZyb20gdGhlIERPTQorICAgICAg
ICAgICAgICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzcK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRvIHJlYWwgcmVjb3ZlcnkgaGVy
ZSBhbmQgcmUtcGFyZW50IHdpdGggdGhlIGNvcnJlY3Qgbm9kZS4KKyAgICAgICAgICAgICAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIE5vZGUqIGdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpIHx8CisgICAgICAgICAgICAgICAgICAgICho
LT5oYXNMb2NhbE5hbWUodHJUYWcpICYmCisgICAgICAgICAgICAgICAgICAgICBpc1RhYmxlU2Vj
dGlvbihwYXJlbnQpICYmIGdyYW5kcGFyZW50ICYmIGdyYW5kcGFyZW50LT5oYXNUYWdOYW1lKHRh
YmxlVGFnKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICgoIW4tPmhhc1RhZ05hbWUodGRUYWcp
ICYmICFuLT5oYXNUYWdOYW1lKHRoVGFnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAhbi0+
aGFzVGFnTmFtZShmb3JtVGFnKSAmJiAhbi0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKSAmJiBpc1Rh
YmxlU2VjdGlvbihub2RlKSAmJgorICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdO
YW1lKHRhYmxlVGFnKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5oYXNU
YWdOYW1lKHRhYmxlVGFnKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KG5vZGUtPmhhc1RhZ05hbWUodHJUYWcpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50KTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdpdGggZnJhZ21lbnRzCisgICAgICAg
ICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRC
ZWZvcmUobiwgbm9kZSwgZWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWVjKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihTdHJheVRhYmxlQ29udGVudEVycm9yLCAm
bG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG4tPmlzSFRNTEVsZW1lbnQoKSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIWZsYXQgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+ZW5k
VGFnUmVxdWlyZW1lbnQoKSAhPSBUYWdTdGF0dXNGb3JiaWRkZW4pCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFt
ZSwgdGFnUHJpb3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmJlZ2luUGFy
c2luZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQrKzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250
ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFlYykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50LT5oYXNUYWdOYW1lKHRyVGFnKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoVGFibGVQYXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRkVGFn
LmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRh
YmxlQ2VsbEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgbV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBhbiBlcnJvciBpbiB0
aGlzIGNhc2UsIHNpbmNlIG1ha2luZyBhIDx0Ym9keT4gaGFwcGVucyBhbGwgdGhlIHRpbWUgd2hl
biB5b3UgaGF2ZSA8dGFibGU+PHRyPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBp
dCBpc24ndCByZWFsbHkgYSBwYXJzZSBlcnJvciBwZXIgc2UuCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnROb2RlKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUodGJvZHlUYWcs
IG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZs
b2NhbE5hbWUsICZ0clRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnROb2RlKEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcihN
aXNwbGFjZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsK
KyAgICAgICAgICAgIHBvcEJsb2NrKG9iamVjdFRhZyk7CisgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUocFRhZykgfHwgaXNIZWFk
aW5nVGFnKGN1cnJlbnRUYWdOYW1lKSkgeworICAgICAgICAgICAgaWYgKCFpc0lubGluZShuKSkg
eworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUob3B0Z3JvdXBUYWcp
KSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAg
ICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc2VsZWN0VGFn
KSB7CisgICAgICAgICAgICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3Nl
bGVjdD4uIExldCdzIGRvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxO
YW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
c2VsZWN0VGFnKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBpbnB1dFRhZyB8fCBs
b2NhbE5hbWUgPT0gdGV4dGFyZWFUYWcpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihN
aXNwbGFjZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsK
KyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVu
dFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBp
ZiAoIWgtPmhhc0xvY2FsTmFtZShib2R5VGFnKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5l
KG1fY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKKyAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAobV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChu
LT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0
Kj4obik7CisgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9k
b2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGluc2VydE5vZGUoSFRN
TEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzLiBJZiB3ZSBjb3VsZG4n
dCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQgYXR0ZW1wdCB0byBlcnJv
ci1jb3JyZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkgeworICAgICAgICByZXBvcnRFcnJv
cihJZ25vcmVkQ29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGluc2VydE5vZGUo
bik7Cit9CisKK3R5cGVkZWYgYm9vbCAoTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6KkNyZWF0
ZUVycm9yQ2hlY2tGdW5jKShUb2tlbiogdCwgUmVmUHRyPE5vZGU+Jik7Cit0eXBlZGVmIEhhc2hN
YXA8QXRvbWljU3RyaW5nSW1wbCosIENyZWF0ZUVycm9yQ2hlY2tGdW5jPiBGdW5jdGlvbk1hcDsK
KworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gVGV4dDo6Y3Jl
YXRlKG1fZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gQ29tbWVudDo6
Y3JlYXRlKG1fZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhU
b2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIGlmICghbV9oZWFkIHx8IG1fY3Vy
cmVudC0+bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBtX2hlYWQgPSBIVE1MSGVh
ZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9oZWFkOwor
ICAgIH0gZWxzZQorICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpib2R5
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCit7CisgICAgLy8gYm9keSBu
byBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKKyAgICBpZiAobV9oYXZlRnJh
bWVTZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCBo
ZWFkIGV4aXN0cyAodW5sZXNzIHBhcnNpbmcgYSBmcmFnbWVudCkuCisgICAgLy8gQnV0IG5vdCBm
b3Igb2xkZXIgdmVyc2lvbnMgb2YgTWFpbCwgd2hlcmUgdGhlIGltcGxpY2l0IDxoZWFkPiBpc24n
dCBleHBlY3RlZCAtIDxyZGFyOi8vcHJvYmxlbS82ODYzNzk1PgorICAgIGlmICghbV9pc1BhcnNp
bmdGcmFnbWVudCAmJiBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQobV9kb2N1bWVudCkpCisgICAg
ICAgIGNyZWF0ZUhlYWQoKTsKKyAgICAKKyAgICBwb3BCbG9jayhoZWFkVGFnKTsKKyAgICBzdGFy
dEJvZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQor
eworICAgIHBvcEJsb2NrKGhlYWRUYWcpOworICAgIGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJh
bWVTZXQgJiYgIW1faGF2ZUNvbnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soYm9keVRhZyk7Cisg
ICAgICAgIC8vICMjIyBhY3R1YWxseSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBu
b3cgaGlkZGVuICJib2R5IiBlbGVtZW50CisgICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0
aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQorICAgICAg
ICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3Jr
IGFzIGxvbmcgYXMgdGhlcmUgaXMKKyAgICAgICAgLy8gbm8gc2l0ZSBhY3R1YWxseSByZWx5aW5n
IG9uIHRoYXQgZGV0YWlsIChEaXJrKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+Ym9keSgpICYm
ICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+Ym9keSgpLT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTpub25lIik7CisgICAgICAgIG1faW5Cb2R5
ID0gZmFsc2U7CisgICAgfQorICAgIGlmICgobV9oYXZlQ29udGVudCB8fCBtX2hhdmVGcmFtZVNl
dCkgJiYgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV9oYXZlRnJhbWVTZXQgPSB0cnVlOworICAgIHN0YXJ0Qm9keSgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZvcm1D
cmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICAv
LyBPbmx5IGNyZWF0ZSBhIG5ldyBmb3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUu
CisgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9y
LgorICAgIGlmICghbV9jdXJyZW50Rm9ybUVsZW1lbnQpIHsKKyAgICAgICAgbV9jdXJyZW50Rm9y
bUVsZW1lbnQgPSBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAgICAg
cmVzdWx0ID0gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7CisgICAgICAgIHBDbG9zZXJDcmVhdGVFcnJv
ckNoZWNrKHQsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiog
dCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJ
c2luZGV4KHQpOworICAgIGlmICghbV9pbkJvZHkpCisgICAgICAgIG1faXNpbmRleEVsZW1lbnQg
PSBuLnJlbGVhc2UoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdC0+c2VsZkNsb3NpbmdUYWcgPSB0
cnVlOworICAgICAgICByZXN1bHQgPSBuLnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hl
Y2sodCwgcmVzdWx0KTsKKyAgICBwb3BCbG9jayhkdFRhZyk7CisgICAgcG9wQmxvY2soZGRUYWcp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmR0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7Cisg
ICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKKyAgICBwb3BCbG9jayhkZFRh
Zyk7CisgICAgcG9wQmxvY2soZHRUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCit7CisgICAgcG9wQmxvY2socnBUYWcpOworICAgIHBvcEJsb2NrKHJ0VGFnKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpy
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHBvcEJsb2Nr
KHJwVGFnKTsKKyAgICBwb3BCbG9jayhydFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biogdCwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQ
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7
CisgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKKyAgICBwb3BCbG9jayh0
LT50YWdOYW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxO
b2RlPiYpCit7CisgICAgcmV0dXJuIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUp
OworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHBvcEJsb2NrKHRkVGFnKTsK
KyAgICBwb3BCbG9jayh0aFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCit7CisgICAgcG9wQmxvY2sodGhlYWRUYWcpOworICAgIHBvcEJsb2Nr
KHRib2R5VGFnKTsKKyAgICBwb3BCbG9jayh0Zm9vdFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHNldFNraXBNb2RlKG5vZW1iZWRUYWcp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCit7CisgICAg
c2V0U2tpcE1vZGUobm9mcmFtZXNUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCit7CisgICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CisgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFt
ZSAmJiBmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRl
U2NyaXB0KSkKKyAgICAgICAgICAgIHNldFNraXBNb2RlKG5vc2NyaXB0VGFnKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENs
b3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIGlmICho
YXNQRWxlbWVudEluU2NvcGUoKSkKKyAgICAgICAgcG9wQmxvY2socFRhZyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0cmlj
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIGlmIChtX2Rv
Y3VtZW50LT5pbkNvbXBhdE1vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhh
c1BFbGVtZW50SW5TY29wZSgpKQorICAgICAgICBwb3BCbG9jayhwVGFnKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptYXBDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgbV9jdXJyZW50TWFw
RWxlbWVudCA9IEhUTUxNYXBFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgcmVzdWx0
ID0gbV9jdXJyZW50TWFwRWxlbWVudDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2
b2lkIG1hcFRhZ1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWcsIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCit7CisgICAgbWFwLnNldCh0YWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBmdW5jKTsKK30KKwordGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUgPgor
c3RhdGljIHZvaWQgbWFwVGFnc1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBRdWFsaWZpZWROYW1l
ICgmbmFtZXMpW0FycmF5U2l6ZV0sIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCit7CisgICAg
Zm9yIChzaXplX3QgeCA9IDA7IHggPCBBcnJheVNpemU7IHgrKykgeworICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lID0gbmFtZXNbeF07CisgICAgICAgIG1hcFRhZ1RvRnVuYyhtYXAs
IG5hbWUsIGZ1bmMpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpnZXROb2RlKFRva2VuKiB0KQoreworICAgIC8vIEluaXQgb3VyIGVycm9y
IGhhbmRsaW5nIHRhYmxlLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoRnVuY3Rpb25NYXAsIGdG
dW5jdGlvbk1hcCwgKCkpOworICAgIGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7CisgICAg
ICAgIFF1YWxpZmllZE5hbWUgbmVzdGVkQ3JlYXRlRXJyb3JUYWdzW10gPSB7IGFUYWcsIGJ1dHRv
blRhZywgbm9iclRhZywgdHJUYWcgfTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25N
YXAsIG5lc3RlZENyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5l
c3RlZENyZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAgIFF1YWxpZmllZE5hbWUgbmVzdGVkU3R5
bGVDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYlRhZywgYmlnVGFnLCBpVGFnLCBzVGFnLCBzbWFsbFRh
Zywgc3RyaWtlVGFnLCB0dFRhZywgdVRhZyB9OworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5j
dGlvbk1hcCwgbmVzdGVkU3R5bGVDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAgIFF1YWxpZmll
ZE5hbWUgcENsb3NlckNyZWF0ZUVycm9yVGFnc1tdID0geyBhZGRyZXNzVGFnLCBhcnRpY2xlVGFn
LAorICAgICAgICAgICAgYXNpZGVUYWcsIGJsb2NrcXVvdGVUYWcsIGNlbnRlclRhZywgZGlyVGFn
LCBkaXZUYWcsIGRsVGFnLAorICAgICAgICAgICAgZmllbGRzZXRUYWcsIGZvb3RlclRhZywgaDFU
YWcsIGgyVGFnLCBoM1RhZywgaDRUYWcsIGg1VGFnLCBoNlRhZywKKyAgICAgICAgICAgIGhlYWRl
clRhZywgaGdyb3VwVGFnLCBoclRhZywgbGlzdGluZ1RhZywgbWVudVRhZywgbmF2VGFnLCBvbFRh
ZywKKyAgICAgICAgICAgIHBUYWcsIHBsYWludGV4dFRhZywgcHJlVGFnLCBzZWN0aW9uVGFnLCB1
bFRhZyB9OworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgcENsb3NlckNyZWF0
ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJDcmVhdGVFcnJv
ckNoZWNrKTsKKworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBib2R5VGFnLCAm
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBkZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmRkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rp
b25NYXAsIGR0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZHRDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZm9ybVRhZywgJkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmZvcm1DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZnJhbWVzZXRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMo
Z0Z1bmN0aW9uTWFwLCBoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBpc2lu
ZGV4VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hl
Y2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBtYXBUYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjptYXBDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgbGlUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpu
ZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIG5vZW1iZWRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2VtYmVk
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5v
ZnJhbWVzVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXNDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9zY3JpcHRUYWcs
ICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0YWJsZVRhZywgJkxlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
bWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgcnBUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpycENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBydFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVj
ayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHNlbGVjdFRhZywgJkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBt
YXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0ZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1
bmN0aW9uTWFwLCB0aFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Ym9k
eVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Zm9vdFRhZywgJkxl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aGVhZFRhZywgJkxlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAg
IGdGdW5jdGlvbk1hcC5zZXQoY29tbWVudEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAu
c2V0KHRleHRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRleHRDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICB9CisKKyAgICBib29sIHByb2NlZWQgPSB0cnVlOworICAgIFJl
ZlB0cjxOb2RlPiByZXN1bHQ7CisgICAgaWYgKENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hl
Y2tGdW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGwoKSkpCisgICAgICAgIHBy
b2NlZWQgPSAodGhpcy0+KmVycm9yQ2hlY2tGdW5jKSh0LCByZXN1bHQpOworICAgIGlmIChwcm9j
ZWVkKQorICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVt
ZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHQtPnRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJ
KSwgbV9kb2N1bWVudCwgbV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmFs
bG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAg
ICAvLyB3d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2
ZXMgYSBsZXZlbCBvZiBuZXN0aW5nIG9mCisgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJv
bSBhIGJ1bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMAorICAgIC8v
IG5lc3RlZCB0YWdzIG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3JpbmcgdGhlbSBh
bGwgdG9nZXRoZXIuCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yIChIVE1MU3RhY2tFbGVt
KiBjdXJyID0gbV9ibG9ja1N0YWNrOworICAgICAgICAgaSA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0
aCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gdGFnTmFtZTsKKyAgICAgICAgIGN1cnIgPSBj
dXJyLT5uZXh0LCBpKyspIHsgfQorICAgIHJldHVybiBpICE9IGNNYXhSZWR1bmRhbnRUYWdEZXB0
aDsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwcm9jZXNzQ2xvc2VUYWco
VG9rZW4qIHQpCit7CisgICAgLy8gU3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAg
IC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBh
Z2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxl
dCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50
YWdOYW1lID09IGh0bWxUYWcgfHwgdC0+dGFnTmFtZSA9PSBib2R5VGFnIHx8IHQtPnRhZ05hbWUg
PT0gY29tbWVudEF0b20pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGNoZWNrRm9y
Q2xvc2VUYWdFcnJvcnMgPSB0cnVlOworICAgIGlmICh0LT50YWdOYW1lID09IGZvcm1UYWcgJiYg
bV9jdXJyZW50Rm9ybUVsZW1lbnQpIHsKKyAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAw
OworICAgICAgICBjaGVja0ZvckNsb3NlVGFnRXJyb3JzID0gZmFsc2U7CisgICAgfSBlbHNlIGlm
ICh0LT50YWdOYW1lID09IG1hcFRhZykKKyAgICAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBwVGFnKQorICAgICAgICBjaGVja0ZvckNsb3Nl
VGFnRXJyb3JzID0gZmFsc2U7CisgICAgICAgIAorICAgIEhUTUxTdGFja0VsZW0qIG9sZEVsZW0g
PSBtX2Jsb2NrU3RhY2s7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSwgY2hlY2tGb3JDbG9zZVRh
Z0Vycm9ycyk7CisgICAgaWYgKG9sZEVsZW0gPT0gbV9ibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUg
PT0gcFRhZykgeworICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6
aW5nbHkgR2Vja28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CisgICAgICAgIC8vIHRoaXMg
YXMgYSB2YWxpZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRo
ZSBlbXB0eQorICAgICAgICAvLyBwYXJhZ3JhcGguCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1
ZTsKKyAgICAgICAgcGFyc2VUb2tlbih0KTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7
CisgICAgICAgIHJlcG9ydEVycm9yKFN0cmF5UGFyYWdyYXBoQ2xvc2VFcnJvcik7CisgICAgfQor
fQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSGVhZGluZ1RhZyhjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUYWdOYW1l
U2V0LCBoZWFkaW5nVGFncywgKCkpOworICAgIGlmIChoZWFkaW5nVGFncy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lc1tdID0geyBoMVRhZywgaDJUYWcsIGgzVGFn
LCBoNFRhZywgaDVUYWcsIGg2VGFnIH07CisgICAgICAgIGFkZFRhZ3MoaGVhZGluZ1RhZ3MsIHRh
Z05hbWVzKTsKKyAgICB9CisgICAgcmV0dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUu
aW1wbCgpKTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZShO
b2RlKiBub2RlKSBjb25zdAoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAg
ICBIVE1MRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAg
ICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGZvbnRUYWcp
IHx8IGUtPmhhc0xvY2FsTmFtZSh0dFRhZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFt
ZSh1VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYlRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGlUYWcp
IHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KHN0cmlrZVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGJpZ1RhZykgfHwKKyAgICAgICAgICAgIGUt
Pmhhc0xvY2FsTmFtZShzbWFsbFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGVtVGFnKSB8fCBlLT5o
YXNMb2NhbE5hbWUoc3Ryb25nVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGRm
blRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGNvZGVUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzYW1w
VGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGtiZFRhZykgfHwgZS0+aGFzTG9j
YWxOYW1lKHZhclRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGNpdGVUYWcpIHx8CisgICAgICAgICAg
ICBlLT5oYXNMb2NhbE5hbWUoYWJiclRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFjcm9ueW1UYWcp
IHx8IGUtPmhhc0xvY2FsTmFtZShzdWJUYWcpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5h
bWUoc3VwVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3BhblRhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KG5vYnJUYWcpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9mcmFtZXNUYWcpIHx8
IGUtPmhhc0xvY2FsTmFtZShub2xheWVyVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxO
YW1lKG5vZW1iZWRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjaWYgIUVOQUJMRShY
SFRNTE1QKQorICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG5vc2NyaXB0VGFnKSAmJiAhbV9p
c1BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVu
dC0+ZnJhbWUoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPmNh
bkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc1Jlc2lkdWFs
U3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHJlc2lkdWFsU3R5bGVUYWdzLCAo
KSk7CisgICAgaWYgKHJlc2lkdWFsU3R5bGVUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBRdWFs
aWZpZWROYW1lIHRhZ05hbWVzW10gPSB7IGFUYWcsIGZvbnRUYWcsIHR0VGFnLCB1VGFnLCBiVGFn
LCBpVGFnLAorICAgICAgICAgICAgc1RhZywgc3RyaWtlVGFnLCBiaWdUYWcsIHNtYWxsVGFnLCBl
bVRhZywgc3Ryb25nVGFnLCBkZm5UYWcsCisgICAgICAgICAgICBjb2RlVGFnLCBzYW1wVGFnLCBr
YmRUYWcsIHZhclRhZywgbm9iclRhZyB9OworICAgICAgICBhZGRUYWdzKHJlc2lkdWFsU3R5bGVU
YWdzLCB0YWdOYW1lcyk7CisgICAgfQorICAgIHJldHVybiByZXNpZHVhbFN0eWxlVGFncy5jb250
YWlucyh0YWdOYW1lLmltcGwoKSk7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6aXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiwg
dW5hZmZlY3RlZFRhZ3MsICgpKTsKKyAgICBpZiAodW5hZmZlY3RlZFRhZ3MuaXNFbXB0eSgpKSB7
CisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZXNbXSA9IHsgYm9keVRhZywgdGFibGVUYWcs
IHRoZWFkVGFnLCB0Ym9keVRhZywKKyAgICAgICAgICAgIHRmb290VGFnLCB0clRhZywgdGhUYWcs
IHRkVGFnLCBjYXB0aW9uVGFnLCBjb2xncm91cFRhZywgY29sVGFnLAorICAgICAgICAgICAgb3B0
aW9uVGFnLCBvcHRncm91cFRhZywgc2VsZWN0VGFnLCBvYmplY3RUYWcsIGRhdGFncmlkVGFnLCBk
YXRhbGlzdFRhZyB9OworICAgICAgICBhZGRUYWdzKHVuYWZmZWN0ZWRUYWdzLCB0YWdOYW1lcyk7
CisgICAgfQorICAgIHJldHVybiAhdW5hZmZlY3RlZFRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBs
KCkpOworfQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRsZVJlc2lkdWFs
U3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQoreworICAgIEhU
TUxTdGFja0VsZW0qIG1heEVsZW0gPSAwOworICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyAg
ICBib29sIHN0cmF5VGFibGVDb250ZW50ID0gZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQ7CisKKyAg
ICB1bnNpZ25lZCBpdGVyYXRpb25Db3VudCA9IDA7CisKKyAgICBtX2hhbmRsaW5nUmVzaWR1YWxT
dHlsZUFjcm9zc0Jsb2NrcyA9IHRydWU7CisgICAgd2hpbGUgKCFmaW5pc2hlZCAmJiAoaXRlcmF0
aW9uQ291bnQrKyA8IGNSZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQpKSB7CisgICAgICAgIC8v
IEZpbmQgdGhlIG91dGVybW9zdCBlbGVtZW50IHRoYXQgY3Jvc3NlcyBvdmVyIHRvIGEgaGlnaGVy
IGxldmVsLiBJZiB0aGVyZSBleGlzdHMgYW5vdGhlciBoaWdoZXItbGV2ZWwKKyAgICAgICAgLy8g
ZWxlbWVudCwgd2Ugd2lsbCBkbyBhbm90aGVyIHBhc3MsIHVudGlsIHdlIGhhdmUgY29ycmVjdGVk
IHRoZSBpbm5lcm1vc3Qgb25lLgorICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAg
ICAgSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKKyAgICAgICAgSFRNTFN0YWNr
RWxlbSogcHJldiA9IDA7CisgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZNYXhFbGVtID0gMDsK
KyAgICAgICAgbWF4RWxlbSA9IDA7CisgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAg
d2hpbGUgKGN1cnIgJiYgY3VyciAhPSBlbGVtKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+bGV2
ZWwgPiBlbGVtLT5sZXZlbCkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZmZlY3RlZEJ5UmVz
aWR1YWxTdHlsZShjdXJyLT50YWdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGlmIChtYXhFbGVtKQorICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
aWxsIG5lZWQgYW5vdGhlciBwYXNzLgorICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIG1heEVsZW0gPSBjdXJyOworICAgICAgICAgICAgICAgIHBy
ZXZNYXhFbGVtID0gcHJldjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldiA9IGN1
cnI7CisgICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghY3VyciB8fCAhbWF4RWxlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBO
b2RlKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOworICAgICAgICBOb2RlKiBibG9ja0VsZW0g
PSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogbV9jdXJyZW50OworICAgICAgICBO
b2RlKiBwYXJlbnRFbGVtID0gZWxlbS0+bm9kZTsKKworICAgICAgICAvLyBDaGVjayB0byBzZWUg
aWYgdGhlIHJlcGFyZW50aW5nIHRoYXQgaXMgZ29pbmcgdG8gb2NjdXIgaXMgYWxsb3dlZCBhY2Nv
cmRpbmcgdG8gdGhlIERPTS4KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlaXRoZXIgYWx3
YXlzIGFsbG93IGl0IG9yIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBmaXh1cCBpbnN0ZWFkIG9mCisg
ICAgICAgIC8vIGp1c3QgYmFpbGluZyBoZXJlLgorICAgICAgICAvLyBFeGFtcGxlOiA8cD48Zm9u
dD48Y2VudGVyPmJsYWg8L2ZvbnQ+PC9jZW50ZXI+PC9wPiBpc24ndCBkb2luZyBhIGZpeHVwIHJp
Z2h0IG5vdy4KKyAgICAgICAgaWYgKCFwYXJlbnRFbGVtLT5jaGlsZEFsbG93ZWQoYmxvY2tFbGVt
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9
IFVua25vd247CisKKyAgICAgICAgaWYgKG1heEVsZW0tPm5vZGUtPnBhcmVudE5vZGUoKSAhPSBl
bGVtLT5ub2RlKSB7CisgICAgICAgICAgICAvLyBXYWxrIHRoZSBzdGFjayBhbmQgcmVtb3ZlIGFu
eSBlbGVtZW50cyB0aGF0IGFyZW4ndCByZXNpZHVhbCBzdHlsZSB0YWdzLiAgVGhlc2UKKyAgICAg
ICAgICAgIC8vIGFyZSBiYXNpY2FsbHkganVzdCBiZWluZyBjbG9zZWQgdXAuICBFeGFtcGxlOgor
ICAgICAgICAgICAgLy8gPGZvbnQ+PHNwYW4+TW9vPHA+R29vPC9mb250PjwvcD4uCisgICAgICAg
ICAgICAvLyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIDxzcGFuPiBkb2Vzbid0IG5lZWQgdG8g
YmUgcmVvcGVuZWQuICBJdCBjYW4ganVzdCBjbG9zZS4KKyAgICAgICAgICAgIEhUTUxTdGFja0Vs
ZW0qIGN1cnJFbGVtID0gbWF4RWxlbS0+bmV4dDsKKyAgICAgICAgICAgIEhUTUxTdGFja0VsZW0q
IHByZXZFbGVtID0gbWF4RWxlbTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVt
KSB7CisgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBjdXJyRWxlbS0+
bmV4dDsKKyAgICAgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+
dGFnTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxl
bTsKKyAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPmRlcmVmTm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOworICAgICAgICAgICAg
ICAgICAgICBwcmV2RWxlbS0+ZGlkUmVmTm9kZSA9IGN1cnJFbGVtLT5kaWRSZWZOb2RlOworICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgY3VyckVsZW07CisgICAgICAgICAgICAgICAgICAgIG1f
dHJlZURlcHRoLS07CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHByZXZFbGVtID0gY3VyckVsZW07CisgICAgICAgICAgICAgICAgY3VyckVsZW0gPSBuZXh0RWxl
bTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZW9wZW4gcmVz
aWR1YWwgdGFncyBpbiBiZXR3ZWVuIG1heEVsZW0gYW5kIGVsZW0uICBBbiBleGFtcGxlIG9mIHRo
aXMgY2FzZSBpczoKKyAgICAgICAgICAgIC8vIDxmb250PjxpPk1vbzxwPkZvbzwvZm9udD4uCisg
ICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBwYXJ0
IGJlZm9yZSB0aGUgPHA+IGludG86CisgICAgICAgICAgICAvLyA8Zm9udD48aT5Nb288L2k+PC9m
b250PjxpPgorICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgPGk+IHdpbGwgcmVtYWluIG9wZW4u
ICBUaGlzIGludm9sdmVzIHRoZSBtb2RpZmljYXRpb24gb2YgZWxlbWVudHMKKyAgICAgICAgICAg
IC8vIGluIHRoZSBibG9jayBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHNvIGFm
ZmVjdCBob3cgd2UgdWx0aW1hdGVseSByZXBhcmVudCB0aGUgYmxvY2ssIHNpbmNlIHdlIHdhbnQg
aXQgdG8gZW5kIHVwCisgICAgICAgICAgICAvLyB1bmRlciB0aGUgcmVvcGVuZWQgcmVzaWR1YWwg
dGFncyAoZS5nLiwgdGhlIDxpPiBpbiB0aGUgYWJvdmUgZXhhbXBsZS4pCisgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gcHJldk5vZGUgPSAwOworICAgICAgICAgICAgY3VyckVsZW0gPSBtYXhFbGVt
OworICAgICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFsRWxlbSkgewor
ICAgICAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmxv
Y2FsTmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0
aGlzIGVsZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgcmVsZWFzZVJlZiB0
byBnZXQgYSByYXcgcG9pbnRlciBzaW5jZSB3ZSBwbGFuIHRvIGhhbmQgb3ZlciBvd25lcnNoaXAg
dG8gY3VyckVsZW0uCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGN1cnJOb2RlID0gY3VyckVs
ZW0tPm5vZGUtPmNsb25lTm9kZShmYWxzZSkucmVsZWFzZVJlZigpOworICAgICAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZjdXJyTm9kZS0+bG9jYWxOYW1l
KCkpOworICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHN0YWNrIGVsZW1l
bnQncyBub2RlIHRvIHBvaW50IHRvIHRoZSBjbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhlIHN0YWNrIGVsZW1lbnQgYWRvcHRzIHRoZSByZWZlcmVuY2Ugd2Ugb2J0YWluZWQgYWJvdmUg
YnkgY2FsbGluZyByZWxlYXNlKCkuCisgICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5kZXJl
Zk5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPm5vZGUgPSBjdXJyTm9kZTsK
KyAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPmRpZFJlZk5vZGUgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgcHJldmlvdXMgbm9kZSBhcyBhIGNoaWxkIG9m
IHRoaXMgbmV3IG5vZGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlLT5hcHBlbmRDaGlsZChwcmV2Tm9kZSwgZWMpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIC8vIFRoZSBuZXcgcGFyZW50IGZvciB0aGUgYmxvY2sg
ZWxlbWVudCBpcyBnb2luZyB0byBiZSB0aGUgaW5uZXJtb3N0IGNsb25lLgorICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50RWxlbSA9IGN1cnJOb2RlOyAgLy8gRklYTUU6IFdlIHNoaWZ0ZWQg
cGFyZW50RWxlbSB0byBiZSBhIHJlc2lkdWFsIGlubGluZS4gIFdlIG5ldmVyIGNoZWNrZWQgdG8g
c2VlIGlmIGJsb2NrRWxlbSBjb3VsZCBiZSBsZWdhbGx5IHBsYWNlZCBpbnNpZGUgdGhlIGlubGlu
ZSB0aG91Z2guCisKKyAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBjdXJyTm9kZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5u
ZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBjaGFp
biBvZiBuZXcgcmVzaWR1YWwgc3R5bGUgZWxlbWVudHMgaWYgb25lIGV4aXN0cy4KKyAgICAgICAg
ICAgIGlmIChwcmV2Tm9kZSkKKyAgICAgICAgICAgICAgICBlbGVtLT5ub2RlLT5hcHBlbmRDaGls
ZChwcmV2Tm9kZSwgZWMpOyAgLy8gRklYTUU6IFRoaXMgYXBwZW5kIGNhbiByZXN1bHQgaW4gd2Vp
cmQgc3R1ZmYgaGFwcGVuaW5nLCBsaWtlIGFuIGlubGluZSBjaGFpbiBiZWluZyBwdXQgaW50byBh
IHRhYmxlIHNlY3Rpb24uCisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYmxv
Y2sgaXMgc3RpbGwgaW4gdGhlIHRyZWUuIElmIGl0IGlzbid0LCB0aGVuIHdlIGRvbid0CisgICAg
ICAgIC8vIHdhbnQgdG8gcmVtb3ZlIGl0IGZyb20gaXRzIHBhcmVudCAodGhhdCB3b3VsZCBjcmFz
aCkgb3IgaW5zZXJ0IGl0IGludG8KKyAgICAgICAgLy8gYSBuZXcgcGFyZW50IGxhdGVyLiBTZWUg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OAorICAgICAgICBib29s
IGlzQmxvY2tTdGlsbEluVHJlZSA9IGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpOworCisgICAgICAg
IC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNsb25lIG9mIHxyZXNpZHVhbEVsZW18IGFuZCBwbGFjZSBp
dCBqdXN0IGluc2lkZSB8YmxvY2tFbGVtfC4KKyAgICAgICAgLy8gQWxsIGNvbnRlbnQgb2YgfGJs
b2NrRWxlbXwgaXMgcmVwYXJlbnRlZCB0byBiZSB1bmRlciB0aGlzIGNsb25lLiAgV2UgdGhlbgor
ICAgICAgICAvLyByZXBhcmVudCB8YmxvY2tFbGVtfCB1c2luZyByZWFsIERPTSBjYWxscyBzbyB0
aGF0IGF0dGFjaG1lbnQvZGV0YWNobWVudCB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCB0
byBmaXggdXAgdGhlIHJlbmRlcmluZyB0cmVlLgorICAgICAgICAvLyBTbyBmb3IgdGhpcyBleGFt
cGxlOiA8Yj4uLi48cD5Gb288L2I+R29vPC9wPgorICAgICAgICAvLyBUaGUgZW5kIHJlc3VsdCB3
aWxsIGJlOiA8Yj4uLi48L2I+PHA+PGI+Rm9vPC9iPkdvbzwvcD4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gU3RlcCAxOiBSZW1vdmUgfGJsb2NrRWxlbXwgZnJvbSBpdHMgcGFyZW50LCBkb2luZyBh
IGJhdGNoIGRldGFjaCBvZiBhbGwgdGhlIGtpZHMuCisgICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJ
blRyZWUpCisgICAgICAgICAgICBibG9ja0VsZW0tPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQo
YmxvY2tFbGVtLCBlYyk7CisKKyAgICAgICAgTm9kZSogbmV3Tm9kZVB0ciA9IDA7CisgICAgICAg
IGlmIChibG9ja0VsZW0tPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgLy8gU3RlcCAyOiBD
bG9uZSB8cmVzaWR1YWxFbGVtfC4KKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0g
cmVzaWR1YWxFbGVtLT5jbG9uZU5vZGUoZmFsc2UpOyAvLyBTaGFsbG93IGNsb25lLiBXZSBkb24n
dCBwaWNrIHVwIHRoZSBzYW1lIGtpZHMuCisgICAgICAgICAgICBuZXdOb2RlUHRyID0gbmV3Tm9k
ZS5nZXQoKTsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5l
d05vZGUtPmxvY2FsTmFtZSgpKTsKKworICAgICAgICAgICAgLy8gU3RlcCAzOiBQbGFjZSB8Ymxv
Y2tFbGVtfCdzIGNoaWxkcmVuIHVuZGVyIHxuZXdOb2RlfC4gIFJlbW92ZSBhbGwgb2YgdGhlIGNo
aWxkcmVuIG9mIHxibG9ja0VsZW18CisgICAgICAgICAgICAvLyBiZWZvcmUgd2UndmUgcHV0IHxu
ZXdFbGVtfCBpbnRvIHRoZSBkb2N1bWVudC4gIFRoYXQgd2F5IHdlJ2xsIG9ubHkgZG8gb25lIGF0
dGFjaG1lbnQgb2YgYWxsCisgICAgICAgICAgICAvLyB0aGUgbmV3IGNvbnRlbnQgKGluc3RlYWQg
b2YgYSBidW5jaCBvZiBpbmRpdmlkdWFsIGF0dGFjaG1lbnRzKS4KKyAgICAgICAgICAgIE5vZGUq
IGN1cnJOb2RlID0gYmxvY2tFbGVtLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICB3aGlsZSAo
Y3Vyck5vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXh0Tm9kZSA9IGN1cnJOb2RlLT5u
ZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGN1cnJO
b2RlLCBlYyk7CisgICAgICAgICAgICAgICAgY3Vyck5vZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gU3RlcCA0OiBQbGFjZSB8bmV3Tm9kZXwgdW5kZXIgfGJs
b2NrRWxlbXwuICB8YmxvY2tFbGVtfCBpcyBzdGlsbCBvdXQgb2YgdGhlIGRvY3VtZW50LCBzbyBu
bworICAgICAgICAgICAgLy8gYXR0YWNobWVudCBjYW4gb2NjdXIgeWV0LgorICAgICAgICAgICAg
YmxvY2tFbGVtLT5hcHBlbmRDaGlsZChuZXdOb2RlLnJlbGVhc2UoKSwgZWMpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKworICAgICAgICAvLyBTdGVwIDU6
IFJlcGFyZW50IHxibG9ja0VsZW18LiAgTm93IHRoZSBmdWxsIGF0dGFjaG1lbnQgb2YgdGhlIGZp
eGVkIHVwIHRyZWUgdGFrZXMgcGxhY2UuCisgICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRyZWUp
CisgICAgICAgICAgICBwYXJlbnRFbGVtLT5hcHBlbmRDaGlsZChibG9ja0VsZW0sIGVjKTsKKwor
ICAgICAgICAvLyBTdGVwIDY6IFB1bGwgfGVsZW18IG91dCBvZiB0aGUgc3RhY2ssIHNpbmNlIGl0
IGlzIG5vIGxvbmdlciBlbmNsb3NpbmcgdXMuICBBbHNvIHVwZGF0ZQorICAgICAgICAvLyB0aGUg
bm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByZXZpb3VzIHN0YWNrIGVsZW1lbnQgc28gdGhhdCB3
aGVuIGl0IGdldHMgcG9wcGVkLAorICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2UgdGhlIHJlc2lk
dWFsIGVsZW1lbnQgdGhlIG5leHQgY3VycmVudCBub2RlLgorICAgICAgICBIVE1MU3RhY2tFbGVt
KiBjdXJyRWxlbSA9IG1heEVsZW07CisgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0g
MDsKKyAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKKyAgICAgICAgICAgIHByZXZF
bGVtID0gY3VyckVsZW07CisgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0Owor
ICAgICAgICB9CisgICAgICAgIHByZXZFbGVtLT5uZXh0ID0gZWxlbS0+bmV4dDsKKyAgICAgICAg
cHJldkVsZW0tPmRlcmVmTm9kZSgpOworICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGVsZW0tPm5v
ZGU7CisgICAgICAgIHByZXZFbGVtLT5kaWRSZWZOb2RlID0gZWxlbS0+ZGlkUmVmTm9kZTsKKyAg
ICAgICAgbV90cmVlRGVwdGgtLTsKKyAgICAgICAgaWYgKCFmaW5pc2hlZCkgeworICAgICAgICAg
ICAgLy8gUmVwdXJwb3NlIHxlbGVtfCB0byByZXByZXNlbnQgfG5ld05vZGV8IGFuZCBpbnNlcnQg
aXQgYXQgdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uCisgICAgICAgICAgICAvLyBpbiB0aGUgc3Rh
Y2suIFdlIGRvIG5vdCBkbyB0aGlzIGZvciB0aGUgaW5uZXJtb3N0IGJsb2NrLCBiZWNhdXNlIGlu
IHRoYXQgY2FzZSB0aGUgbmV3CisgICAgICAgICAgICAvLyBub2RlIGlzIGVmZmVjdGl2ZWx5IG5v
IGxvbmdlciBvcGVuLgorICAgICAgICAgICAgZWxlbS0+bmV4dCA9IG1heEVsZW07CisgICAgICAg
ICAgICBlbGVtLT5ub2RlID0gcHJldk1heEVsZW0tPm5vZGU7CisgICAgICAgICAgICBlbGVtLT5k
aWRSZWZOb2RlID0gcHJldk1heEVsZW0tPmRpZFJlZk5vZGU7CisgICAgICAgICAgICBlbGVtLT5z
dHJheVRhYmxlQ29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgcHJldk1heEVsZW0tPm5leHQg
PSBlbGVtOworICAgICAgICAgICAgQVNTRVJUKG5ld05vZGVQdHIpOworICAgICAgICAgICAgcHJl
dk1heEVsZW0tPm5vZGUgPSBuZXdOb2RlUHRyOworICAgICAgICAgICAgbmV3Tm9kZVB0ci0+cmVm
KCk7CisgICAgICAgICAgICBwcmV2TWF4RWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7CisgICAgICAg
ICAgICBtX3RyZWVEZXB0aCsrOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSBl
bGVtOworICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIG1ha2UgYSBjYXNlIGxpa2Ug
dGhpcyB3b3JrOgorICAgIC8vIDx0YWJsZT48Yj48aT48Zm9ybT48L2I+PC9mb3JtPjwvaT48L3Rh
YmxlPgorICAgIC8vIFRoZW4gdGhpcyBjaGVjayB3aWxsIGJlIHRvbyBzaW1wbGlzdGljLiAgUmln
aHQgbm93IHRoZSA8aT48Zm9ybT4gY2hhaW4gd2lsbCBlbmQgdXAgaW5zaWRlIHRoZSA8dGJvZHk+
LCB3aGljaCBpcyBwcmV0dHkgY3JhenkuCisgICAgaWYgKHN0cmF5VGFibGVDb250ZW50KQorICAg
ICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQtLTsKKworICAgIC8vIFN0ZXAgNzogUmVvcGVuIGlu
dGVybWVkaWF0ZSBpbmxpbmVzLCBlLmcuLCA8Yj48cD48aT5Gb288L2I+R29vPC9wPi4KKyAgICAv
LyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgR29vIHNob3VsZCBzdGF5IGl0YWxpYy4KKyAgICAvLyBX
ZSBjYXAgdGhlIG51bWJlciBvZiB0YWdzIHdlJ3JlIHdpbGxpbmcgdG8gcmVvcGVuIGJhc2VkIG9m
ZiBjUmVzaWR1YWxTdHlsZU1heERlcHRoLgorICAgIAorICAgIEhUTUxTdGFja0VsZW0qIGN1cnIg
PSBtX2Jsb2NrU3RhY2s7CisgICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0g
MDsKKyAgICB1bnNpZ25lZCBzdGFja0RlcHRoID0gMTsKKyAgICB1bnNpZ25lZCByZWR1bmRhbnRT
dHlsZUNvdW50ID0gMDsKKyAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG1heEVsZW0pIHsKKyAg
ICAgICAgLy8gV2Ugd2lsbCBhY3R1YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5n
CisgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBi
bG9jay4KKyAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1lKSAmJiBz
dGFja0RlcHRoKysgPCBjUmVzaWR1YWxTdHlsZU1heERlcHRoKSB7CisgICAgICAgICAgICAvLyBX
ZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJl
dXNpbmcgdGhlCisgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVu
dCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCisgICAgICAg
ICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBv
ZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KKyAgICAgICAgICAgIC8vIGZyb20gdGhl
IG91dGVybW9zdCB0byB0aGUgaW5uZXJtb3N0LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sgd2ls
bCBlbmQgdXAgcG9pbnRpbmcKKyAgICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFnIHdl
IG5lZWQgdG8gcmVvcGVuLgorICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgY3Vyci0+bm9kZSB0
byBiZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVk
IGluCisgICAgICAgICAgICAvLyBjdXJyLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlv
dSBzaG91bGQgcG9wIHRvIHdoZW4gdGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCisgICAgICAg
ICAgICAvLyB0aGUgc3RhY2suCisgICAgICAgICAgICBpZiAocmVzaWR1YWxTdHlsZVN0YWNrICYm
IGN1cnItPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYmIGN1cnItPm5v
ZGUtPmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0YWNrLT5ub2Rl
LT5hdHRyaWJ1dGVzKCkpKQorICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQrKzsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50ID0g
MDsKKworICAgICAgICAgICAgaWYgKHJlZHVuZGFudFN0eWxlQ291bnQgPCBjTWF4UmVkdW5kYW50
VGFnRGVwdGgpCisgICAgICAgICAgICAgICAgbW92ZU9uZUJsb2NrVG9TdGFjayhyZXNpZHVhbFN0
eWxlU3RhY2spOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcE9uZUJsb2Nr
KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKworICAgICAg
ICBjdXJyID0gbV9ibG9ja1N0YWNrOworICAgIH0KKworICAgIHJlb3BlblJlc2lkdWFsU3R5bGVU
YWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgMCk7IC8vIFN0cmF5IHRhYmxlIGNvbnRlbnQgY2FuJ3Qg
YmUgYW4gaXNzdWUgaGVyZSwgc2luY2Ugc29tZSBlbGVtZW50IGFib3ZlIHdpbGwgYWx3YXlzIGJl
Y29tZSB0aGUgcm9vdCBvZiBuZXcgc3RyYXkgdGFibGUgY29udGVudC4KKworICAgIG1faGFuZGxp
bmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzID0gZmFsc2U7Cit9CisKK3ZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSog
ZWxlbSwgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQpCit7CisgICAgLy8gTG9vcCBmb3IgZWFj
aCB0YWcgdGhhdCBuZWVkcyB0byBiZSByZW9wZW5lZC4KKyAgICB3aGlsZSAoZWxlbSkgeworICAg
ICAgICAvLyBDcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoZSBET00gbm9kZSBmb3IgdGhpcyBl
bGVtZW50LgorICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IGVsZW0tPm5vZGUtPmNsb25l
Tm9kZShmYWxzZSk7IAorICAgICAgICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZu
ZXdOb2RlLT5sb2NhbE5hbWUoKSk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgbm9kZS4g
SW4gdGhlIG1hbGZvcm1lZCB0YWJsZSBjYXNlLCB3ZSBuZWVkIHRvIGluc2VydCBiZWZvcmUgdGhl
IHRhYmxlLAorICAgICAgICAvLyB3aGljaCB3aWxsIGJlIHRoZSBsYXN0IGNoaWxkLgorICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgaWYgKG1hbGZvcm1lZFRhYmxlUGFyZW50
KQorICAgICAgICAgICAgbWFsZm9ybWVkVGFibGVQYXJlbnQtPmluc2VydEJlZm9yZShuZXdOb2Rl
LCBtYWxmb3JtZWRUYWJsZVBhcmVudC0+bGFzdENoaWxkKCksIGVjKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jdXJyZW50LT5hcHBlbmRDaGlsZChuZXdOb2RlLCBlYyk7CisgICAgICAg
IC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNlcHRpb25zIGhlcmU/
CisKKyAgICAgICAgLy8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBmb3IgdGhpcyBub2Rl
IHdlIGp1c3QgY3JlYXRlZC4KKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0t
PmxldmVsKTsKKyAgICAgICAgbmV3Tm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKworICAg
ICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0
aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cworICAgICAgICAvLyB0aGF0IGl0IGlzIGlu
c2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KKyAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJheVRhYmxl
Q29udGVudCA9IG1hbGZvcm1lZFRhYmxlUGFyZW50ICE9IDA7CisgICAgICAgIGlmIChtX2Jsb2Nr
U3RhY2stPnN0cmF5VGFibGVDb250ZW50KQorICAgICAgICAgICAgbV9pblN0cmF5VGFibGVDb250
ZW50Kys7CisKKyAgICAgICAgLy8gQ2xlYXIgb3VyIG1hbGZvcm1lZCB0YWJsZSBwYXJlbnQgdmFy
aWFibGUuCisgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKKworICAgICAgICAvLyBV
cGRhdGUgfGN1cnJlbnR8IG1hbnVhbGx5IHRvIHBvaW50IHRvIHRoZSBuZXcgbm9kZS4KKyAgICAg
ICAgc2V0Q3VycmVudChuZXdOb2RlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkdmFu
Y2UgdG8gdGhlIG5leHQgdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCisgICAgICAgIEhU
TUxTdGFja0VsZW0qIG5leHQgPSBlbGVtLT5uZXh0OworICAgICAgICBlbGVtLT5kZXJlZk5vZGUo
KTsKKyAgICAgICAgZGVsZXRlIGVsZW07CisgICAgICAgIGVsZW0gPSBuZXh0OworICAgIH0KK30K
Kwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwdXNoQmxvY2soY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lLCBpbnQgbGV2ZWwpCit7CisgICAgbV9ibG9ja1N0YWNrID0gbmV3IEhU
TUxTdGFja0VsZW0odGFnTmFtZSwgbGV2ZWwsIG1fY3VycmVudCwgbV9kaWRSZWZDdXJyZW50LCBt
X2Jsb2NrU3RhY2spOworICAgIGlmIChsZXZlbCA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkp
CisgICAgICAgIG1fYmxvY2tzSW5TdGFjaysrOworICAgIG1fdHJlZURlcHRoKys7CisgICAgbV9k
aWRSZWZDdXJyZW50ID0gZmFsc2U7CisgICAgaWYgKHRhZ05hbWUgPT0gcFRhZykKKyAgICAgICAg
bV9oYXNQRWxlbWVudEluU2NvcGUgPSBJblNjb3BlOworICAgIGVsc2UgaWYgKGlzU2NvcGluZ1Rh
Zyh0YWdOYW1lKSkKKyAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwor
fQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrKGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMpCit7CisgICAgSFRNTFN0YWNrRWxl
bSogZWxlbSA9IG1fYmxvY2tTdGFjazsKKworICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiBlbGVt
ICYmICFtX3BhcnNlclF1aXJrcy0+c2hvdWxkUG9wQmxvY2soZWxlbS0+dGFnTmFtZSwgdGFnTmFt
ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBtYXhMZXZlbCA9IDA7CisKKyAgICB3aGls
ZSAoZWxlbSAmJiAoZWxlbS0+dGFnTmFtZSAhPSB0YWdOYW1lKSkgeworICAgICAgICBpZiAobWF4
TGV2ZWwgPCBlbGVtLT5sZXZlbCkKKyAgICAgICAgICAgIG1heExldmVsID0gZWxlbS0+bGV2ZWw7
CisgICAgICAgIGVsZW0gPSBlbGVtLT5uZXh0OworICAgIH0KKworICAgIGlmICghZWxlbSkgewor
ICAgICAgICBpZiAocmVwb3J0RXJyb3JzKQorICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlD
bG9zZVRhZ0Vycm9yLCAmdGFnTmFtZSwgMCwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobWF4TGV2ZWwgPiBlbGVtLT5sZXZlbCkgeworICAgICAgICAvLyBXZSBkaWRu
J3QgbWF0Y2ggYmVjYXVzZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAor
ICAgICAgICAvLyA8Yj48cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCisg
ICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKHRhZ05hbWUpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxv
Y2tzKGVsZW0pOworICAgIH0KKworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKGVsZW0tPnRhZ05hbWUpOworICAgIEhUTUxTdGFja0VsZW0qIHJl
c2lkdWFsU3R5bGVTdGFjayA9IDA7CisgICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAw
OworICAgIAorICAgIGVsZW0gPSBtX2Jsb2NrU3RhY2s7CisgICAgdW5zaWduZWQgc3RhY2tEZXB0
aCA9IDE7CisgICAgdW5zaWduZWQgcmVkdW5kYW50U3R5bGVDb3VudCA9IDA7CisgICAgd2hpbGUg
KGVsZW0pIHsKKyAgICAgICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gdGFnTmFtZSkgeworICAgICAg
ICAgICAgaW50IHN0cmF5VGFibGUgPSBtX2luU3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgICAgICAg
ICBwb3BPbmVCbG9jaygpOworICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgIC8v
IFRoaXMgZWxlbWVudCB3YXMgdGhlIHJvb3Qgb2Ygc29tZSBtYWxmb3JtZWQgY29udGVudCBqdXN0
IGluc2lkZSBhbiBpbXBsaWNpdCBvcgorICAgICAgICAgICAgLy8gZXhwbGljaXQgPHRib2R5PiBv
ciA8dHI+LgorICAgICAgICAgICAgLy8gSWYgd2UgZW5kIHVwIG5lZWRpbmcgdG8gcmVvcGVuIHJl
c2lkdWFsIHN0eWxlIHRhZ3MsIHRoZSByb290IG9mIHRoZSByZW9wZW5lZCBjaGFpbgorICAgICAg
ICAgICAgLy8gbXVzdCBhbHNvIGtub3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQg
Y29udGVudCBpbnNpZGUgYSA8dGJvZHk+Lzx0cj4uCisgICAgICAgICAgICBpZiAoc3RyYXlUYWJs
ZSAmJiAobV9pblN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHls
ZVN0YWNrKSB7CisgICAgICAgICAgICAgICAgTm9kZSogY3VyciA9IG1fY3VycmVudDsKKyAgICAg
ICAgICAgICAgICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisg
ICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAg
ICAgICAgbWFsZm9ybWVkVGFibGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDog
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRGb3JtRWxlbWVudCAmJiBlbGVtLT50YWdOYW1lID09IGZvcm1UYWcpCisg
ICAgICAgICAgICAgICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChh
bmQgdGhpcyBpcworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBh
dHRyaWJ1dGUgb24gdGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0cworICAgICAgICAgICAgICAgIC8v
IGJvdHRvbSBtYXJnaW4uCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQtPnNl
dE1hbGZvcm1lZCh0cnVlKTsKKworICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9y
IHJlb3BlbmluZworICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9m
IHRoaXMgZW50aXJlIGJsb2NrLgorICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYm
IGlzUmVzaWR1YWxTdHlsZVRhZyhlbGVtLT50YWdOYW1lKSAmJiBzdGFja0RlcHRoKysgPCBjUmVz
aWR1YWxTdHlsZU1heERlcHRoKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRl
ZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQorICAg
ICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcg
dG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKKyAgICAgICAgICAgICAgICAv
LyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwg
dGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBv
dXRlcm1vc3QgdG8gdGhlIGlubmVybW9zdCwgaS5lLiwgcmVzaWR1YWxTdHlsZVN0YWNrIHdpbGwg
ZW5kIHVwIHBvaW50aW5nCisgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcg
d2UgbmVlZCB0byByZW9wZW4uCisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgZWxlbS0+
bm9kZSB0byBiZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQg
c3RvcmVkIGluCisgICAgICAgICAgICAgICAgLy8gZWxlbS0+aWQgcmF0aGVyIHRoYW4gdGhlIG5v
ZGUgdGhhdCB5b3Ugc2hvdWxkIHBvcCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9m
ZgorICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICBpZiAocmVz
aWR1YWxTdHlsZVN0YWNrICYmIGVsZW0tPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50
YWdOYW1lICYmIGVsZW0tPm5vZGUtPmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1
YWxTdHlsZVN0YWNrLT5ub2RlLT5hdHRyaWJ1dGVzKCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZWR1bmRhbnRTdHlsZUNvdW50Kys7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChy
ZWR1bmRhbnRTdHlsZUNvdW50IDwgY01heFJlZHVuZGFudFRhZ0RlcHRoKQorICAgICAgICAgICAg
ICAgICAgICBtb3ZlT25lQmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOworICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKyAgICAgICAgICAg
IGVsZW0gPSBtX2Jsb2NrU3RhY2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW9wZW5SZXNp
ZHVhbFN0eWxlVGFncyhyZXNpZHVhbFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsK
K30KKworaW5saW5lIEhUTUxTdGFja0VsZW0qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBv
cE9uZUJsb2NrQ29tbW9uKCkKK3sKKyAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0
YWNrOworCisgICAgLy8gRm9ybSBlbGVtZW50cyByZXN0b3JlIHRoZWlyIHN0YXRlIGR1cmluZyB0
aGUgcGFyc2luZyBwcm9jZXNzLgorICAgIC8vIEFsc28sIGEgZmV3IGVsZW1lbnRzICg8YXBwbGV0
PiwgPG9iamVjdD4pIG5lZWQgdG8ga25vdyB3aGVuIGFsbCBjaGlsZCBlbGVtZW50cyAoPHBhcmFt
PnMpIGFyZSBhdmFpbGFibGUuCisgICAgaWYgKG1fY3VycmVudCAmJiBlbGVtLT5ub2RlICE9IG1f
Y3VycmVudCkKKyAgICAgICAgbV9jdXJyZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKwor
ICAgIGlmIChtX2Jsb2NrU3RhY2stPmxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkg
eworICAgICAgICBBU1NFUlQobV9ibG9ja3NJblN0YWNrID4gMCk7CisgICAgICAgIG1fYmxvY2tz
SW5TdGFjay0tOworICAgIH0KKyAgICBtX3RyZWVEZXB0aC0tOworICAgIG1fYmxvY2tTdGFjayA9
IGVsZW0tPm5leHQ7CisgICAgbV9jdXJyZW50ID0gZWxlbS0+bm9kZTsKKyAgICBtX2RpZFJlZkN1
cnJlbnQgPSBlbGVtLT5kaWRSZWZOb2RlOworCisgICAgaWYgKGVsZW0tPnN0cmF5VGFibGVDb250
ZW50KQorICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQtLTsKKworICAgIGlmIChlbGVtLT50
YWdOYW1lID09IHBUYWcpCisgICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29w
ZTsKKyAgICBlbHNlIGlmIChpc1Njb3BpbmdUYWcoZWxlbS0+dGFnTmFtZSkpCisgICAgICAgIG1f
aGFzUEVsZW1lbnRJblNjb3BlID0gVW5rbm93bjsKKworICAgIHJldHVybiBlbGVtOworfQorCit2
b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcE9uZUJsb2NrKCkKK3sKKyAgICAvLyBT
dG9yZSB0aGUgY3VycmVudCBub2RlIGJlZm9yZSBwb3BPbmVCbG9ja0NvbW1vbiBvdmVyd3JpdGVz
IGl0LgorICAgIE5vZGUqIGxhc3RDdXJyZW50ID0gbV9jdXJyZW50OworICAgIGJvb2wgZGlkUmVm
TGFzdEN1cnJlbnQgPSBtX2RpZFJlZkN1cnJlbnQ7CisKKyAgICBkZWxldGUgcG9wT25lQmxvY2tD
b21tb24oKTsKKworICAgIGlmIChkaWRSZWZMYXN0Q3VycmVudCkKKyAgICAgICAgbGFzdEN1cnJl
bnQtPmRlcmVmKCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9u
ZUJsb2NrVG9TdGFjayhIVE1MU3RhY2tFbGVtKiYgaGVhZCkKK3sKKyAgICAvLyBXZSdsbCBiZSB1
c2luZyB0aGUgc3RhY2sgZWxlbWVudCB3ZSdyZSBwb3BwaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50
IG5vZGUuCisgICAgLy8gU2VlIHRoZSB0d28gY2FsbGVycyBmb3IgZGV0YWlscy4KKworICAgIC8v
IFN0b3JlIHRoZSBjdXJyZW50IG5vZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0
ZXMgaXQuCisgICAgTm9kZSogbGFzdEN1cnJlbnQgPSBtX2N1cnJlbnQ7CisgICAgYm9vbCBkaWRS
ZWZMYXN0Q3VycmVudCA9IG1fZGlkUmVmQ3VycmVudDsKKworICAgIC8vIFBvcCB0aGUgYmxvY2ss
IGJ1dCBkb24ndCBkZXJlZiB0aGUgY3VycmVudCBub2RlIGFzIHBvcE9uZUJsb2NrIGRvZXMgYmVj
YXVzZQorICAgIC8vIHdlJ2xsIGJlIHVzaW5nIHRoZSBwb2ludGVyIGluIHRoZSBuZXcgc3RhY2sg
ZWxlbWVudC4KKyAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gcG9wT25lQmxvY2tDb21tb24oKTsK
KworICAgIC8vIFRyYW5zZmVyIHRoZSBjdXJyZW50IG5vZGUgaW50byB0aGUgc3RhY2sgZWxlbWVu
dC4KKyAgICAvLyBObyBuZWVkIHRvIGRlcmVmIHRoZSBvbGQgZWxlbS0+bm9kZSBiZWNhdXNlIHBv
cE9uZUJsb2NrQ29tbW9uIHRyYW5zZmVycmVkCisgICAgLy8gaXQgaW50byB0aGUgbV9jdXJyZW50
L21fZGlkUmVmQ3VycmVudCBmaWVsZHMuCisgICAgZWxlbS0+bm9kZSA9IGxhc3RDdXJyZW50Owor
ICAgIGVsZW0tPmRpZFJlZk5vZGUgPSBkaWRSZWZMYXN0Q3VycmVudDsKKyAgICBlbGVtLT5uZXh0
ID0gaGVhZDsKKyAgICBoZWFkID0gZWxlbTsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCkKK3sKKyAgICBtX2hhc1BFbGVtZW50
SW5TY29wZSA9IE5vdEluU2NvcGU7CisgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tT
dGFjazsKKyAgICB3aGlsZSAoZWxlbSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUgPSBlbGVtLT50YWdOYW1lOworICAgICAgICBpZiAodGFnTmFtZSA9PSBwVGFnKSB7Cisg
ICAgICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IEluU2NvcGU7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBlbGVtID0gZWxlbS0+bmV4dDsKKyAgICB9Cit9CisKK3Zv
aWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cG9wSW5saW5lQmxvY2tzKCkKK3sKKyAgICB3
aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzSW5saW5lKG1fY3VycmVudCkpCisgICAgICAgIHBvcE9u
ZUJsb2NrKCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJlZUJsb2Nr
KCkKK3sKKyAgICB3aGlsZSAobV9ibG9ja1N0YWNrKQorICAgICAgICBwb3BPbmVCbG9jaygpOwor
ICAgIEFTU0VSVCghbV9ibG9ja3NJblN0YWNrKTsKKyAgICBBU1NFUlQoIW1fdHJlZURlcHRoKTsK
K30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjcmVhdGVIZWFkKCkKK3sKKyAg
ICBpZiAobV9oZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CisgICAgICAgIGluc2Vy
dE5vZGUoSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAg
ICBBU1NFUlQobV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgfHwgbV9pc1BhcnNpbmdGcmFn
bWVudCk7CisgICAgfQorCisgICAgbV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9k
b2N1bWVudCk7CisKKyAgICBpZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCk7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPmlu
c2VydEJlZm9yZShtX2hlYWQuZ2V0KCksIGJvZHksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAg
IG1faGVhZCA9IDA7CisgICAgICAgIAorICAgIC8vIElmIHRoZSBib2R5IGRvZXMgbm90IGV4aXN0
IHlldCwgdGhlbiB0aGUgPGhlYWQ+IHNob3VsZCBiZSBwdXNoZWQgYXMgdGhlIGN1cnJlbnQgYmxv
Y2suCisgICAgaWYgKG1faGVhZCAmJiAhYm9keSkgeworICAgICAgICBwdXNoQmxvY2sobV9oZWFk
LT5sb2NhbE5hbWUoKSwgbV9oZWFkLT50YWdQcmlvcml0eSgpKTsKKyAgICAgICAgc2V0Q3VycmVu
dChtX2hlYWQuZ2V0KCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0KQoreworICAgIFJlZlB0cjxO
b2RlPiBuID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKworICAgIE5hbWVk
Tm9kZU1hcCogYXR0cnMgPSB0LT5hdHRycy5nZXQoKTsKKworICAgIFJlZlB0cjxIVE1MSXNJbmRl
eEVsZW1lbnQ+IGlzSW5kZXggPSBIVE1MSXNJbmRleEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50
LCBtX2N1cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7CisgICAgaXNJbmRleC0+c2V0QXR0cmlidXRl
TWFwKGF0dHJzKTsKKyAgICBpc0luZGV4LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsICJraHRtbF9p
c2luZGV4Iik7CisKKyAgICBTdHJpbmcgdGV4dCA9IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlv
bigpOworICAgIGlmIChhdHRycykgeworICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gYXR0cnMt
PmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cikpCisgICAgICAgICAgICB0ZXh0ID0gYS0+dmFs
dWUoKS5zdHJpbmcoKSArICIgIjsKKyAgICAgICAgdC0+YXR0cnMgPSAwOworICAgIH0KKworICAg
IG4tPmFkZENoaWxkKEhUTUxIUkVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KSk7CisgICAgbi0+
YWRkQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRleHQpKTsKKyAgICBuLT5hZGRDaGls
ZChpc0luZGV4LnJlbGVhc2UoKSk7CisgICAgbi0+YWRkQ2hpbGQoSFRNTEhSRWxlbWVudDo6Y3Jl
YXRlKG1fZG9jdW1lbnQpKTsKKworICAgIHJldHVybiBuLnJlbGVhc2UoKTsKK30KKwordm9pZCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpzdGFydEJvZHkoKQoreworICAgIGlmIChtX2luQm9k
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbkJvZHkgPSB0cnVlOworCisgICAgaWYgKG1f
aXNpbmRleEVsZW1lbnQpIHsKKyAgICAgICAgaW5zZXJ0Tm9kZShtX2lzaW5kZXhFbGVtZW50Lmdl
dCgpLCB0cnVlIC8qIGRvbid0IGRlc2NlbmQgaW50byB0aGlzIG5vZGUgKi8pOworICAgICAgICBt
X2lzaW5kZXhFbGVtZW50ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6ZmluaXNoZWQoKQoreworICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgY29tcGxldGVs
eSBlbXB0eSBkb2N1bWVudCwgaGVyZSdzIHRoZSBwbGFjZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxl
bWVudC4KKyAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAm
JiAhbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIGluc2VydE5vZGUoSFRN
TEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworCisgICAgLy8gVGhpcyBl
bnN1cmVzIHRoYXQgImN1cnJlbnQiIGlzIG5vdCBsZWZ0IHBvaW50aW5nIHRvIGEgbm9kZSB3aGVu
IHRoZSBkb2N1bWVudCBpcyBkZXN0cm95ZWQuCisgICAgZnJlZUJsb2NrKCk7CisgICAgc2V0Q3Vy
cmVudCgwKTsKKworICAgIC8vIFdhcm5pbmcsIHRoaXMgbWF5IGRlbGV0ZSB0aGUgcGFyc2VyLCBz
byBkb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgorICAgIGlmICghbV9p
c1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5nKCk7
Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXJyb3JUb0NvbnNv
bGUoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFn
TmFtZTEsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQoreyAg
ICAKKyAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIq
IGh0bWxUb2tlbml6ZXIgPSBzdGF0aWNfY2FzdDxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqPiht
X2RvY3VtZW50LT5wYXJzZXIoKSk7CisgICAgaW50IGxpbmVOdW1iZXIgPSBodG1sVG9rZW5pemVy
LT5saW5lTnVtYmVyKCkgKyAxOworCisgICAgQXRvbWljU3RyaW5nIHRhZzE7CisgICAgQXRvbWlj
U3RyaW5nIHRhZzI7CisgICAgaWYgKHRhZ05hbWUxKSB7CisgICAgICAgIGlmICgqdGFnTmFtZTEg
PT0gIiN0ZXh0IikKKyAgICAgICAgICAgIHRhZzEgPSAiVGV4dCI7CisgICAgICAgIGVsc2UgaWYg
KCp0YWdOYW1lMSA9PSAiI2NvbW1lbnQiKQorICAgICAgICAgICAgdGFnMSA9ICI8IS0tIGNvbW1l
bnQgLS0+IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFnMSA9IChjbG9zZVRhZ3MgPyAi
PC8iIDogIjwiKSArICp0YWdOYW1lMSArICI+IjsKKyAgICB9CisgICAgaWYgKHRhZ05hbWUyKSB7
CisgICAgICAgIGlmICgqdGFnTmFtZTIgPT0gIiN0ZXh0IikKKyAgICAgICAgICAgIHRhZzIgPSAi
VGV4dCI7CisgICAgICAgIGVsc2UgaWYgKCp0YWdOYW1lMiA9PSAiI2NvbW1lbnQiKQorICAgICAg
ICAgICAgdGFnMiA9ICI8IS0tIGNvbW1lbnQgLS0+IjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdGFnMiA9IChjbG9zZVRhZ3MgPyAiPC8iIDogIjwiKSArICp0YWdOYW1lMiArICI+IjsKKyAg
ICB9CisgICAgICAgIAorICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnID0gaHRtbFBhcnNlckVycm9y
TWVzc2FnZVRlbXBsYXRlKGVycm9yQ29kZSk7CisgICAgaWYgKCFlcnJvck1zZykKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAoaHRtbFRva2Vu
aXplci0+cHJvY2Vzc2luZ0NvbnRlbnRXcml0dGVuQnlTY3JpcHQoKSkKKyAgICAgICAgbWVzc2Fn
ZSArPSBodG1sUGFyc2VyRG9jdW1lbnRXcml0ZU1lc3NhZ2UoKTsKKyAgICBtZXNzYWdlICs9IGVy
cm9yTXNnOworICAgIG1lc3NhZ2UucmVwbGFjZSgiJXRhZzEiLCB0YWcxKTsKKyAgICBtZXNzYWdl
LnJlcGxhY2UoIiV0YWcyIiwgdGFnMik7CisKKyAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNv
bGUoKS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIAorICAg
ICAgICBpc1dhcm5pbmcoZXJyb3JDb2RlKSA/IFdhcm5pbmdNZXNzYWdlTGV2ZWwgOiBFcnJvck1l
c3NhZ2VMZXZlbCwKKyAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgbV9kb2N1bWVudC0+dXJs
KCkuc3RyaW5nKCkpOworfQorCisjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAorYm9vbCBzaG91
bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChk
b2N1bWVudCk7CisgICAgCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2Uo
KSA/IGRvY3VtZW50LT5wYWdlKCktPnNldHRpbmdzKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5n
cyA/ICFzZXR0aW5ncy0+bmVlZHNMZW9wYXJkTWFpbFF1aXJrcygpIDogdHJ1ZTsKK30KKyNlbGlm
IGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpCitib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVh
ZChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICAKKyAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2Uo
KS0+c2V0dGluZ3MoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVk
c1RpZ2VyTWFpbFF1aXJrcygpIDogdHJ1ZTsKK30KKyNlbmRpZgorCisKK1N0cmluZyBzZXJpYWxp
emVGb3JOdW1iZXJUeXBlKGRvdWJsZSBudW1iZXIpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIEhU
TUw1LCAidGhlIGJlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBuIGFzIGEgZmxvYXRp
bmcKKyAgICAvLyBwb2ludCBudW1iZXIiIGlzIGEgc3RyaW5nIHByb2R1Y2VkIGJ5IGFwcGx5aW5n
IFRvU3RyaW5nKCkgdG8gbi4KKyAgICBEdG9hQnVmZmVyIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBs
ZW5ndGg7CisgICAgZG91YmxlVG9TdHJpbmdJbkphdmFTY3JpcHRGb3JtYXQobnVtYmVyLCBidWZm
ZXIsICZsZW5ndGgpOworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOworfQorCiti
b29sIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUq
IG91dCkKK3sKKyAgICAvLyBTZWUgSFRNTDUgMi40LjQuMyBgUmVhbCBudW1iZXJzLicKKworICAg
IGlmIChzcmMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3RyaW5n
Ojp0b0RvdWJsZSgpIGFjY2VwdHMgbGVhZGluZyArIFx0IFxuIFx2IFxmIFxyIGFuZCBTUEFDRSwg
d2hpY2ggYXJlIGludmFsaWQgaW4gSFRNTDUuCisgICAgLy8gU28sIGNoZWNrIHRoZSBmaXJzdCBj
aGFyYWN0ZXIuCisgICAgaWYgKHNyY1swXSAhPSAnLScgJiYgKHNyY1swXSA8ICcwJyB8fCBzcmNb
MF0gPiAnOScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHZhbGlkID0gZmFs
c2U7CisgICAgZG91YmxlIHZhbHVlID0gc3JjLnRvRG91YmxlKCZ2YWxpZCk7CisgICAgaWYgKCF2
YWxpZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIE5hTiBhbmQgSW5maW5pdHkgYXJl
IG5vdCB2YWxpZCBudW1iZXJzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCisgICAgaWYgKCFp
c2Zpbml0ZSh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyAtMCAtPiAwCisg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgdmFsdWUgPSAwOworICAgIGlmIChvdXQpCisgICAgICAg
ICpvdXQgPSB2YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9o
dG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9o
dG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIz
LDcgQEAKICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAKICNp
bmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
QEAgLTE0MCw3ICsxNDAsNyBAQCBzdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5vbmNvcHlhYmxlIHsK
ICAqCiAgKi8KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3RvcihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRFcnJvcnMpCitMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnQqIGRvYywgYm9v
bCByZXBvcnRFcnJvcnMpCiAgICAgOiBtX2RvY3VtZW50KGRvYykKICAgICAsIG1fY3VycmVudChk
b2MpCiAgICAgLCBtX2RpZFJlZkN1cnJlbnQoZmFsc2UpCkBAIC0xNjAsNyArMTYwLDcgQEAgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZQogewogfQogCi1MZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKERvY3VtZW50RnJhZ21l
bnQqIGZyYWcsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQorTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoRG9jdW1lbnRG
cmFnbWVudCogZnJhZywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCiAgICAgOiBtX2RvY3VtZW50KGZyYWctPmRvY3VtZW50KCkpCiAgICAgLCBtX2N1cnJl
bnQoZnJhZykKICAgICAsIG1fZGlkUmVmQ3VycmVudCh0cnVlKQpAQCAtMTgyLDE0ICsxODIsMTQg
QEAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZQogICAgICAgICBmcmFn
LT5yZWYoKTsKIH0KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6fkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IoKQorTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp+TGVnYWN5SFRNTFRyZWVCdWls
ZGVyKCkKIHsKICAgICBmcmVlQmxvY2soKTsKICAgICBpZiAobV9kaWRSZWZDdXJyZW50KQogICAg
ICAgICBtX2N1cnJlbnQtPmRlcmVmKCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6cmVzZXQoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlc2V0KCkKIHsKICAg
ICBBU1NFUlQoIW1faXNQYXJzaW5nRnJhZ21lbnQpOwogCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXNldCgpCiAgICAgICAgIG1fcGFyc2VyUXVp
cmtzLT5yZXNldCgpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNldEN1
cnJlbnQoTm9kZSogbmV3Q3VycmVudCkgCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6c2V0
Q3VycmVudChOb2RlKiBuZXdDdXJyZW50KSAKIHsKICAgICBib29sIGRpZFJlZk5ld0N1cnJlbnQg
PSBuZXdDdXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gbV9kb2N1bWVudDsKICAgICBpZiAoZGlkUmVm
TmV3Q3VycmVudCkgCkBAIC0yMzAsNyArMjMwLDcgQEAgaW5saW5lIHN0YXRpYyBpbnQgdGFnUHJp
b3JpdHlPZk5vZGUoTm9kZQogICAgIHJldHVybiBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKIH0KIAotaW5saW5lIHZv
aWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bGltaXREZXB0aChpbnQgdGFnUHJpb3JpdHkp
CitpbmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmxpbWl0RGVwdGgoaW50IHRhZ1By
aW9yaXR5KQogewogICAgIHdoaWxlIChtX3RyZWVEZXB0aCA+PSBtYXhET01UcmVlRGVwdGgpCiAg
ICAgICAgIHBvcEJsb2NrKG1fYmxvY2tTdGFjay0+dGFnTmFtZSk7CkBAIC0yNDAsMTMgKzI0MCwx
MyBAQCBpbmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpsCiAgICAgfQogfQog
Ci1pbmxpbmUgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppbnNlcnROb2RlQWZ0ZXJM
aW1pdERlcHRoKE5vZGUqIG4sIGJvb2wgZmxhdCkKK2lubGluZSBib29sIExlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6aW5zZXJ0Tm9kZUFmdGVyTGltaXREZXB0aChOb2RlKiBuLCBib29sIGZsYXQpCiB7
CiAgICAgbGltaXREZXB0aCh0YWdQcmlvcml0eU9mTm9kZShuKSk7CiAgICAgcmV0dXJuIGluc2Vy
dE5vZGUobiwgZmxhdCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6cGFyc2VUb2tlbihUb2tlbiogdCkKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjpwYXJzZVRva2VuKFRva2VuKiB0KQogewogICAgIGlmICghbV9za2lwTW9k
ZVRhZy5pc051bGwoKSkgewogICAgICAgICBpZiAoIXQtPmJlZ2luVGFnICYmIHQtPnRhZ05hbWUg
PT0gbV9za2lwTW9kZVRhZykKQEAgLTMzNyw3ICszMzcsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0CiAgICAgcmV0dXJuIG47CiB9CiAKLXZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cGFyc2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKiB0KQordm9p
ZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiog
dCkKIHsKICAgICAvLyBJZ25vcmUgYW55IGRvY3R5cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3Jl
IGRvY3R5cGVzIGluIGZyYWdtZW50cy4KICAgICBpZiAobV9kb2N1bWVudC0+ZG9jdHlwZSgpIHx8
IG1faXNQYXJzaW5nRnJhZ21lbnQgfHwgbV9jdXJyZW50ICE9IG1fZG9jdW1lbnQpCkBAIC0zNzIs
NyArMzcyLDcgQEAgc3RhdGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21pY1N0cgogICAg
ICAgICB8fCB0YWdOYW1lID09IG9iamVjdFRhZyB8fCB0YWdOYW1lID09IHRhYmxlVGFnIHx8IHRh
Z05hbWUgPT0gaHRtbFRhZzsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpp
bnNlcnROb2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVy
OjppbnNlcnROb2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gcHJv
dGVjdE5vZGUobik7CiAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6Omluc2VydE5vCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQorYm9vbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSkKIHsKICAgICAvLyBFcnJvciBoYW5k
bGluZyBjb2RlLiAgVGhpcyBpcyBqdXN0IGFkIGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJl
bnQvY2hpbGQgY29tYmluYXRpb25zLgogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwpAQCAtNzI0
LDIyICs3MjQsMjIgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVFcgog
ICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogfQogCi10eXBlZGVmIGJvb2wgKExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIFJlZlB0cjxO
b2RlPiYpOwordHlwZWRlZiBib29sIChMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OipDcmVhdGVFcnJv
ckNoZWNrRnVuYykoVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpOwogdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBDcmVhdGVFcnJvckNoZWNrRnVuYz4gRnVuY3Rpb25NYXA7CiAKLWJv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
IHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRl
eHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAg
ICByZXN1bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNvbW1l
bnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
UmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gQ29tbWVudDo6Y3JlYXRlKG1f
ZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhlYWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgaWYgKCFt
X2hlYWQgfHwgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIG1f
aGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwpAQCAtNzQ5LDcgKzc0
OSw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWEKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Ym9keUNyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAg
ICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAogICAgIGlm
IChtX2hhdmVGcmFtZVNldCkKQEAgLTc2NSw3ICs3NjUsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmJvZHlDcmVhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVm
UHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmcmFtZXNldENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKGhlYWRUYWcp
OwogICAgIGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJhbWVTZXQgJiYgIW1faGF2ZUNvbnRlbnQp
IHsKQEAgLTc4NSw3ICs3ODUsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZy
YW1lc2V0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0
KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBm
b3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCiAgICAgLy8gVGhpcyBpcyBjb25z
aXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgpAQCAtNzk3LDcgKzc5Nyw3IEBA
IGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Zm9ybUNyZWEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7CiAg
ICAgaWYgKCFtX2luQm9keSkKQEAgLTgwOSwxMiArODA5LDEyIEBAIGJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleEMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6c2VsZWN0Q3JlYXRlRXJy
b3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpk
ZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAg
IHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7CiAgICAgcG9wQmxvY2soZHRUYWcp
OwpAQCAtODIyLDcgKzgyMiw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRD
cmVhdGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpkdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQor
Ym9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
UmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwg
cmVzdWx0KTsKICAgICBwb3BCbG9jayhkZFRhZyk7CkBAIC04MzAsNDYgKzgzMCw0NiBAQCBib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnBDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHJwVGFn
KTsKICAgICBwb3BCbG9jayhydFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRy
PE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpydENyZWF0ZUVycm9yQ2hlY2so
VG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHJwVGFnKTsKICAgICBwb3BC
bG9jayhydFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+
JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiB0LCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3Rl
ZFBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcENsb3NlckNyZWF0ZUVy
cm9yQ2hlY2sodCwgcmVzdWx0KTsKICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRTdHls
ZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhU
TUxUcmVlQnVpbGRlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQ
dHI8Tm9kZT4mKQogewogICAgIHJldHVybiBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50YWdO
YW1lKTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikK
IHsKICAgICBwb3BCbG9jayh0ZFRhZyk7CiAgICAgcG9wQmxvY2sodGhUYWcpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlv
bkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHRoZWFkVGFnKTsKICAgICBwb3BCbG9jayh0Ym9keVRh
Zyk7CkBAIC04NzcsMTkgKzg3NywxOSBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OnRhYmxlU2VjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQor
Ym9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBzZXRTa2lwTW9kZShub2VtYmVkVGFnKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2ZyYW1l
c0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpCiB7CiAgICAgc2V0U2tpcE1vZGUobm9mcmFtZXNUYWcpOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JD
aGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBp
ZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1
bWVudC0+ZnJhbWUoKTsKQEAgLTg5OSwxNCArODk5LDE0IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6bm9zY3JpcHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIGlmIChoYXNQRWxlbWVudEluU2Nv
cGUoKSkKICAgICAgICAgcG9wQmxvY2socFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBD
bG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAg
ICBpZiAobV9kb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtOTE1LDcgKzkxNSw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3Nl
clMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjptYXBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29s
IExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYgcmVzdWx0KQogewogICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSBIVE1MTWFwRWxl
bWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgIHJlc3VsdCA9IG1fY3VycmVudE1hcEVsZW1l
bnQ7CkBAIC05MzYsNDggKzkzNiw0OCBAQCBzdGF0aWMgdm9pZCBtYXBUYWdzVG9GdW5jKEZ1bmN0
aW9uTWFwJiBtCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OmdldE5vZGUoVG9rZW4qIHQpCitQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxU
cmVlQnVpbGRlcjo6Z2V0Tm9kZShUb2tlbiogdCkKIHsKICAgICAvLyBJbml0IG91ciBlcnJvciBo
YW5kbGluZyB0YWJsZS4KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBnRnVu
Y3Rpb25NYXAsICgpKTsKICAgICBpZiAoZ0Z1bmN0aW9uTWFwLmlzRW1wdHkoKSkgewogICAgICAg
ICBRdWFsaWZpZWROYW1lIG5lc3RlZENyZWF0ZUVycm9yVGFnc1tdID0geyBhVGFnLCBidXR0b25U
YWcsIG5vYnJUYWcsIHRyVGFnIH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBuZXN0ZWRDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAs
IG5lc3RlZENyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVkQ3Jl
YXRlRXJyb3JDaGVjayk7CiAKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRTdHlsZUNyZWF0
ZUVycm9yVGFnc1tdID0geyBiVGFnLCBiaWdUYWcsIGlUYWcsIHNUYWcsIHNtYWxsVGFnLCBzdHJp
a2VUYWcsIHR0VGFnLCB1VGFnIH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1
bmN0aW9uTWFwLCBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKIAogICAgICAgICBRdWFsaWZpZWRO
YW1lIHBDbG9zZXJDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYWRkcmVzc1RhZywgYXJ0aWNsZVRhZywK
ICAgICAgICAgICAgIGFzaWRlVGFnLCBibG9ja3F1b3RlVGFnLCBjZW50ZXJUYWcsIGRpclRhZywg
ZGl2VGFnLCBkbFRhZywKICAgICAgICAgICAgIGZpZWxkc2V0VGFnLCBmb290ZXJUYWcsIGgxVGFn
LCBoMlRhZywgaDNUYWcsIGg0VGFnLCBoNVRhZywgaDZUYWcsCiAgICAgICAgICAgICBoZWFkZXJU
YWcsIGhncm91cFRhZywgaHJUYWcsIGxpc3RpbmdUYWcsIG1lbnVUYWcsIG5hdlRhZywgb2xUYWcs
CiAgICAgICAgICAgICBwVGFnLCBwbGFpbnRleHRUYWcsIHByZVRhZywgc2VjdGlvblRhZywgdWxU
YWcgfTsKLSAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIHBDbG9zZXJDcmVhdGVF
cnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JD
aGVjayk7CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBwQ2xvc2VyQ3JlYXRl
RXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayk7CiAKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgYm9keVRhZywgJkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpkZENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBkdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZvcm1UYWcsICZMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIGZyYW1lc2V0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5j
dGlvbk1hcCwgaGVhZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhlYWRDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgaXNpbmRleFRh
ZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKTsK
LSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbWFwVGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIGxpVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVk
UENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBub2VtYmVkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENyZWF0
ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub2ZyYW1l
c1RhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVj
ayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vc2NyaXB0VGFnLCAmTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGFibGVUYWcsICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRh
Z1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJwVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
cnBDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwg
cnRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpydENyZWF0ZUVycm9yQ2hlY2spOwot
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBzZWxlY3RUYWcsICZMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgdGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlv
bk1hcCwgdGhUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGJvZHlUYWcs
ICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNr
KTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGZvb3RUYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGhlYWRUYWcsICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgYm9keVRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Ym9k
eUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBk
ZFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZGRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZHRUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIGZvcm1UYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZnJhbWVzZXRUYWcsICZMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1h
cFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGhlYWRUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OmhlYWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgaXNpbmRleFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aXNpbmRleENyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBtYXBUYWcsICZMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCBsaVRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVk
UENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBub2VtYmVkVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpub2VtYmVkQ3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vZnJhbWVzVGFn
LCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOworICAg
ICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub3NjcmlwdFRhZywgJkxlZ2FjeUhUTUxU
cmVlQnVpbGRlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9G
dW5jKGdGdW5jdGlvbk1hcCwgdGFibGVUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBDbG9z
ZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlv
bk1hcCwgcnBUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJwQ3JlYXRlRXJyb3JDaGVjayk7
CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJ0VGFnLCAmTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpydENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1
bmN0aW9uTWFwLCBzZWxlY3RUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0
ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0ZFRhZywg
JkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdG
dW5jdGlvbk1hcCwgdGJvZHlUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlU2VjdGlv
bkNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0
Zm9vdFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JD
aGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoZWFkVGFnLCAmTGVn
YWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKIAotICAg
ICAgICBnRnVuY3Rpb25NYXAuc2V0KGNvbW1lbnRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9u
TWFwLnNldCh0ZXh0QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0ZXh0
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoY29tbWVudEF0b20u
aW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayk7
CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQodGV4dEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayk7CiAgICAgfQogCiAgICAgYm9vbCBwcm9j
ZWVkID0gdHJ1ZTsKQEAgLTk4OSw3ICs5ODksNyBAQCBQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLWJvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmFsbG93
TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKICAgICAv
LyB3d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMg
YSBsZXZlbCBvZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBh
IGJ1bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMApAQCAtMTAwMSw3
ICsxMDAxLDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjphbGxvd05lcwogICAg
IHJldHVybiBpICE9IGNNYXhSZWR1bmRhbnRUYWdEZXB0aDsKIH0KIAotdm9pZCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4qIHQpCit2b2lkIExlZ2FjeUhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuKiB0KQogewogICAgIC8vIFN1cHBv
cnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KICAgICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9k
eSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFj
dHVhbCBlbmQgb2YgdGhlIGRvYy4KQEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cHJvY2Vzc0MKICAgICB9CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6aXNIZWFkaW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0hlYWRpbmdUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGFnTmFtZVNldCwgaGVh
ZGluZ1RhZ3MsICgpKTsKICAgICBpZiAoaGVhZGluZ1RhZ3MuaXNFbXB0eSgpKSB7CkBAIC0xMDQx
LDcgKzEwNDEsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSGVhZGluCiAg
ICAgcmV0dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAotYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZShOb2RlKiBub2RlKSBjb25zdAor
Ym9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0CiB7
CiAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
MDcxLDcgKzEwNzEsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSW5saW5l
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCitib29sIExl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+LCByZXNpZHVhbFN0eWxlVGFncywgKCkpOwogICAgIGlmIChyZXNpZHVhbFN0eWxl
VGFncy5pc0VtcHR5KCkpIHsKQEAgLTEwODMsNyArMTA4Myw3IEBAIGJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6aXNSZXNpZHUKICAgICByZXR1cm4gcmVzaWR1YWxTdHlsZVRhZ3MuY29u
dGFpbnModGFnTmFtZS5pbXBsKCkpOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwo
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHVuYWZmZWN0ZWRUYWdzLCAoKSk7CiAgICAgaWYg
KHVuYWZmZWN0ZWRUYWdzLmlzRW1wdHkoKSkgewpAQCAtMTA5NSw3ICsxMDk1LDcgQEAgYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0FmZmVjdAogICAgIHJldHVybiAhdW5hZmZlY3Rl
ZFRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsKCkpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1M
U3RhY2tFbGVtKiBlbGVtKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAg
IEhUTUxTdGFja0VsZW0qIG1heEVsZW0gPSAwOwogICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsK
QEAgLTEzMjYsNyArMTMyNiw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFu
ZGxlUmUKICAgICBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyA9IGZhbHNlOwog
fQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJlb3BlblJlc2lkdWFsU3R5bGVU
YWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQordm9p
ZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFj
a0VsZW0qIGVsZW0sIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8vIExvb3Ag
Zm9yIGVhY2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUgKGVsZW0p
IHsKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
cmVvcGVuUmUKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHVz
aEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IGxldmVsKQordm9pZCBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUs
IGludCBsZXZlbCkKIHsKICAgICBtX2Jsb2NrU3RhY2sgPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdO
YW1lLCBsZXZlbCwgbV9jdXJyZW50LCBtX2RpZFJlZkN1cnJlbnQsIG1fYmxvY2tTdGFjayk7CiAg
ICAgaWYgKGxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkKQEAgLTEzODAsNyArMTM4
MCw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHVzaEJsb2MKICAgICAgICAg
bV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwogfQogCi12b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9v
bCByZXBvcnRFcnJvcnMpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wQmxvY2soY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIHJlcG9ydEVycm9ycykKIHsKICAgICBIVE1M
U3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwogCkBAIC0xNDY5LDcgKzE0NjksNyBAQCB2
b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrCiAgICAgcmVvcGVuUmVzaWR1
YWxTdHlsZVRhZ3MocmVzaWR1YWxTdHlsZVN0YWNrLCBtYWxmb3JtZWRUYWJsZVBhcmVudCk7CiB9
CiAKLWlubGluZSBIVE1MU3RhY2tFbGVtKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BP
bmVCbG9ja0NvbW1vbigpCitpbmxpbmUgSFRNTFN0YWNrRWxlbSogTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjpwb3BPbmVCbG9ja0NvbW1vbigpCiB7CiAgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1f
YmxvY2tTdGFjazsKIApAQCAtMTQ5OCw3ICsxNDk4LDcgQEAgaW5saW5lIEhUTUxTdGFja0VsZW0q
IExlZ2FjeUhUTUxUcmVlQ29ucwogICAgIHJldHVybiBlbGVtOwogfQogCi12b2lkIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnBvcE9uZUJsb2NrKCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjpwb3BPbmVCbG9jaygpCiB7CiAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgbm9kZSBiZWZv
cmUgcG9wT25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBpdC4KICAgICBOb2RlKiBsYXN0Q3VycmVu
dCA9IG1fY3VycmVudDsKQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cG9wT25lQmwKICAgICAgICAgbGFzdEN1cnJlbnQtPmRlcmVmKCk7CiB9CiAK
LXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9uZUJsb2NrVG9TdGFjayhIVE1M
U3RhY2tFbGVtKiYgaGVhZCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjptb3ZlT25lQmxv
Y2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKQogewogICAgIC8vIFdlJ2xsIGJlIHVzaW5n
IHRoZSBzdGFjayBlbGVtZW50IHdlJ3JlIHBvcHBpbmcsIGJ1dCBmb3IgdGhlIGN1cnJlbnQgbm9k
ZS4KICAgICAvLyBTZWUgdGhlIHR3byBjYWxsZXJzIGZvciBkZXRhaWxzLgpAQCAtMTUzMiw3ICsx
NTMyLDcgQEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptb3ZlT25lQgogICAgIGhl
YWQgPSBlbGVtOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZI
YXNQRWxlbWVudEluU2NvcGUoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmNoZWNrSWZI
YXNQRWxlbWVudEluU2NvcGUoKQogewogICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5T
Y29wZTsKICAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwpAQCAtMTU0Nywx
MyArMTU0NywxMyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZICiAg
ICAgfQogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcElubGluZUJsb2Nr
cygpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wSW5saW5lQmxvY2tzKCkKIHsKICAg
ICB3aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzSW5saW5lKG1fY3VycmVudCkpCiAgICAgICAgIHBv
cE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJlZUJs
b2NrKCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmcmVlQmxvY2soKQogewogICAgIHdo
aWxlIChtX2Jsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CkBAIC0xNTYxLDcgKzE1
NjEsNyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyZWVCbG9jCiAgICAgQVNT
RVJUKCFtX3RyZWVEZXB0aCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
Y3JlYXRlSGVhZCgpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlSGVhZCgpCiB7
CiAgICAgaWYgKG1faGVhZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAg
dm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjcmVhdGVIZQogICAgIH0KIH0KIAotUGFz
c1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVJc2luZGV4KFRv
a2VuKiB0KQorUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZUlz
aW5kZXgoVG9rZW4qIHQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG4gPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKG1fZG9jdW1lbnQpOwogCkBAIC0xNjE0LDcgKzE2MTQsNyBAQCBQYXNzUmVmUHRyPE5v
ZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0CiAgICAgcmV0dXJuIG4ucmVsZWFzZSgpOwogfQog
Ci12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnN0YXJ0Qm9keSgpCit2b2lkIExlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6c3RhcnRCb2R5KCkKIHsKICAgICBpZiAobV9pbkJvZHkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE2MjcsNyArMTYyNyw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6c3RhcnRCb2QKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6ZmluaXNoZWQoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkK
IHsKICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGNvbXBsZXRlbHkgZW1wdHkgZG9jdW1lbnQsIGhl
cmUncyB0aGUgcGxhY2UgdG8gY3JlYXRlIHRoZSBIVE1MIGVsZW1lbnQuCiAgICAgaWYgKG1fY3Vy
cmVudCAmJiBtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIW1fZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpKQpAQCAtMTY0Miw3ICsxNjQyLDcgQEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpmaW5pc2hlZAogICAgICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmco
KTsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXBvcnRFcnJvclRvQ29u
c29sZShIVE1MUGFyc2VyRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0
YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpCit2
b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNl
ckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0
IEF0b21pY1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQogeyAgICAKICAgICBGcmFt
ZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBX
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oCShyZXZpc2lvbiA2MTY3MikJKGZyb20gV2Vi
Q29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaDo2MTY3MikKKysrIFdlYkNvcmUv
aHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIx
NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2Rl
Lm9yZykKKyAgICAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykK
KyAgICAgICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQor
ICAgICAgICAgICAgICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICAgIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yX2gKKyNkZWZpbmUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdHlwZVRva2VuOworY2xhc3MgRG9jdW1l
bnQ7CitjbGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgSFRNTERvY3VtZW50OworY2xhc3Mg
SFRNTEZvcm1FbGVtZW50OworY2xhc3MgSFRNTEhlYWRFbGVtZW50OworY2xhc3MgSFRNTE1hcEVs
ZW1lbnQ7CitjbGFzcyBIVE1MUGFyc2VyUXVpcmtzOworY2xhc3MgTm9kZTsKKworc3RydWN0IEhU
TUxTdGFja0VsZW07CitzdHJ1Y3QgVG9rZW47CisKKy8qKgorICogVGhlIHBhcnNlciBmb3IgSFRN
TC4gSXQgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlciwgYW5kCisgKiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9t
IGl0LgorICovCitjbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKK3B1YmxpYzoKKyAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKEhUTUxEb2N1
bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
KERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQpOworICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IoKTsKKworICAgIC8qKgorICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRo
ZSB0b2tlbml6ZXIKKyAgICAgKi8KKyAgICBQYXNzUmVmUHRyPE5vZGU+IHBhcnNlVG9rZW4oVG9r
ZW4qKTsKKyAgICAKKyAgICAvLyBQYXJzZXMgYSBkb2N0eXBlIHRva2VuLgorICAgIHZvaWQgcGFy
c2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKik7CisKKyAgICAvKioKKyAgICAgKiB0b2tlbml6
ZXIgc2F5cyBpdCdzIG5vdCBnb2luZyB0byBiZSBzZW5kaW5nIHVzIGFueSBtb3JlIHRva2Vucwor
ICAgICAqLworICAgIHZvaWQgZmluaXNoZWQoKTsKKworICAgIC8qKgorICAgICAqIHJlc2V0cyB0
aGUgcGFyc2VyCisgICAgICovCisgICAgdm9pZCByZXNldCgpOworCisgICAgYm9vbCBza2lwTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3NraXBNb2RlVGFnLmlzTnVsbCgpOyB9CisgICAgYm9vbCBp
c0hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFu
ZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBz
ZXRDdXJyZW50KE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ3VycmVudCgpOworICAgIHZvaWQgc2V0
U2tpcE1vZGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgbV9za2lwTW9kZVRhZyA9IHFO
YW1lLmxvY2FsTmFtZSgpOyB9CisKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5vZGUoVG9rZW4q
KTsKKyAgICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7
CisgICAgYm9vbCBjYW52YXNDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7
CisgICAgYm9vbCBjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OworICAgIGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Cisg
ICAgYm9vbCBkdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBi
b29sIGZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBi
b29sIGhlYWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBpZnJhbWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBpc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJv
b2wgbWFwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wg
bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wg
bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAg
ICBib29sIG5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OworICAgIGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KTsKKyAgICBib29sIG5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpOworICAgIGJvb2wgbm9sYXllckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKKyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpOworICAgIGJvb2wgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKTsKKyAgICBib29sIHBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwg
UmVmUHRyPE5vZGU+Jik7CisgICAgYm9vbCBycENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKTsKKyAgICBib29sIHJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpOworICAgIGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpOworICAgIGJvb2wgdGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpOworICAgIGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wgdGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKTsKKworICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7CisKKyAg
ICB2b2lkIGxpbWl0RGVwdGgoaW50IHRhZ1ByaW9yaXR5KTsKKyAgICBib29sIGluc2VydE5vZGVB
ZnRlckxpbWl0RGVwdGgoTm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGluc2Vy
dE5vZGUoTm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVycm9yKE5v
ZGUqLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJp
b3JpdHkpOworICAgIAorICAgIHZvaWQgcHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSwgaW50IGxldmVsKTsKKyAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSk7CisgICAgdm9pZCBwb3BCbG9jayhj
b25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSkgeyBy
ZXR1cm4gcG9wQmxvY2socU5hbWUubG9jYWxOYW1lKCksIHJlcG9ydEVycm9ycyk7IH0gLy8gQ29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgorICAgIHZvaWQgcG9wT25lQmxvY2so
KTsKKyAgICB2b2lkIG1vdmVPbmVCbG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhlYWQpOwor
ICAgIGlubGluZSBIVE1MU3RhY2tFbGVtKiBwb3BPbmVCbG9ja0NvbW1vbigpOworICAgIHZvaWQg
cG9wSW5saW5lQmxvY2tzKCk7CisKKyAgICB2b2lkIGZyZWVCbG9jaygpOworCisgICAgdm9pZCBj
cmVhdGVIZWFkKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBpc0FmZmVjdGVkQnlSZXNp
ZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBoYW5kbGVS
ZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSopOworICAgIHZv
aWQgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSosIE5vZGUqIG1hbGZvcm1l
ZFRhYmxlUGFyZW50KTsKKworICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0hlYWRpbmdU
YWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKworICAgIGJvb2wgaXNJbmxpbmUoTm9k
ZSopIGNvbnN0OworICAgIAorICAgIHZvaWQgc3RhcnRCb2R5KCk7IC8vIGluc2VydHMgdGhlIGlz
aW5kZXggZWxlbWVudAorICAgIFBhc3NSZWZQdHI8Tm9kZT4gaGFuZGxlSXNpbmRleChUb2tlbiop
OworCisgICAgdm9pZCBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7CisgICAgYm9vbCBoYXNQ
RWxlbWVudEluU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1faGFzUEVsZW1lbnRJblNjb3Bl
ID09IFVua25vd24pCisgICAgICAgICAgICBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7Cisg
ICAgICAgIHJldHVybiBtX2hhc1BFbGVtZW50SW5TY29wZSA9PSBJblNjb3BlOworICAgIH0KKwor
ICAgIHZvaWQgcmVwb3J0RXJyb3IoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0
IEF0b21pY1N0cmluZyogdGFnTmFtZTEgPSAwLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUy
ID0gMCwgYm9vbCBjbG9zZVRhZ3MgPSBmYWxzZSkKKyAgICB7IGlmICghbV9yZXBvcnRFcnJvcnMp
IHJldHVybjsgcmVwb3J0RXJyb3JUb0NvbnNvbGUoZXJyb3JDb2RlLCB0YWdOYW1lMSwgdGFnTmFt
ZTIsIGNsb3NlVGFncyk7IH0KKworICAgIHZvaWQgcmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBh
cnNlckVycm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWlj
U3RyaW5nKiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpOworICAgIAorICAgIERvY3VtZW50KiBt
X2RvY3VtZW50OworCisgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9u
ZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuIENhbiBiZSBhIGRvY3VtZW50IGZyYWdt
ZW50LCBhIGRvY3VtZW50IG9yIGFuIGVsZW1lbnQuCisgICAgTm9kZSogbV9jdXJyZW50OworICAg
IC8vIFdlIGNhbid0IHJlZiBhIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFu
dGx5IGNoZWNrIGlmIGEgbm9kZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdoZXRoZXIg
dG8gZGVyZWYuCisgICAgYm9vbCBtX2RpZFJlZkN1cnJlbnQ7CisKKyAgICBIVE1MU3RhY2tFbGVt
KiBtX2Jsb2NrU3RhY2s7CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlvcml0
eSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkgb3IgaGlnaGVyCisgICAgLy8gY3VycmVudGx5IGlu
IG1fYmxvY2tTdGFjay4gVGhlIHBhcnNlciBlbmZvcmNlcyBhIGNhcCBvbiB0aGlzIHZhbHVlIGJ5
CisgICAgLy8gYWRkaW5nIHN1Y2ggbmV3IGVsZW1lbnRzIGFzIHNpYmxpbmdzIGluc3RlYWQgb2Yg
Y2hpbGRyZW4gb25jZSBpdCBpcyByZWFjaGVkLgorICAgIHNpemVfdCBtX2Jsb2Nrc0luU3RhY2s7
CisgICAgLy8gRGVwdGggb2YgdGhlIHRyZWUuCisgICAgdW5zaWduZWQgbV90cmVlRGVwdGg7CisK
KyAgICBlbnVtIEVsZW1lbnRJblNjb3BlU3RhdGUgeyBOb3RJblNjb3BlLCBJblNjb3BlLCBVbmtu
b3duIH07IAorICAgIEVsZW1lbnRJblNjb3BlU3RhdGUgbV9oYXNQRWxlbWVudEluU2NvcGU7CisK
KyAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2N1cnJlbnRGb3JtRWxlbWVudDsgLy8gY3Vy
cmVudGx5IGFjdGl2ZSBmb3JtCisgICAgUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBtX2N1cnJlbnRN
YXBFbGVtZW50OyAvLyBjdXJyZW50IG1hcAorICAgIFJlZlB0cjxIVE1MSGVhZEVsZW1lbnQ+IG1f
aGVhZDsgLy8gaGVhZCBlbGVtZW50OyBuZWVkZWQgZm9yIEhUTUwgd2hpY2ggZGVmaW5lcyA8YmFz
ZT4gYWZ0ZXIgPC9oZWFkPgorICAgIFJlZlB0cjxOb2RlPiBtX2lzaW5kZXhFbGVtZW50OyAvLyBh
IHBvc3NpYmxlIDxpc2luZGV4PiBlbGVtZW50IGluIHRoZSBoZWFkCisKKyAgICBib29sIG1faW5C
b2R5OworICAgIGJvb2wgbV9oYXZlQ29udGVudDsKKyAgICBib29sIG1faGF2ZUZyYW1lU2V0Owor
CisgICAgQXRvbWljU3RyaW5nIG1fc2tpcE1vZGVUYWc7IC8vIHRlbGxzIHRoZSBwYXJzZXIgdG8g
ZGlzY2FyZCBhbGwgdGFncyB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCisKKyAg
ICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CisgICAgYm9vbCBtX3JlcG9ydEVycm9yczsKKyAg
ICBib29sIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOworICAgIGludCBtX2lu
U3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fc2Ny
aXB0aW5nUGVybWlzc2lvbjsKKworICAgIE93blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBtX3BhcnNl
clF1aXJrczsKK307CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpCitib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1
bWVudCopOworI2Vsc2UKK2lubGluZSBib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1
bWVudCopIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCisvLyBDb252ZXJ0cyB0aGUgc3BlY2lm
aWVkIHN0cmluZyB0byBhIGZsb2F0aW5nIG51bWJlci4KKy8vIElmIHRoZSBjb252ZXJzaW9uIGZh
aWxzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLiBUYWtlIGNhcmUgdGhhdCBsZWFkaW5nIG9y
IHRyYWlsaW5nIHVubmVjZXNzYXJ5IGNoYXJhY3RlcnMgbWFrZSBmYWlsdXJlcy4gIFRoaXMgcmV0
dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgc3RyaW5nIGlucHV0LgorLy8gVGhlIGRvdWJsZSogcGFy
YW1ldGVyIG1heSBiZSAwLgorYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBT
dHJpbmcmLCBkb3VibGUqKTsKKy8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHRvIGEg
c3RyaW5nLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mCisvLyBIVE1MNSdzICJhbGdvcml0
aG0gdG8gY29udmVydCBhIG51bWJlciB0byBhIHN0cmluZyIgZm9yIE5VTUJFUi9SQU5HRSB0eXBl
cy4KK1N0cmluZyBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKGRvdWJsZSk7CisKK30KKyAgICAKKyNl
bmRpZiAvLyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5
SFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0xlZ2Fj
eUhUTUxUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMTEgQEAgc3Ry
dWN0IFRva2VuOwogICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2ZXMgYSBzdHJlYW0g
b2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciwgYW5kCiAgKiBidWls
ZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0LgogICovCi1jbGFzcyBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIExlZ2FjeUhU
TUxUcmVlQnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3RvcihIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycyk7Ci0g
ICAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLSAgICB2aXJ0
dWFsIH5MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCk7CisgICAgTGVnYWN5SFRNTFRyZWVCdWls
ZGVyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXIoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9
IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgdmlydHVhbCB+TGVnYWN5SFRNTFRyZWVC
dWlsZGVyKCk7CiAKICAgICAvKioKICAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBi
eSB0aGUgdG9rZW5pemVyCkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzQ0ICswLDAgQEAKLS8qCi0g
ICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAg
ICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAg
ICAgIChDKSAxOTk5LDIwMDEgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICAgICAgICAg
ICAgKEMpIDIwMDAsMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmgiCi0KLSNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hy
b21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ29tbWVudC5oIgot
I2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJE
b2N1bWVudEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAi
RnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxETGlz
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKLSNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MSFJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSFRNTElzSW5kZXhFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VyUXVpcmtzLmgiCi0jaW5j
bHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJM
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4
dC5oIgotI2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNNYXhS
ZWR1bmRhbnRUYWdEZXB0aCA9IDIwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNSZXNpZHVhbFN0
eWxlTWF4RGVwdGggPSAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY1Jlc2lkdWFsU3R5bGVJ
dGVyYXRpb25MaW1pdCA9IDU7Ci0KLQotc3RhdGljIGNvbnN0IGludCBtaW5CbG9ja0xldmVsVGFn
UHJpb3JpdHkgPSAzOwotCi0vLyBBIGNhcCBvbiB0aGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlv
cml0eSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkgb3IgaGlnaGVyCi0vLyBhbGxvd2VkIGluIG1f
YmxvY2tTdGFjay4gVGhlIGNhcCBpcyBlbmZvcmNlZCBieSBhZGRpbmcgc3VjaCBuZXcgZWxlbWVu
dHMgYXMKLS8vIHNpYmxpbmdzIGluc3RlYWQgb2YgY2hpbGRyZW4gb25jZSBpdCBpcyByZWFjaGVk
Lgotc3RhdGljIGNvbnN0IHNpemVfdCBjTWF4QmxvY2tEZXB0aCA9IDQwOTY7Ci0KLQotdHlwZWRl
ZiBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBUYWdOYW1lU2V0OwotCi10ZW1wbGF0ZTwgc2l6
ZV90IEFycmF5U2l6ZSA+Ci1zdGF0aWMgdm9pZCBhZGRUYWdzKFRhZ05hbWVTZXQmIHNldCwgUXVh
bGlmaWVkTmFtZSAoJm5hbWVzKVtBcnJheVNpemVdKQotewotICAgIGZvciAoc2l6ZV90IHggPSAw
OyB4IDwgQXJyYXlTaXplOyB4KyspIHsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSA9IG5hbWVzW3hdOwotICAgICAgICBzZXQuYWRkKG5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICB9Ci19Ci0KLXN0cnVjdCBIVE1MU3RhY2tFbGVtIDogTm9uY29weWFibGUgewotICAgIEhU
TUxTdGFja0VsZW0oY29uc3QgQXRvbWljU3RyaW5nJiB0LCBpbnQgbHZsLCBOb2RlKiBuLCBib29s
IHIsIEhUTUxTdGFja0VsZW0qIG54KQotICAgICAgICA6IHRhZ05hbWUodCkKLSAgICAgICAgLCBs
ZXZlbChsdmwpCi0gICAgICAgICwgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpCi0gICAgICAgICwg
bm9kZShuKQotICAgICAgICAsIGRpZFJlZk5vZGUocikKLSAgICAgICAgLCBuZXh0KG54KQotICAg
IHsKLSAgICB9Ci0KLSAgICB2b2lkIGRlcmVmTm9kZSgpCi0gICAgewotICAgICAgICBpZiAoZGlk
UmVmTm9kZSkKLSAgICAgICAgICAgIG5vZGUtPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgQXRvbWlj
U3RyaW5nIHRhZ05hbWU7Ci0gICAgaW50IGxldmVsOwotICAgIGJvb2wgc3RyYXlUYWJsZUNvbnRl
bnQ7Ci0gICAgTm9kZSogbm9kZTsKLSAgICBib29sIGRpZFJlZk5vZGU7Ci0gICAgSFRNTFN0YWNr
RWxlbSogbmV4dDsKLX07Ci0KLS8qKgotICogVGhlIHBhcnNlciBwYXJzZXMgdG9rZW5pemVkIGlu
cHV0IGludG8gdGhlIGRvY3VtZW50LCBidWlsZGluZyB1cCB0aGUKLSAqIGRvY3VtZW50IHRyZWUu
IElmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZCwgcGFyc2luZyBpdCBpcyBzdHJhaWdodGZv
cndhcmQuCi0gKgotICogVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byBoYW5kbGUgbWFueSBIVE1M
IGRvY3VtZW50cyB0aGF0IGFyZSBub3Qgd2VsbC1mb3JtZWQsCi0gKiBzbyB0aGUgcGFyc2VyIGhh
cyB0byBiZSB0b2xlcmFudCBhYm91dCBlcnJvcnMuCi0gKgotICogV2UgaGF2ZSB0byB0YWtlIGNh
cmUgb2YgYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOgotICoKLSAqIDEu
IFRoZSBlbGVtZW50IGJlaW5nIGFkZGVkIGlzIGV4cGxpY2l0bHkgZm9yYmlkZGVuIGluc2lkZSBz
b21lIG91dGVyIHRhZy4KLSAqICAgIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgY2xvc2UgYWxsIHRh
Z3MgdXAgdG8gdGhlIG9uZSwgd2hpY2ggZm9yYmlkcwotICogICAgdGhlIGVsZW1lbnQsIGFuZCBh
ZGQgaXQgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiAyLiBXZSBhcmUgbm90IGFsbG93ZWQgdG8gYWRkIHRo
ZSBlbGVtZW50IGRpcmVjdGx5LiBJdCBjb3VsZCBiZSB0aGF0Ci0gKiAgICB0aGUgcGVyc29uIHdy
aXRpbmcgdGhlIGRvY3VtZW50IGZvcmdvdCBzb21lIHRhZyBpbiBiZXR3ZWVuIChvciB0aGF0IHRo
ZQotICogICAgdGFnIGluIGJldHdlZW4gaXMgb3B0aW9uYWwpLiBUaGlzIGNvdWxkIGJlIHRoZSBj
YXNlIHdpdGggdGhlIGZvbGxvd2luZwotICogICAgdGFnczogSFRNTCBIRUFEIEJPRFkgVEJPRFkg
VFIgVEQgTEkgKGRpZCBJIGZvcmdldCBhbnk/KS4KLSAqCi0gKiAzLiBXZSB3YW50IHRvIGFkZCBh
IGJsb2NrIGVsZW1lbnQgaW5zaWRlIHRvIGFuIGlubGluZSBlbGVtZW50LiBDbG9zZSBhbGwKLSAq
ICAgIGlubGluZSBlbGVtZW50cyB1cCB0byB0aGUgbmV4dCBoaWdoZXIgYmxvY2sgZWxlbWVudC4K
LSAqCi0gKiA0LiBJZiB0aGlzIGRvZXNuJ3QgaGVscCwgY2xvc2UgZWxlbWVudHMgdW50aWwgd2Ug
YXJlIGFsbG93ZWQgdG8gYWRkIHRoZQotICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4K
LSAqCi0gKi8KLQotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3RvcihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRFcnJvcnMpCi0gICAgOiBtX2Rv
Y3VtZW50KGRvYykKLSAgICAsIG1fY3VycmVudChkb2MpCi0gICAgLCBtX2RpZFJlZkN1cnJlbnQo
ZmFsc2UpCi0gICAgLCBtX2Jsb2NrU3RhY2soMCkKLSAgICAsIG1fYmxvY2tzSW5TdGFjaygwKQot
ICAgICwgbV90cmVlRGVwdGgoMCkKLSAgICAsIG1faGFzUEVsZW1lbnRJblNjb3BlKE5vdEluU2Nv
cGUpCi0gICAgLCBtX2luQm9keShmYWxzZSkKLSAgICAsIG1faGF2ZUNvbnRlbnQoZmFsc2UpCi0g
ICAgLCBtX2hhdmVGcmFtZVNldChmYWxzZSkKLSAgICAsIG1faXNQYXJzaW5nRnJhZ21lbnQoZmFs
c2UpCi0gICAgLCBtX3JlcG9ydEVycm9ycyhyZXBvcnRFcnJvcnMpCi0gICAgLCBtX2hhbmRsaW5n
UmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKLSAgICAsIG1faW5TdHJheVRhYmxlQ29u
dGVudCgwKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCkKLSAgICAsIG1fcGFyc2VyUXVpcmtzKG1fZG9jdW1lbnQtPnBhZ2UoKSA/IG1fZG9jdW1l
bnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5jcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkg
OiAwKQotewotfQotCi1MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yKERvY3VtZW50RnJhZ21lbnQqIGZyYWcsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotICAgIDogbV9kb2N1bWVudChmcmFnLT5kb2N1bWVu
dCgpKQotICAgICwgbV9jdXJyZW50KGZyYWcpCi0gICAgLCBtX2RpZFJlZkN1cnJlbnQodHJ1ZSkK
LSAgICAsIG1fYmxvY2tTdGFjaygwKQotICAgICwgbV9ibG9ja3NJblN0YWNrKDApCi0gICAgLCBt
X3RyZWVEZXB0aCgwKQotICAgICwgbV9oYXNQRWxlbWVudEluU2NvcGUoTm90SW5TY29wZSkKLSAg
ICAsIG1faW5Cb2R5KHRydWUpCi0gICAgLCBtX2hhdmVDb250ZW50KGZhbHNlKQotICAgICwgbV9o
YXZlRnJhbWVTZXQoZmFsc2UpCi0gICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KHRydWUpCi0gICAg
LCBtX3JlcG9ydEVycm9ycyhmYWxzZSkKLSAgICAsIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNy
b3NzQmxvY2tzKGZhbHNlKQotICAgICwgbV9pblN0cmF5VGFibGVDb250ZW50KDApCi0gICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICAsIG1fcGFyc2Vy
UXVpcmtzKG1fZG9jdW1lbnQtPnBhZ2UoKSA/IG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5jcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkgOiAwKQotewotICAgIGlmIChmcmFn
KQotICAgICAgICBmcmFnLT5yZWYoKTsKLX0KLQotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
fkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoKQotewotICAgIGZyZWVCbG9jaygpOwotICAgIGlm
IChtX2RpZFJlZkN1cnJlbnQpCi0gICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKLX0KLQotdm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXNldCgpCi17Ci0gICAgQVNTRVJUKCFtX2lz
UGFyc2luZ0ZyYWdtZW50KTsKLQotICAgIHNldEN1cnJlbnQobV9kb2N1bWVudCk7Ci0KLSAgICBm
cmVlQmxvY2soKTsKLQotICAgIG1fdHJlZURlcHRoID0gMDsKLSAgICBtX2luQm9keSA9IGZhbHNl
OwotICAgIG1faGF2ZUZyYW1lU2V0ID0gZmFsc2U7Ci0gICAgbV9oYXZlQ29udGVudCA9IGZhbHNl
OwotICAgIG1faW5TdHJheVRhYmxlQ29udGVudCA9IDA7Ci0KLSAgICBtX2N1cnJlbnRGb3JtRWxl
bWVudCA9IDA7Ci0gICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7Ci0gICAgbV9oZWFkID0gMDsK
LSAgICBtX2lzaW5kZXhFbGVtZW50ID0gMDsKLQotICAgIG1fc2tpcE1vZGVUYWcgPSBudWxsQXRv
bTsKLSAgICAKLSAgICBpZiAobV9wYXJzZXJRdWlya3MpCi0gICAgICAgIG1fcGFyc2VyUXVpcmtz
LT5yZXNldCgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNldEN1cnJl
bnQoTm9kZSogbmV3Q3VycmVudCkgCi17Ci0gICAgYm9vbCBkaWRSZWZOZXdDdXJyZW50ID0gbmV3
Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IG1fZG9jdW1lbnQ7Ci0gICAgaWYgKGRpZFJlZk5ld0N1
cnJlbnQpIAotICAgICAgICBuZXdDdXJyZW50LT5yZWYoKTsgCi0gICAgaWYgKG1fZGlkUmVmQ3Vy
cmVudCkgCi0gICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKLSAgICBtX2N1cnJlbnQgPSBuZXdD
dXJyZW50OwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGRpZFJlZk5ld0N1cnJlbnQ7Ci19Ci0KLWlu
bGluZSBzdGF0aWMgaW50IHRhZ1ByaW9yaXR5T2ZOb2RlKE5vZGUqIG4pCi17Ci0gICAgcmV0dXJu
IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPnRhZ1By
aW9yaXR5KCkgOiAwOwotfQotCi1pbmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpsaW1pdERlcHRoKGludCB0YWdQcmlvcml0eSkKLXsKLSAgICB3aGlsZSAobV90cmVlRGVwdGgg
Pj0gbWF4RE9NVHJlZURlcHRoKQotICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05h
bWUpOwotICAgIGlmICh0YWdQcmlvcml0eSA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpIHsK
LSAgICAgICAgd2hpbGUgKG1fYmxvY2tzSW5TdGFjayA+PSBjTWF4QmxvY2tEZXB0aCkKLSAgICAg
ICAgICAgIHBvcEJsb2NrKG1fYmxvY2tTdGFjay0+dGFnTmFtZSk7Ci0gICAgfQotfQotCi1pbmxp
bmUgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppbnNlcnROb2RlQWZ0ZXJMaW1pdERl
cHRoKE5vZGUqIG4sIGJvb2wgZmxhdCkKLXsKLSAgICBsaW1pdERlcHRoKHRhZ1ByaW9yaXR5T2ZO
b2RlKG4pKTsKLSAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKLX0KLQotUGFzc1JlZlB0
cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwYXJzZVRva2VuKFRva2VuKiB0KQot
ewotICAgIGlmICghbV9za2lwTW9kZVRhZy5pc051bGwoKSkgewotICAgICAgICBpZiAoIXQtPmJl
Z2luVGFnICYmIHQtPnRhZ05hbWUgPT0gbV9za2lwTW9kZVRhZykKLSAgICAgICAgICAgIC8vIEZv
dW5kIHRoZSBlbmQgdGFnIGZvciB0aGUgY3VycmVudCBza2lwIG1vZGUsIHNvIHdlJ3JlIGRvbmUg
c2tpcHBpbmcuCi0gICAgICAgICAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207Ci0gICAgICAg
IGVsc2UgaWYgKG1fY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gdC0+dGFnTmFtZSkKLSAgICAgICAg
ICAgIC8vIERvIG5vdCBza2lwIDwvaWZyYW1lPi4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0
IGRvZXMgdGhhdCBjb21tZW50IG1lYW4/IEhvdyBjYW4gaXQgYmUgcmlnaHQgdG8gcGFyc2UgYSB0
b2tlbiB3aXRob3V0IGNsZWFyaW5nIG1fc2tpcE1vZGVUYWc/Ci0gICAgICAgICAgICA7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEFwcGFyZW50
bHkgc29tZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBvZiA8YnI+LiBCZSBjb21wYXRpYmxlIHdp
dGggSUUgYW5kIEZpcmVmb3ggYW5kIHRyZWF0IHRoaXMgbGlrZSA8YnI+LgotICAgIGlmICh0LT5p
c0Nsb3NlVGFnKGJyVGFnKSAmJiBtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkgewotICAgICAg
ICByZXBvcnRFcnJvcihNYWxmb3JtZWRCUkVycm9yKTsKLSAgICAgICAgdC0+YmVnaW5UYWcgPSB0
cnVlOwotICAgIH0KLQotICAgIGlmICghdC0+YmVnaW5UYWcpIHsKLSAgICAgICAgcHJvY2Vzc0Ns
b3NlVGFnKHQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgc3Bh
Y2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2Rl
LgotICAgIC8vIERvIG5vdCBhbHRlciB0aGUgdGV4dCBpZiBpdCBpcyBwYXJ0IG9mIGEgc2NyaXB0
VGFnLgotICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQgJiYgbV9jdXJy
ZW50LT5sb2NhbE5hbWUoKSAhPSBzY3JpcHRUYWcpIHsKLSAgICAgICAgaWYgKG1faW5Cb2R5ICYm
ICFza2lwTW9kZSgpICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc3R5bGVUYWcgJiYKLSAg
ICAgICAgICAgIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdGl0bGVUYWcgJiYgIXQtPnRleHQt
PmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIG1faGF2ZUNvbnRlbnQgPSB0
cnVlOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPE5vZGU+IG47Ci0gICAgICAgIFN0cmluZyB0
ZXh0ID0gdC0+dGV4dC5nZXQoKTsKLSAgICAgICAgdW5zaWduZWQgY2hhcnNMZWZ0ID0gdGV4dC5s
ZW5ndGgoKTsKLSAgICAgICAgd2hpbGUgKGNoYXJzTGVmdCkgewotICAgICAgICAgICAgLy8gc3Bs
aXQgbGFyZ2UgYmxvY2tzIG9mIHRleHQgdG8gbm9kZXMgb2YgbWFuYWdlYWJsZSBzaXplCi0gICAg
ICAgICAgICBuID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KG1fZG9jdW1lbnQsIHRleHQs
IGNoYXJzTGVmdCk7Ci0gICAgICAgICAgICBpZiAoIWluc2VydE5vZGVBZnRlckxpbWl0RGVwdGgo
bi5nZXQoKSwgdC0+c2VsZkNsb3NpbmdUYWcpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuOwotICAgIH0KLQotICAgIFJlZlB0cjxOb2RlPiBu
ID0gZ2V0Tm9kZSh0KTsKLSAgICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJy
ZW50bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgotICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICAvLyBzZXQgYXR0cmlidXRlcwotICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsK
LSAgICAgICAgSFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4uZ2V0
KCkpOwotICAgICAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0
aW5nQWxsb3dlZCB8fCB0LT50YWdOYW1lICE9IHNjcmlwdFRhZykKLSAgICAgICAgICAgIGUtPnNl
dEF0dHJpYnV0ZU1hcCh0LT5hdHRycy5nZXQoKSwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKLQot
ICAgICAgICAvLyB0YWtlIGNhcmUgb2Ygb3B0aW9uYWwgY2xvc2UgdGFncwotICAgICAgICBpZiAo
ZS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNPcHRpb25hbCkKLSAgICAgICAgICAg
IHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBu
b2RlIGRvZXMgbm90IGhhdmUgYSBmb3JiaWRkZW4gZW5kIHRhZyByZXF1aXJlbWVudCwgYW5kIGlm
IHRoZSBicm9rZW4gWE1MIHNlbGYtY2xvc2luZwotICAgICAgICAvLyBzeW50YXggd2FzIHVzZWQs
IHJlcG9ydCBhbiBlcnJvci4KLSAgICAgICAgaWYgKHQtPmJyb2tlblhNTFN0eWxlICYmIGUtPmVu
ZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7Ci0gICAgICAgICAgICBp
ZiAodC0+dGFnTmFtZSA9PSBzY3JpcHRUYWcpCi0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3Io
SW5jb3JyZWN0WE1MQ2xvc2VTY3JpcHRXYXJuaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcihJbmNvcnJlY3RYTUxTZWxmQ2xvc2VFcnJvciwgJnQtPnRh
Z05hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpbnNlcnROb2RlQWZ0ZXJMaW1p
dERlcHRoKG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkgewotICAgICAgICAvLyB3ZSBjb3Vs
ZG4ndCBpbnNlcnQgdGhlIG5vZGUKLQotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkp
OwotICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fY3VycmVudE1hcEVsZW1lbnQgPT0gbikKLSAgICAgICAgICAgIG1fY3VycmVudE1h
cEVsZW1lbnQgPSAwOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRGb3JtRWxlbWVudCA9PSBuKQot
ICAgICAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAwOwotCi0gICAgICAgIGlmIChtX2hl
YWQgPT0gbikKLSAgICAgICAgICAgIG1faGVhZCA9IDA7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiBuOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKLXsKLSAgICAvLyBJZ25vcmUgYW55
IGRvY3R5cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3JlIGRvY3R5cGVzIGluIGZyYWdtZW50cy4K
LSAgICBpZiAobV9kb2N1bWVudC0+ZG9jdHlwZSgpIHx8IG1faXNQYXJzaW5nRnJhZ21lbnQgfHwg
bV9jdXJyZW50ICE9IG1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1ha2Ug
YSBuZXcgZG9jdHlwZSBub2RlIGFuZCBzZXQgaXQgYXMgb3VyIGRvY3R5cGUuCi0gICAgbV9kb2N1
bWVudC0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwgU3RyaW5nOjph
ZG9wdCh0LT5tX25hbWUpLCBTdHJpbmc6OmFkb3B0KHQtPm1fcHVibGljSUQpLCBTdHJpbmc6OmFk
b3B0KHQtPm1fc3lzdGVtSUQpKSk7Ci0gICAgaWYgKHQtPm1fZm9yY2VRdWlya3MpCi0gICAgICAg
IG1fZG9jdW1lbnQtPnNldFBhcnNlTW9kZShEb2N1bWVudDo6Q29tcGF0KTsKLX0KLQotc3RhdGlj
IGJvb2wgaXNUYWJsZVNlY3Rpb24oY29uc3QgTm9kZSogbikKLXsKLSAgICByZXR1cm4gbi0+aGFz
VGFnTmFtZSh0Ym9keVRhZykgfHwgbi0+aGFzVGFnTmFtZSh0Zm9vdFRhZykgfHwgbi0+aGFzVGFn
TmFtZSh0aGVhZFRhZyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzVGFibGVQYXJ0KGNvbnN0IE5vZGUq
IG4pCi17Ci0gICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodHJUYWcpIHx8IG4tPmhhc1RhZ05hbWUo
dGRUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGhUYWcpCi0gICAgICAgIHx8IGlzVGFibGVTZWN0aW9u
KG4pOwotfQotCi1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZChjb25zdCBOb2RlKiBuKQotewot
ICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fCBpc1RhYmxlUGFydChuKTsKLX0K
LQotc3RhdGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkK
LXsKLSAgICByZXR1cm4gdGFnTmFtZSA9PSBhcHBsZXRUYWcgfHwgdGFnTmFtZSA9PSBjYXB0aW9u
VGFnIHx8IHRhZ05hbWUgPT0gdGRUYWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSB0aFRhZyB8fCB0
YWdOYW1lID09IGJ1dHRvblRhZyB8fCB0YWdOYW1lID09IG1hcnF1ZWVUYWcKLSAgICAgICAgfHwg
dGFnTmFtZSA9PSBvYmplY3RUYWcgfHwgdGFnTmFtZSA9PSB0YWJsZVRhZyB8fCB0YWdOYW1lID09
IGh0bWxUYWc7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5zZXJ0Tm9k
ZShOb2RlKiBuLCBib29sIGZsYXQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3ROb2RlKG4p
OwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBuLT5sb2NhbE5hbWUoKTsK
LSAgICAKLSAgICAvLyA8dGFibGU+IGlzIG5ldmVyIGFsbG93ZWQgaW5zaWRlIHN0cmF5IHRhYmxl
IGNvbnRlbnQuICBBbHdheXMgcG9wIG91dCBvZiB0aGUgc3RyYXkgdGFibGUgY29udGVudAotICAg
IC8vIGFuZCBjbG9zZSB1cCB0aGUgZmlyc3QgdGFibGUsIGFuZCB0aGVuIHN0YXJ0IHRoZSBzZWNv
bmQgdGFibGUgYXMgYSBzaWJsaW5nLgotICAgIGlmIChtX2luU3RyYXlUYWJsZUNvbnRlbnQgJiYg
bG9jYWxOYW1lID09IHRhYmxlVGFnKQotICAgICAgICBwb3BCbG9jayh0YWJsZVRhZyk7Ci0KLSAg
ICBpZiAobV9wYXJzZXJRdWlya3MgJiYgIW1fcGFyc2VyUXVpcmtzLT5zaG91bGRJbnNlcnROb2Rl
KG1fY3VycmVudCwgbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB0YWdQcmlv
cml0eSA9IHRhZ1ByaW9yaXR5T2ZOb2RlKG4pOwotCi0gICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFu
ZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUg
ZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQKLSAgICBOb2RlKiBuZXdOb2RlID0gbV9jdXJyZW50LT5h
ZGRDaGlsZChuKTsKLSAgICBpZiAoIW5ld05vZGUpCi0gICAgICAgIHJldHVybiBoYW5kbGVFcnJv
cihuLCBmbGF0LCBsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsgLy8gVHJ5IHRvIGhhbmRsZSB0aGUg
ZXJyb3IuCi0KLSAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUu
Zy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKLSAgICBib29sIHBhcmVudEF0dGFjaGVkID0gbV9jdXJy
ZW50LT5hdHRhY2hlZCgpOwotICAgIGlmICh0YWdQcmlvcml0eSA+IDAgJiYgIWZsYXQpIHsKLSAg
ICAgICAgaWYgKG5ld05vZGUgPT0gbV9jdXJyZW50KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNh
c2Ugc2hvdWxkIG9ubHkgYmUgaGl0IHdoZW4gYSBkZW1vdGVkIDxmb3JtPiBpcyBwbGFjZWQgaW5z
aWRlIGEgdGFibGUuCi0gICAgICAgICAgICBBU1NFUlQobG9jYWxOYW1lID09IGZvcm1UYWcpOwot
ICAgICAgICAgICAgcmVwb3J0RXJyb3IoRm9ybUluc2lkZVRhYmxlUGFydEVycm9yLCAmbV9jdXJy
ZW50LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIGZvcm0tPnNldERl
bW90ZWQodHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgcHVzaEJs
b2NrIGZ1bmN0aW9uIHRyYW5zZmVycyBvd25lcnNoaXAgb2YgY3VycmVudCB0byB0aGUgYmxvY2sg
c3RhY2sKLSAgICAgICAgICAgIC8vIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBtX2RpZFJlZkN1
cnJlbnQgaXMgZmFsc2UuIFRoZSBjb2RlIGJlbG93IGlzIGFuCi0gICAgICAgICAgICAvLyBvcHRp
bWl6ZWQgdmVyc2lvbiBvZiBzZXRDdXJyZW50IHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoYXQg
ZmFjdCBhbmQgYWxzbwotICAgICAgICAgICAgLy8gYXNzdW1lcyB0aGF0IG5ld05vZGUgaXMgbmVp
dGhlciAwIG5vciBhIHBvaW50ZXIgdG8gdGhlIGRvY3VtZW50LgotICAgICAgICAgICAgcHVzaEJs
b2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwotICAgICAgICAgICAgbmV3Tm9kZS0+YmVnaW5Q
YXJzaW5nQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kaWRSZWZDdXJyZW50KTsK
LSAgICAgICAgICAgIG5ld05vZGUtPnJlZigpOyAKLSAgICAgICAgICAgIG1fY3VycmVudCA9IG5l
d05vZGU7Ci0gICAgICAgICAgICBtX2RpZFJlZkN1cnJlbnQgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNp
bmdGcmFnbWVudCkKLSAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNpbmdG
cmFnbWVudCkKLSAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICBuLT5maW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAobG9jYWxOYW1lID09IGh0bWxUYWcgJiYg
bV9kb2N1bWVudC0+ZnJhbWUoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgbV9k
b2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxh
YmxlKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpCi17Ci0gICAgLy8gRXJyb3IgaGFuZGxpbmcg
Y29kZS4gIFRoaXMgaXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50L2No
aWxkIGNvbWJpbmF0aW9ucy4KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotICAgIC8vIDEu
IENoZWNrIG91dCB0aGUgZWxlbWVudCdzIHRhZyBuYW1lIHRvIGRlY2lkZSBob3cgdG8gZGVhbCB3
aXRoIGVycm9ycy4KLSAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxF
bGVtZW50KiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKLSAgICAgICAgaWYgKGgt
Pmhhc0xvY2FsTmFtZSh0clRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRoVGFnKSB8fCBoLT5oYXNM
b2NhbE5hbWUodGRUYWcpKSB7Ci0gICAgICAgICAgICBpZiAobV9pblN0cmF5VGFibGVDb250ZW50
ICYmICFpc1RhYmxlUmVsYXRlZChtX2N1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0
RXJyb3IoTWlzcGxhY2VkVGFibGVQYXJ0RXJyb3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAvLyBwb3Agb3V0IHRvIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyB0YWJsZS1yZWxhdGVkIHRhZy4KLSAgICAgICAgICAgICAgICB3aGlsZSAobV9ibG9j
a1N0YWNrICYmICFpc1RhYmxlUmVsYXRlZChtX2N1cnJlbnQpKQotICAgICAgICAgICAgICAgICAg
ICBwb3BPbmVCbG9jaygpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShoZWFkVGFn
KSkgewotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIW1f
Y3VycmVudC0+aGFzVGFnTmFtZShodG1sVGFnKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVy
cm9yKE1pc3BsYWNlZEhlYWRFcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShtZXRhVGFn
KSB8fCBoLT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGJhc2VUYWcp
KSB7Ci0gICAgICAgICAgICBib29sIGNyZWF0ZWRIZWFkID0gZmFsc2U7Ci0gICAgICAgICAgICBp
ZiAoIW1faGVhZCkgewotICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAg
ICAgICBjcmVhdGVkSGVhZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bV9oZWFkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkSGVhZCkKLSAgICAgICAgICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZENvbnRlbnRFcnJvciwgJmxvY2FsTmFt
ZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChtX2hlYWQt
PmFkZENoaWxkKG4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAm
JiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFj
aCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShodG1sVGFnKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpICYmIG1fZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3Is
ICZsb2NhbE5hbWUpOwotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhU
TUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlz
dGluZyBhdHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAg
ICAgICAgICBFbGVtZW50KiBleGlzdGluZ0hUTUwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9k
b2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBOYW1lZE5v
ZGVNYXAqIGJtYXAgPSBleGlzdGluZ0hUTUwtPmF0dHJpYnV0ZXMoZmFsc2UpOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7
ICsrbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IG1hcC0+YXR0
cmlidXRlSXRlbShsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYm1hcC0+Z2V0QXR0
cmlidXRlSXRlbShpdC0+bmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlz
dGluZ0hUTUwtPnNldEF0dHJpYnV0ZShpdC0+bmFtZSgpLCBpdC0+dmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZSh0aXRsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBoLT5oYXNMb2NhbE5h
bWUoc2NyaXB0VGFnKSkgewotICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZhbHNlOwot
ICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7
Ci0gICAgICAgICAgICAgICAgY3JlYXRlZEhlYWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKG1faGVhZCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBt
X2hlYWQtPmFkZENoaWxkKG4pOwotICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkgewotICAg
ICAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShoLT50YWdRTmFtZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZWRIZWFkKQotICAgICAgICAgICAgICAgICAg
ICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkQ29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmbV9j
dXJyZW50LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
cHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIG5ld05v
ZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgc2V0Q3VycmVudChu
ZXdOb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJz
aW5nRnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1faW5C
b2R5KSB7Ci0gICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5hbWUoKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKGgtPmhhc0xvY2FsTmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgaWYgKG1faW5Cb2R5
ICYmIG1fZG9jdW1lbnQtPmJvZHkoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgewotICAgICAg
ICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8Qk9EWT4gZWxlbWVudC4uLi4gYXBwbHkgYXR0
cmlidXRlcyB0byBleGlzdGluZyBvbmUKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ug
ZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAg
ICAgIC8vIHNvbWUgc2l0ZXMgdXNlIDxib2R5IGJnY29sb3I9cmlnaHRjb2xvcj4uLi48Ym9keSBi
Z2NvbG9yPXdyb25nY29sb3I+Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoUmVkdW5kYW50
SFRNTEJvZHlFcnJvciwgJmxvY2FsTmFtZSk7Ci0gICAgICAgICAgICAgICAgTmFtZWROb2RlTWFw
KiBtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgRWxlbWVudCogZXhpc3RpbmdCb2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpOwot
ICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogYm1hcCA9IGV4aXN0aW5nQm9keS0+YXR0cmli
dXRlcyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYm
IGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKLSAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRl
KiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFi
bWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZXhpc3RpbmdCb2R5LT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwgaXQtPnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShh
cmVhVGFnKSkgewotICAgICAgICAgICAgaWYgKG1fY3VycmVudE1hcEVsZW1lbnQpIHsKLSAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRBcmVhRXJyb3IsICZtX2N1cnJlbnQtPmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50LT5hZGRDaGls
ZChuKTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5n
RnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGgt
Pmhhc0xvY2FsTmFtZShjb2xncm91cFRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGNhcHRpb25UYWcp
KSB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgewotICAgICAg
ICAgICAgICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sgJiYgaXNUYWJsZVBhcnQobV9jdXJyZW50KSkK
LSAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0Tm9kZShuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAobi0+aXNDb21tZW50Tm9kZSgpICYmICFtX2hlYWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIDIuIE5leHQgd2UgZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50
IHRvIGRvIHNvbWUgZnVydGhlciBlcnJvciBoYW5kbGluZy4KLSAgICBpZiAobV9jdXJyZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGggPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG1fY3VycmVudCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3Vy
cmVudFRhZ05hbWUgPSBoLT5sb2NhbE5hbWUoKTsKLSAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFt
ZShodG1sVGFnKSkgewotICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsdCA9IG4tPmlzSFRNTEVs
ZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obikgOiAwOwotICAgICAgICAgICAg
aWYgKGVsdCAmJiAoZWx0LT5oYXNMb2NhbE5hbWUoc2NyaXB0VGFnKSB8fCBlbHQtPmhhc0xvY2Fs
TmFtZShzdHlsZVRhZykgfHwKLSAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShtZXRh
VGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShsaW5rVGFnKSB8fAotICAgICAgICAgICAgICAgIGVs
dC0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoZW1iZWRUYWcp
IHx8Ci0gICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGVsdC0+
aGFzTG9jYWxOYW1lKGlzaW5kZXhUYWcpIHx8Ci0gICAgICAgICAgICAgICAgZWx0LT5oYXNMb2Nh
bE5hbWUoYmFzZVRhZykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUobV9oZWFkLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmICghbV9oYXZlRnJhbWVTZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgaGVhZCBleGlzdHMuCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBub3Qg
Zm9yIG9sZGVyIHZlcnNpb25zIG9mIE1haWwsIHdoZXJlIHRoZSBpbXBsaWNpdCA8aGVhZD4gaXNu
J3QgZXhwZWN0ZWQgLSA8cmRhcjovL3Byb2JsZW0vNjg2Mzc5NT4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZCht
X2RvY3VtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLQotICAg
ICAgICAgICAgICAgICAgICBwb3BCbG9jayhoZWFkVGFnKTsKLSAgICAgICAgICAgICAgICAgICAg
c3RhcnRCb2R5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEJvZHlFbGVt
ZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVwb3J0RXJyb3IoTWlzcGxhY2VkRnJhbWVzZXRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShoZWFkVGFn
KSkgewotICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoaHRtbFRhZykpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAgIGlm
ICghbV9oYXZlRnJhbWVTZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRU
YWdOYW1lID09IGhlYWRUYWcpOwotICAgICAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50
VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICAgICAg
ICAgICAgICBpbnNlcnROb2RlKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdl
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1l
c2V0Q29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYWRkcmVzc1RhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGZv
bnRUYWcpCi0gICAgICAgICAgICAgICAgICAgfHwgaC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8
fCBoLT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihN
aXNwbGFjZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsK
LSAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShjYXB0aW9uVGFn
KSkgewotICAgICAgICAgICAgLy8gSWxsZWdhbCBjb250ZW50IGluIGEgY2FwdGlvbi4gQ2xvc2Ug
dGhlIGNhcHRpb24gYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3Bs
YWNlZENhcHRpb25Db250ZW50RXJyb3IsICZsb2NhbE5hbWUpOwotICAgICAgICAgICAgcG9wQmxv
Y2soY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgaWYgKGlzVGFibGVQYXJ0KG4pKQotICAg
ICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4sIGZsYXQpOwotICAgICAgICB9IGVsc2Ug
aWYgKGgtPmhhc0xvY2FsTmFtZSh0YWJsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRyVGFnKSB8
fCBpc1RhYmxlU2VjdGlvbihoKSkgewotICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodGFi
bGVUYWcpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkVGFibGVFcnJv
ciwgJmN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobV9pc1BhcnNpbmdGcmFn
bWVudCAmJiAhaC0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
Ly8gZnJhZ21lbnQgbWF5IGNvbnRhaW4gdGFibGUgcGFydHMgd2l0aG91dCA8dGFibGU+IGFuY2Vz
dG9yLCBwb3AgdGhlbSBvbmUgYnkgb25lCi0gICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGgt
PmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBl
bmQgdGhlIHRhYmxlCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4u
YW5kIHN0YXJ0IGEgbmV3IG9uZQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9j
dXJyZW50OwotICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKLSAgICAgICAgICAgICAgICAvLyBBIHNjcmlwdCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBjdXJy
ZW50IG5vZGUncyBwYXJlbnQgZnJvbSB0aGUgRE9NCi0gICAgICAgICAgICAgICAgLy8gaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNwotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiB3ZSBzaG91bGQgZG8gcmVhbCByZWNvdmVyeSBoZXJlIGFuZCByZS1wYXJlbnQgd2l0
aCB0aGUgY29ycmVjdCBub2RlLgotICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgTm9kZSogZ3JhbmRw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZSh0clRh
ZykgJiYKLSAgICAgICAgICAgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKHBhcmVudCkgJiYgZ3Jh
bmRwYXJlbnQgJiYgZ3JhbmRwYXJlbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKSB8fAotICAgICAg
ICAgICAgICAgICAgICAgKCghbi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIW4tPmhhc1RhZ05hbWUo
dGhUYWcpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICFuLT5oYXNUYWdOYW1lKGZvcm1UYWcp
ICYmICFuLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUpICYm
Ci0gICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKSkgewot
ICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKSA/
IG5vZGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aGFzVGFnTmFtZSh0
clRhZykpID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOwotICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhbiBoYXBwZW4gd2l0aCBmcmFnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShuLCBub2RlLCBlYyk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZWMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydEVycm9yKFN0cmF5VGFibGVDb250ZW50RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50
VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgp
ICYmIHRhZ1ByaW9yaXR5ID4gMCAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmxh
dCAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9
IFRhZ1N0YXR1c0ZvcmJpZGRlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5TdHJheVRhYmxlQ29udGVudCsrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIWVjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQtPmhhc1Rh
Z05hbWUodHJUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihUYWJs
ZVBhcnRSZXF1aXJlZEVycm9yLCAmbG9jYWxOYW1lLCAmdGRUYWcubG9jYWxOYW1lKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MVGFibGVDZWxsRWxlbWVudDo6Y3Jl
YXRlKHRkVGFnLCBtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9jdXJyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgcmVwb3J0IGFuIGVycm9yIGluIHRoaXMgY2FzZSwgc2luY2UgbWFr
aW5nIGEgPHRib2R5PiBoYXBwZW5zIGFsbCB0aGUgdGltZSB3aGVuIHlvdSBoYXZlIDx0YWJsZT48
dHI+LAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IGlzbid0IHJlYWxseSBhIHBh
cnNlIGVycm9yIHBlciBzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNyZWF0ZSh0Ym9keVRhZywgbV9kb2N1bWVudCkuZ2V0KCkp
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVwb3J0RXJyb3IoVGFibGVQYXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRyVGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRhYmxl
Um93RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKG9i
amVjdFRhZykpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRy
eUVycm9yLCAmbG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgcG9wQmxv
Y2sob2JqZWN0VGFnKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShwVGFnKSB8fCBpc0hlYWRpbmdUYWcoY3VycmVudFRhZ05h
bWUpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSW5saW5lKG4pKSB7Ci0gICAgICAgICAgICAgICAg
cG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShvcHRp
b25UYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShvcHRncm91cFRhZykpIHsKLSAgICAgICAgICAgIGlm
IChsb2NhbE5hbWUgPT0gb3B0Z3JvdXBUYWcpIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhj
dXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAgICAg
ICAvLyBJRSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4gTGV0J3MgZG8gdGhl
IHNhbWUKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAg
ICAgICAgICBpZiAobG9jYWxOYW1lID09IGlucHV0VGFnIHx8IGxvY2FsTmFtZSA9PSB0ZXh0YXJl
YVRhZykgewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRy
eUVycm9yLCAmbG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoY29sZ3Jv
dXBUYWcpKSB7Ci0gICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICghaC0+aGFzTG9jYWxOYW1l
KGJvZHlUYWcpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxpbmUobV9jdXJyZW50KSkgewotICAg
ICAgICAgICAgICAgIHBvcElubGluZUJsb2NrcygpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2N1cnJl
bnQtPmlzRG9jdW1lbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewot
ICAgICAgICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKLSAgICAgICAgICAg
IGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKSkgewotICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0
ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIDMuIElmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJyb3Is
IGp1c3QgcmV0dXJuIGZhbHNlIGFuZCBhdHRlbXB0IHRvIGVycm9yLWNvcnJlY3QgYWdhaW4uCi0g
ICAgaWYgKCFoYW5kbGVkKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKElnbm9yZWRDb250ZW50RXJy
b3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKLX0KLQotdHlwZWRlZiBi
b29sIChMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjoqQ3JlYXRlRXJyb3JDaGVja0Z1bmMpKFRv
a2VuKiB0LCBSZWZQdHI8Tm9kZT4mKTsKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgQ3JlYXRlRXJyb3JDaGVja0Z1bmM+IEZ1bmN0aW9uTWFwOwotCi1ib29sIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKLXsKLSAgICByZXN1bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+
dGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKLXsKLSAgICByZXN1bHQgPSBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwg
dC0+dGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OmhlYWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
JiByZXN1bHQpCi17Ci0gICAgaWYgKCFtX2hlYWQgfHwgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9
PSBodG1sVGFnKSB7Ci0gICAgICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1f
ZG9jdW1lbnQpOwotICAgICAgICByZXN1bHQgPSBtX2hlYWQ7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRFcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlm
IHdlIGhhdmUgYSBmcmFtZXNldAotICAgIGlmIChtX2hhdmVGcmFtZVNldCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEVuc3VyZSB0aGF0IGhlYWQgZXhpc3RzICh1bmxlc3Mg
cGFyc2luZyBhIGZyYWdtZW50KS4KLSAgICAvLyBCdXQgbm90IGZvciBvbGRlciB2ZXJzaW9ucyBv
ZiBNYWlsLCB3aGVyZSB0aGUgaW1wbGljaXQgPGhlYWQ+IGlzbid0IGV4cGVjdGVkIC0gPHJkYXI6
Ly9wcm9ibGVtLzY4NjM3OTU+Ci0gICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHNob3Vs
ZENyZWF0ZUltcGxpY2l0SGVhZChtX2RvY3VtZW50KSkKLSAgICAgICAgY3JlYXRlSGVhZCgpOwot
ICAgIAotICAgIHBvcEJsb2NrKGhlYWRUYWcpOwotICAgIHN0YXJ0Qm9keSgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxvY2soaGVh
ZFRhZyk7Ci0gICAgaWYgKG1faW5Cb2R5ICYmICFtX2hhdmVGcmFtZVNldCAmJiAhbV9oYXZlQ29u
dGVudCkgewotICAgICAgICBwb3BCbG9jayhib2R5VGFnKTsKLSAgICAgICAgLy8gIyMjIGFjdHVh
bGx5IGZvciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVs
ZW1lbnQKLSAgICAgICAgLy8gd2UgY2FuJ3QgaW1wbGVtZW50IHRoYXQgYmVoYXZpb3VyIG5vdyBi
ZWNhdXNlIGl0IGNvdWxkIGNhdXNlIHRvbyBtYW55Ci0gICAgICAgIC8vIHJlZ3Jlc3Npb25zIGFu
ZCB0aGUgaGVhZGFjaGVzIGFyZSBub3Qgd29ydGggdGhlIHdvcmsgYXMgbG9uZyBhcyB0aGVyZSBp
cwotICAgICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcgb24gdGhhdCBkZXRhaWwgKERp
cmspCi0gICAgICAgIGlmIChtX2RvY3VtZW50LT5ib2R5KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21l
bnQpCi0gICAgICAgICAgICBtX2RvY3VtZW50LT5ib2R5KCktPnNldEF0dHJpYnV0ZShzdHlsZUF0
dHIsICJkaXNwbGF5Om5vbmUiKTsKLSAgICAgICAgbV9pbkJvZHkgPSBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKChtX2hhdmVDb250ZW50IHx8IG1faGF2ZUZyYW1lU2V0KSAmJiBtX2N1cnJlbnQtPmxv
Y2FsTmFtZSgpID09IGh0bWxUYWcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2hhdmVG
cmFtZVNldCA9IHRydWU7Ci0gICAgc3RhcnRCb2R5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQotewotICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3
IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAvLyBUaGlzIGlzIGNv
bnNpc3RlbnQgd2l0aCBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCi0gICAgaWYgKCFtX2N1cnJl
bnRGb3JtRWxlbWVudCkgewotICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9IEhUTUxGb3Jt
RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRG
b3JtRWxlbWVudDsKLSAgICAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgaWYg
KCFtX2luQm9keSkKLSAgICAgICAgbV9pc2luZGV4RWxlbWVudCA9IG4ucmVsZWFzZSgpOwotICAg
IGVsc2UgewotICAgICAgICB0LT5zZWxmQ2xvc2luZ1RhZyA9IHRydWU7Ci0gICAgICAgIHJlc3Vs
dCA9IG4ucmVsZWFzZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4m
IHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayh0LCByZXN1bHQpOwotICAg
IHBvcEJsb2NrKGR0VGFnKTsKLSAgICBwb3BCbG9jayhkZFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZHRDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJy
b3JDaGVjayh0LCByZXN1bHQpOwotICAgIHBvcEJsb2NrKGRkVGFnKTsKLSAgICBwb3BCbG9jayhk
dFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6cnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBw
b3BCbG9jayhycFRhZyk7Ci0gICAgcG9wQmxvY2socnRUYWcpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxvY2socnBUYWcpOwotICAgIHBvcEJs
b2NrKHJ0VGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4m
KQotewotICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBDbG9zZXJDcmVhdGVFcnJvckNo
ZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRl
RXJyb3JDaGVjayh0LCByZXN1bHQpOwotICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFN0
eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICByZXR1
cm4gYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSk7Ci19Ci0KLWJvb2wgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxvY2sodGRUYWcpOwotICAgIHBvcEJsb2NrKHRoVGFn
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
Ojp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsK
LSAgICBwb3BCbG9jayh0aGVhZFRhZyk7Ci0gICAgcG9wQmxvY2sodGJvZHlUYWcpOwotICAgIHBv
cEJsb2NrKHRmb290VGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpCi17Ci0gICAgc2V0U2tpcE1vZGUobm9lbWJlZFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXNDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBzZXRTa2lwTW9kZShub2ZyYW1l
c1RhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsK
LSAgICBpZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0g
bV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQo
KS0+Y2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAg
ICAgc2V0U2tpcE1vZGUobm9zY3JpcHRUYWcpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgp
KQotICAgICAgICBwb3BCbG9jayhwVGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmluQ29tcGF0TW9k
ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaGFzUEVsZW1lbnRJblNjb3BlKCkp
Ci0gICAgICAgIHBvcEJsb2NrKHBUYWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gSFRNTE1hcEVs
ZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVt
ZW50OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgbWFwVGFnVG9GdW5jKEZ1
bmN0aW9uTWFwJiBtYXAsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ3JlYXRlRXJyb3JDaGVj
a0Z1bmMgZnVuYykKLXsKLSAgICBtYXAuc2V0KHRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGZ1bmMp
OwotfQotCi10ZW1wbGF0ZTwgc2l6ZV90IEFycmF5U2l6ZSA+Ci1zdGF0aWMgdm9pZCBtYXBUYWdz
VG9GdW5jKEZ1bmN0aW9uTWFwJiBtYXAsIFF1YWxpZmllZE5hbWUgKCZuYW1lcylbQXJyYXlTaXpl
XSwgQ3JlYXRlRXJyb3JDaGVja0Z1bmMgZnVuYykKLXsKLSAgICBmb3IgKHNpemVfdCB4ID0gMDsg
eCA8IEFycmF5U2l6ZTsgeCsrKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUg
PSBuYW1lc1t4XTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKG1hcCwgbmFtZSwgZnVuYyk7Ci0gICAg
fQotfQotCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmdldE5v
ZGUoVG9rZW4qIHQpCi17Ci0gICAgLy8gSW5pdCBvdXIgZXJyb3IgaGFuZGxpbmcgdGFibGUuCi0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgZ0Z1bmN0aW9uTWFwLCAoKSk7Ci0g
ICAgaWYgKGdGdW5jdGlvbk1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVkTmFtZSBu
ZXN0ZWRDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYVRhZywgYnV0dG9uVGFnLCBub2JyVGFnLCB0clRh
ZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgbmVzdGVkQ3JlYXRlRXJy
b3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVj
ayk7Ci0KLSAgICAgICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yVGFnc1td
ID0geyBiVGFnLCBiaWdUYWcsIGlUYWcsIHNUYWcsIHNtYWxsVGFnLCBzdHJpa2VUYWcsIHR0VGFn
LCB1VGFnIH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBuZXN0ZWRTdHls
ZUNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFN0eWxl
Q3JlYXRlRXJyb3JDaGVjayk7Ci0KLSAgICAgICAgUXVhbGlmaWVkTmFtZSBwQ2xvc2VyQ3JlYXRl
RXJyb3JUYWdzW10gPSB7IGFkZHJlc3NUYWcsIGFydGljbGVUYWcsCi0gICAgICAgICAgICBhc2lk
ZVRhZywgYmxvY2txdW90ZVRhZywgY2VudGVyVGFnLCBkaXJUYWcsIGRpdlRhZywgZGxUYWcsCi0g
ICAgICAgICAgICBmaWVsZHNldFRhZywgZm9vdGVyVGFnLCBoMVRhZywgaDJUYWcsIGgzVGFnLCBo
NFRhZywgaDVUYWcsIGg2VGFnLAotICAgICAgICAgICAgaGVhZGVyVGFnLCBoZ3JvdXBUYWcsIGhy
VGFnLCBsaXN0aW5nVGFnLCBtZW51VGFnLCBuYXZUYWcsIG9sVGFnLAotICAgICAgICAgICAgcFRh
ZywgcGxhaW50ZXh0VGFnLCBwcmVUYWcsIHNlY3Rpb25UYWcsIHVsVGFnIH07Ci0gICAgICAgIG1h
cFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBwQ2xvc2VyQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwotCi0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGJvZHlUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpib2R5Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIGRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJv
ckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZHRUYWcsICZMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpkdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBU
YWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBmb3JtVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBmcmFtZXNldFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0Q3Jl
YXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGhlYWRU
YWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk7Ci0g
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGlzaW5kZXhUYWcsICZMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRh
Z1RvRnVuYyhnRnVuY3Rpb25NYXAsIG1hcFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
Om1hcENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBsaVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBDbG9zZXJDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9lbWJlZFRh
ZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKTsK
LSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9mcmFtZXNUYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBt
YXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub3NjcmlwdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIHRhYmxlVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENs
b3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0
aW9uTWFwLCBycFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJwQ3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJ0VGFnLCAmTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgc2VsZWN0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rp
b25NYXAsIHRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRl
RXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoVGFnLCAm
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7Ci0g
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRib2R5VGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1h
cFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRmb290VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIHRoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFi
bGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0KLSAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChj
b21tZW50QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjb21tZW50Q3Jl
YXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5zZXQodGV4dEF0b20uaW1wbCgp
LCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2spOwotICAg
IH0KLQotICAgIGJvb2wgcHJvY2VlZCA9IHRydWU7Ci0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsK
LSAgICBpZiAoQ3JlYXRlRXJyb3JDaGVja0Z1bmMgZXJyb3JDaGVja0Z1bmMgPSBnRnVuY3Rpb25N
YXAuZ2V0KHQtPnRhZ05hbWUuaW1wbCgpKSkKLSAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qZXJy
b3JDaGVja0Z1bmMpKHQsIHJlc3VsdCk7Ci0gICAgaWYgKHByb2NlZWQpCi0gICAgICAgIHJlc3Vs
dCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgdC0+dGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBtX2RvY3VtZW50LCBtX2N1
cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19
Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRU
YWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQotewotICAgIC8vIHd3dy5saWNlby5lZHUu
bXggaXMgYW4gZXhhbXBsZSBvZiBhIHNpdGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rp
bmcgb2YKLSAgICAvLyBhYm91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4g
IFdlIHdpbGwgb25seSBhbGxvdyBhdCBtb3N0IDIwCi0gICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhl
IHNhbWUgdHlwZSBiZWZvcmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KLSAgICB1
bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBtX2Jsb2NrU3Rh
Y2s7Ci0gICAgICAgICBpIDwgY01heFJlZHVuZGFudFRhZ0RlcHRoICYmIGN1cnIgJiYgY3Vyci0+
dGFnTmFtZSA9PSB0YWdOYW1lOwotICAgICAgICAgY3VyciA9IGN1cnItPm5leHQsIGkrKykgeyB9
Ci0gICAgcmV0dXJuIGkgIT0gY01heFJlZHVuZGFudFRhZ0RlcHRoOwotfQotCi12b2lkIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiogdCkKLXsKLSAgICAv
LyBTdXBwb3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuCi0gICAgLy8gd2UgbmV2ZXIgY2xvc2Ug
dGhlIGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3Jl
IHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2MuCi0gICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5k
KCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCi0gICAgaWYgKHQtPnRhZ05hbWUgPT0gaHRtbFRhZyB8
fCB0LT50YWdOYW1lID09IGJvZHlUYWcgfHwgdC0+dGFnTmFtZSA9PSBjb21tZW50QXRvbSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgY2hlY2tGb3JDbG9zZVRhZ0Vycm9ycyA9IHRy
dWU7Ci0gICAgaWYgKHQtPnRhZ05hbWUgPT0gZm9ybVRhZyAmJiBtX2N1cnJlbnRGb3JtRWxlbWVu
dCkgewotICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9IDA7Ci0gICAgICAgIGNoZWNrRm9y
Q2xvc2VUYWdFcnJvcnMgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gbWFw
VGFnKQotICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gMDsKLSAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IHBUYWcpCi0gICAgICAgIGNoZWNrRm9yQ2xvc2VUYWdFcnJvcnMgPSBmYWxzZTsK
LSAgICAgICAgCi0gICAgSFRNTFN0YWNrRWxlbSogb2xkRWxlbSA9IG1fYmxvY2tTdGFjazsKLSAg
ICBwb3BCbG9jayh0LT50YWdOYW1lLCBjaGVja0ZvckNsb3NlVGFnRXJyb3JzKTsKLSAgICBpZiAo
b2xkRWxlbSA9PSBtX2Jsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBwVGFnKSB7Ci0gICAgICAg
IC8vIFdlIGVuY291bnRlcmVkIGEgc3RyYXkgPC9wPi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUs
IGFuZCBNYWNJRSBhbGwgdHJlYXQKLSAgICAgICAgLy8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBp
LmUuLCA8cD48L3A+LiAgU28gZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGVtcHR5Ci0gICAgICAgIC8v
IHBhcmFncmFwaC4KLSAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwotICAgICAgICBwYXJzZVRv
a2VuKHQpOwotICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICAgICAgcmVwb3J0RXJy
b3IoU3RyYXlQYXJhZ3JhcGhDbG9zZUVycm9yKTsKLSAgICB9Ci19Ci0KLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6aXNIZWFkaW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRhZ05hbWVTZXQsIGhlYWRpbmdUYWdzLCAo
KSk7Ci0gICAgaWYgKGhlYWRpbmdUYWdzLmlzRW1wdHkoKSkgewotICAgICAgICBRdWFsaWZpZWRO
YW1lIHRhZ05hbWVzW10gPSB7IGgxVGFnLCBoMlRhZywgaDNUYWcsIGg0VGFnLCBoNVRhZywgaDZU
YWcgfTsKLSAgICAgICAgYWRkVGFncyhoZWFkaW5nVGFncywgdGFnTmFtZXMpOwotICAgIH0KLSAg
ICByZXR1cm4gaGVhZGluZ1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsKCkpOwotfQotCi1ib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0Ci17
Ci0gICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShhVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9udFRhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KHR0VGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHVUYWcpIHx8IGUtPmhhc0xv
Y2FsTmFtZShiVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoaVRhZykgfHwKLSAgICAgICAgICAgIGUt
Pmhhc0xvY2FsTmFtZShzVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3RyaWtlVGFnKSB8fCBlLT5o
YXNMb2NhbE5hbWUoYmlnVGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHNtYWxs
VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzdHJvbmdU
YWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZGZuVGFnKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoY29kZVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHNhbXBUYWcpIHx8Ci0gICAgICAgICAg
ICBlLT5oYXNMb2NhbE5hbWUoa2JkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUodmFyVGFnKSB8fCBl
LT5oYXNMb2NhbE5hbWUoY2l0ZVRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShh
YmJyVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYWNyb255bVRhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KHN1YlRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzdXBUYWcpIHx8IGUtPmhh
c0xvY2FsTmFtZShzcGFuVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9iclRhZykgfHwKLSAgICAg
ICAgICAgIGUtPmhhc0xvY2FsTmFtZShub2ZyYW1lc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5v
bGF5ZXJUYWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNpZiAhRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7
Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgICAg
ICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoTm90
QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiwgcmVzaWR1YWxTdHlsZVRhZ3MsICgpKTsKLSAgICBpZiAocmVzaWR1
YWxTdHlsZVRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZXNb
XSA9IHsgYVRhZywgZm9udFRhZywgdHRUYWcsIHVUYWcsIGJUYWcsIGlUYWcsCi0gICAgICAgICAg
ICBzVGFnLCBzdHJpa2VUYWcsIGJpZ1RhZywgc21hbGxUYWcsIGVtVGFnLCBzdHJvbmdUYWcsIGRm
blRhZywKLSAgICAgICAgICAgIGNvZGVUYWcsIHNhbXBUYWcsIGtiZFRhZywgdmFyVGFnLCBub2Jy
VGFnIH07Ci0gICAgICAgIGFkZFRhZ3MocmVzaWR1YWxTdHlsZVRhZ3MsIHRhZ05hbWVzKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgp
KTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0FmZmVjdGVkQnlSZXNp
ZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCB1bmFmZmVjdGVkVGFncywgKCkp
OwotICAgIGlmICh1bmFmZmVjdGVkVGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVk
TmFtZSB0YWdOYW1lc1tdID0geyBib2R5VGFnLCB0YWJsZVRhZywgdGhlYWRUYWcsIHRib2R5VGFn
LAotICAgICAgICAgICAgdGZvb3RUYWcsIHRyVGFnLCB0aFRhZywgdGRUYWcsIGNhcHRpb25UYWcs
IGNvbGdyb3VwVGFnLCBjb2xUYWcsCi0gICAgICAgICAgICBvcHRpb25UYWcsIG9wdGdyb3VwVGFn
LCBzZWxlY3RUYWcsIG9iamVjdFRhZywgZGF0YWdyaWRUYWcsIGRhdGFsaXN0VGFnIH07Ci0gICAg
ICAgIGFkZFRhZ3ModW5hZmZlY3RlZFRhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0gICAgcmV0dXJu
ICF1bmFmZmVjdGVkVGFncy5jb250YWlucyh0YWdOYW1lLmltcGwoKSk7Ci19Ci0KLXZvaWQgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3Nz
QmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCi17Ci0gICAgSFRNTFN0YWNrRWxlbSogbWF4RWxl
bSA9IDA7Ci0gICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOwotICAgIGJvb2wgc3RyYXlUYWJsZUNv
bnRlbnQgPSBlbGVtLT5zdHJheVRhYmxlQ29udGVudDsKLQotICAgIHVuc2lnbmVkIGl0ZXJhdGlv
bkNvdW50ID0gMDsKLQotICAgIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzID0g
dHJ1ZTsKLSAgICB3aGlsZSAoIWZpbmlzaGVkICYmIChpdGVyYXRpb25Db3VudCsrIDwgY1Jlc2lk
dWFsU3R5bGVJdGVyYXRpb25MaW1pdCkpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgb3V0ZXJtb3N0
IGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwuIElmIHRoZXJlIGV4
aXN0cyBhbm90aGVyIGhpZ2hlci1sZXZlbAotICAgICAgICAvLyBlbGVtZW50LCB3ZSB3aWxsIGRv
IGFub3RoZXIgcGFzcywgdW50aWwgd2UgaGF2ZSBjb3JyZWN0ZWQgdGhlIGlubmVybW9zdCBvbmUu
Ci0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBIVE1MU3RhY2tFbGVtKiBj
dXJyID0gbV9ibG9ja1N0YWNrOwotICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2ID0gMDsKLSAg
ICAgICAgSFRNTFN0YWNrRWxlbSogcHJldk1heEVsZW0gPSAwOwotICAgICAgICBtYXhFbGVtID0g
MDsKLSAgICAgICAgZmluaXNoZWQgPSB0cnVlOwotICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJy
ICE9IGVsZW0pIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5sZXZlbCA+IGVsZW0tPmxldmVsKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGN1cnItPnRh
Z05hbWUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYg
KG1heEVsZW0pCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbmVlZCBhbm90aGVyIHBh
c3MuCi0gICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgbWF4RWxlbSA9IGN1cnI7Ci0gICAgICAgICAgICAgICAgcHJldk1heEVsZW0gPSBwcmV2Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmV2ID0gY3VycjsKLSAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjdXJyIHx8ICFtYXhF
bGVtKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE5vZGUqIHJlc2lkdWFsRWxlbSA9
IHByZXYtPm5vZGU7Ci0gICAgICAgIE5vZGUqIGJsb2NrRWxlbSA9IHByZXZNYXhFbGVtID8gcHJl
dk1heEVsZW0tPm5vZGUgOiBtX2N1cnJlbnQ7Ci0gICAgICAgIE5vZGUqIHBhcmVudEVsZW0gPSBl
bGVtLT5ub2RlOwotCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVwYXJlbnRpbmcg
dGhhdCBpcyBnb2luZyB0byBvY2N1ciBpcyBhbGxvd2VkIGFjY29yZGluZyB0byB0aGUgRE9NLgot
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGVpdGhlciBhbHdheXMgYWxsb3cgaXQgb3IgcGVy
Zm9ybSBhbiBhZGRpdGlvbmFsIGZpeHVwIGluc3RlYWQgb2YKLSAgICAgICAgLy8ganVzdCBiYWls
aW5nIGhlcmUuCi0gICAgICAgIC8vIEV4YW1wbGU6IDxwPjxmb250PjxjZW50ZXI+YmxhaDwvZm9u
dD48L2NlbnRlcj48L3A+IGlzbid0IGRvaW5nIGEgZml4dXAgcmlnaHQgbm93LgotICAgICAgICBp
ZiAoIXBhcmVudEVsZW0tPmNoaWxkQWxsb3dlZChibG9ja0VsZW0pKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gVW5rbm93bjsKLQotICAgICAg
ICBpZiAobWF4RWxlbS0+bm9kZS0+cGFyZW50Tm9kZSgpICE9IGVsZW0tPm5vZGUpIHsKLSAgICAg
ICAgICAgIC8vIFdhbGsgdGhlIHN0YWNrIGFuZCByZW1vdmUgYW55IGVsZW1lbnRzIHRoYXQgYXJl
bid0IHJlc2lkdWFsIHN0eWxlIHRhZ3MuICBUaGVzZQotICAgICAgICAgICAgLy8gYXJlIGJhc2lj
YWxseSBqdXN0IGJlaW5nIGNsb3NlZCB1cC4gIEV4YW1wbGU6Ci0gICAgICAgICAgICAvLyA8Zm9u
dD48c3Bhbj5Nb288cD5Hb288L2ZvbnQ+PC9wPi4KLSAgICAgICAgICAgIC8vIEluIHRoZSBhYm92
ZSBleGFtcGxlLCB0aGUgPHNwYW4+IGRvZXNuJ3QgbmVlZCB0byBiZSByZW9wZW5lZC4gIEl0IGNh
biBqdXN0IGNsb3NlLgotICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogY3VyckVsZW0gPSBtYXhF
bGVtLT5uZXh0OwotICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0gPSBtYXhFbGVt
OwotICAgICAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKLSAgICAgICAgICAgICAg
ICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAg
ICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT50YWdOYW1lKSkgewotICAgICAg
ICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IG5leHRFbGVtOwotICAgICAgICAgICAgICAg
ICAgICBwcmV2RWxlbS0+ZGVyZWZOb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZFbGVt
LT5ub2RlID0gY3VyckVsZW0tPm5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZFbGVtLT5k
aWRSZWZOb2RlID0gY3VyckVsZW0tPmRpZFJlZk5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBjdXJyRWxlbTsKLSAgICAgICAgICAgICAgICAgICAgbV90cmVlRGVwdGgtLTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0gPSBjdXJyRWxl
bTsKLSAgICAgICAgICAgICAgICBjdXJyRWxlbSA9IG5leHRFbGVtOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHJlb3BlbiByZXNpZHVhbCB0YWdzIGluIGJldHdl
ZW4gbWF4RWxlbSBhbmQgZWxlbS4gIEFuIGV4YW1wbGUgb2YgdGhpcyBjYXNlIGlzOgotICAgICAg
ICAgICAgLy8gPGZvbnQ+PGk+TW9vPHA+Rm9vPC9mb250Pi4KLSAgICAgICAgICAgIC8vIEluIHRo
aXMgY2FzZSwgd2UgbmVlZCB0byB0cmFuc2Zvcm0gdGhlIHBhcnQgYmVmb3JlIHRoZSA8cD4gaW50
bzoKLSAgICAgICAgICAgIC8vIDxmb250PjxpPk1vbzwvaT48L2ZvbnQ+PGk+Ci0gICAgICAgICAg
ICAvLyBzbyB0aGF0IHRoZSA8aT4gd2lsbCByZW1haW4gb3Blbi4gIFRoaXMgaW52b2x2ZXMgdGhl
IG1vZGlmaWNhdGlvbiBvZiBlbGVtZW50cwotICAgICAgICAgICAgLy8gaW4gdGhlIGJsb2NrIHN0
YWNrLgotICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsc28gYWZmZWN0IGhvdyB3ZSB1bHRpbWF0
ZWx5IHJlcGFyZW50IHRoZSBibG9jaywgc2luY2Ugd2Ugd2FudCBpdCB0byBlbmQgdXAKLSAgICAg
ICAgICAgIC8vIHVuZGVyIHRoZSByZW9wZW5lZCByZXNpZHVhbCB0YWdzIChlLmcuLCB0aGUgPGk+
IGluIHRoZSBhYm92ZSBleGFtcGxlLikKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2Tm9k
ZSA9IDA7Ci0gICAgICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07Ci0gICAgICAgICAgICB3aGls
ZSAoY3VyckVsZW0tPm5vZGUgIT0gcmVzaWR1YWxFbGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+bm9kZS0+bG9jYWxOYW1lKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgZWxlbWVudC4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgY2FsbCByZWxlYXNlUmVmIHRvIGdldCBhIHJhdyBwb2ludGVy
IHNpbmNlIHdlIHBsYW4gdG8gaGFuZCBvdmVyIG93bmVyc2hpcCB0byBjdXJyRWxlbS4KLSAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2Rl
KGZhbHNlKS5yZWxlYXNlUmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJl
c2lkdWFsU3R5bGVFcnJvciwgJmN1cnJOb2RlLT5sb2NhbE5hbWUoKSk7Ci0gICAgCi0gICAgICAg
ICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgc3RhY2sgZWxlbWVudCdzIG5vZGUgdG8gcG9pbnQg
dG8gdGhlIGNsb25lLgotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3RhY2sgZWxlbWVudCBh
ZG9wdHMgdGhlIHJlZmVyZW5jZSB3ZSBvYnRhaW5lZCBhYm92ZSBieSBjYWxsaW5nIHJlbGVhc2Uo
KS4KLSAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICAg
ICAgICAgICAgICBjdXJyRWxlbS0+bm9kZSA9IGN1cnJOb2RlOwotICAgICAgICAgICAgICAgICAg
ICBjdXJyRWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
QXR0YWNoIHRoZSBwcmV2aW91cyBub2RlIGFzIGEgY2hpbGQgb2YgdGhpcyBuZXcgbm9kZS4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y3Vyck5vZGUtPmFwcGVuZENoaWxkKHByZXZOb2RlLCBlYyk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgLy8gVGhlIG5ldyBwYXJlbnQgZm9yIHRoZSBibG9jayBlbGVtZW50IGlzIGdvaW5nIHRv
IGJlIHRoZSBpbm5lcm1vc3QgY2xvbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRF
bGVtID0gY3Vyck5vZGU7ICAvLyBGSVhNRTogV2Ugc2hpZnRlZCBwYXJlbnRFbGVtIHRvIGJlIGEg
cmVzaWR1YWwgaW5saW5lLiAgV2UgbmV2ZXIgY2hlY2tlZCB0byBzZWUgaWYgYmxvY2tFbGVtIGNv
dWxkIGJlIGxlZ2FsbHkgcGxhY2VkIGluc2lkZSB0aGUgaW5saW5lIHRob3VnaC4KLQotICAgICAg
ICAgICAgICAgICAgICBwcmV2Tm9kZSA9IGN1cnJOb2RlOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGN1cnJFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGNoYWluIG9mIG5ldyByZXNpZHVhbCBz
dHlsZSBlbGVtZW50cyBpZiBvbmUgZXhpc3RzLgotICAgICAgICAgICAgaWYgKHByZXZOb2RlKQot
ICAgICAgICAgICAgICAgIGVsZW0tPm5vZGUtPmFwcGVuZENoaWxkKHByZXZOb2RlLCBlYyk7ICAv
LyBGSVhNRTogVGhpcyBhcHBlbmQgY2FuIHJlc3VsdCBpbiB3ZWlyZCBzdHVmZiBoYXBwZW5pbmcs
IGxpa2UgYW4gaW5saW5lIGNoYWluIGJlaW5nIHB1dCBpbnRvIGEgdGFibGUgc2VjdGlvbi4KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibG9jayBpcyBzdGlsbCBpbiB0aGUg
dHJlZS4gSWYgaXQgaXNuJ3QsIHRoZW4gd2UgZG9uJ3QKLSAgICAgICAgLy8gd2FudCB0byByZW1v
dmUgaXQgZnJvbSBpdHMgcGFyZW50ICh0aGF0IHdvdWxkIGNyYXNoKSBvciBpbnNlcnQgaXQgaW50
bwotICAgICAgICAvLyBhIG5ldyBwYXJlbnQgbGF0ZXIuIFNlZSBodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc4Ci0gICAgICAgIGJvb2wgaXNCbG9ja1N0aWxsSW5UcmVl
ID0gYmxvY2tFbGVtLT5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtl
IGEgY2xvbmUgb2YgfHJlc2lkdWFsRWxlbXwgYW5kIHBsYWNlIGl0IGp1c3QgaW5zaWRlIHxibG9j
a0VsZW18LgotICAgICAgICAvLyBBbGwgY29udGVudCBvZiB8YmxvY2tFbGVtfCBpcyByZXBhcmVu
dGVkIHRvIGJlIHVuZGVyIHRoaXMgY2xvbmUuICBXZSB0aGVuCi0gICAgICAgIC8vIHJlcGFyZW50
IHxibG9ja0VsZW18IHVzaW5nIHJlYWwgRE9NIGNhbGxzIHNvIHRoYXQgYXR0YWNobWVudC9kZXRh
Y2htZW50IHdpbGwKLSAgICAgICAgLy8gYmUgcGVyZm9ybWVkIHRvIGZpeCB1cCB0aGUgcmVuZGVy
aW5nIHRyZWUuCi0gICAgICAgIC8vIFNvIGZvciB0aGlzIGV4YW1wbGU6IDxiPi4uLjxwPkZvbzwv
Yj5Hb288L3A+Ci0gICAgICAgIC8vIFRoZSBlbmQgcmVzdWx0IHdpbGwgYmU6IDxiPi4uLjwvYj48
cD48Yj5Gb288L2I+R29vPC9wPgotICAgICAgICAvLwotICAgICAgICAvLyBTdGVwIDE6IFJlbW92
ZSB8YmxvY2tFbGVtfCBmcm9tIGl0cyBwYXJlbnQsIGRvaW5nIGEgYmF0Y2ggZGV0YWNoIG9mIGFs
bCB0aGUga2lkcy4KLSAgICAgICAgaWYgKGlzQmxvY2tTdGlsbEluVHJlZSkKLSAgICAgICAgICAg
IGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChibG9ja0VsZW0sIGVjKTsKLQot
ICAgICAgICBOb2RlKiBuZXdOb2RlUHRyID0gMDsKLSAgICAgICAgaWYgKGJsb2NrRWxlbS0+Zmly
c3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICAvLyBTdGVwIDI6IENsb25lIHxyZXNpZHVhbEVsZW18
LgotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSByZXNpZHVhbEVsZW0tPmNsb25l
Tm9kZShmYWxzZSk7IC8vIFNoYWxsb3cgY2xvbmUuIFdlIGRvbid0IHBpY2sgdXAgdGhlIHNhbWUg
a2lkcy4KLSAgICAgICAgICAgIG5ld05vZGVQdHIgPSBuZXdOb2RlLmdldCgpOwotICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoUmVzaWR1YWxTdHlsZUVycm9yLCAmbmV3Tm9kZS0+bG9jYWxOYW1lKCkp
OwotCi0gICAgICAgICAgICAvLyBTdGVwIDM6IFBsYWNlIHxibG9ja0VsZW18J3MgY2hpbGRyZW4g
dW5kZXIgfG5ld05vZGV8LiAgUmVtb3ZlIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgfGJsb2NrRWxl
bXwKLSAgICAgICAgICAgIC8vIGJlZm9yZSB3ZSd2ZSBwdXQgfG5ld0VsZW18IGludG8gdGhlIGRv
Y3VtZW50LiAgVGhhdCB3YXkgd2UnbGwgb25seSBkbyBvbmUgYXR0YWNobWVudCBvZiBhbGwKLSAg
ICAgICAgICAgIC8vIHRoZSBuZXcgY29udGVudCAoaW5zdGVhZCBvZiBhIGJ1bmNoIG9mIGluZGl2
aWR1YWwgYXR0YWNobWVudHMpLgotICAgICAgICAgICAgTm9kZSogY3Vyck5vZGUgPSBibG9ja0Vs
ZW0tPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyTm9kZSkgewotICAgICAg
ICAgICAgICAgIE5vZGUqIG5leHROb2RlID0gY3Vyck5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAg
ICAgICAgICAgICAgbmV3Tm9kZS0+YXBwZW5kQ2hpbGQoY3Vyck5vZGUsIGVjKTsKLSAgICAgICAg
ICAgICAgICBjdXJyTm9kZSA9IG5leHROb2RlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBTdGVwIDQ6IFBsYWNlIHxuZXdOb2RlfCB1bmRlciB8YmxvY2tFbGVtfC4gIHxibG9ja0Vs
ZW18IGlzIHN0aWxsIG91dCBvZiB0aGUgZG9jdW1lbnQsIHNvIG5vCi0gICAgICAgICAgICAvLyBh
dHRhY2htZW50IGNhbiBvY2N1ciB5ZXQuCi0gICAgICAgICAgICBibG9ja0VsZW0tPmFwcGVuZENo
aWxkKG5ld05vZGUucmVsZWFzZSgpLCBlYyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ZmluaXNoZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIFN0ZXAgNTogUmVwYXJlbnQgfGJsb2NrRWxl
bXwuICBOb3cgdGhlIGZ1bGwgYXR0YWNobWVudCBvZiB0aGUgZml4ZWQgdXAgdHJlZSB0YWtlcyBw
bGFjZS4KLSAgICAgICAgaWYgKGlzQmxvY2tTdGlsbEluVHJlZSkKLSAgICAgICAgICAgIHBhcmVu
dEVsZW0tPmFwcGVuZENoaWxkKGJsb2NrRWxlbSwgZWMpOwotCi0gICAgICAgIC8vIFN0ZXAgNjog
UHVsbCB8ZWxlbXwgb3V0IG9mIHRoZSBzdGFjaywgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIGVuY2xv
c2luZyB1cy4gIEFsc28gdXBkYXRlCi0gICAgICAgIC8vIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgcHJldmlvdXMgc3RhY2sgZWxlbWVudCBzbyB0aGF0IHdoZW4gaXQgZ2V0cyBwb3BwZWQs
Ci0gICAgICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSB0aGUgcmVzaWR1YWwgZWxlbWVudCB0aGUgbmV4
dCBjdXJyZW50IG5vZGUuCi0gICAgICAgIEhUTUxTdGFja0VsZW0qIGN1cnJFbGVtID0gbWF4RWxl
bTsKLSAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0gPSAwOwotICAgICAgICB3aGlsZSAo
Y3VyckVsZW0gIT0gZWxlbSkgewotICAgICAgICAgICAgcHJldkVsZW0gPSBjdXJyRWxlbTsKLSAg
ICAgICAgICAgIGN1cnJFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAg
cHJldkVsZW0tPm5leHQgPSBlbGVtLT5uZXh0OwotICAgICAgICBwcmV2RWxlbS0+ZGVyZWZOb2Rl
KCk7Ci0gICAgICAgIHByZXZFbGVtLT5ub2RlID0gZWxlbS0+bm9kZTsKLSAgICAgICAgcHJldkVs
ZW0tPmRpZFJlZk5vZGUgPSBlbGVtLT5kaWRSZWZOb2RlOwotICAgICAgICBtX3RyZWVEZXB0aC0t
OwotICAgICAgICBpZiAoIWZpbmlzaGVkKSB7Ci0gICAgICAgICAgICAvLyBSZXB1cnBvc2UgfGVs
ZW18IHRvIHJlcHJlc2VudCB8bmV3Tm9kZXwgYW5kIGluc2VydCBpdCBhdCB0aGUgYXBwcm9wcmlh
dGUgcG9zaXRpb24KLSAgICAgICAgICAgIC8vIGluIHRoZSBzdGFjay4gV2UgZG8gbm90IGRvIHRo
aXMgZm9yIHRoZSBpbm5lcm1vc3QgYmxvY2ssIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSBuZXcK
LSAgICAgICAgICAgIC8vIG5vZGUgaXMgZWZmZWN0aXZlbHkgbm8gbG9uZ2VyIG9wZW4uCi0gICAg
ICAgICAgICBlbGVtLT5uZXh0ID0gbWF4RWxlbTsKLSAgICAgICAgICAgIGVsZW0tPm5vZGUgPSBw
cmV2TWF4RWxlbS0+bm9kZTsKLSAgICAgICAgICAgIGVsZW0tPmRpZFJlZk5vZGUgPSBwcmV2TWF4
RWxlbS0+ZGlkUmVmTm9kZTsKLSAgICAgICAgICAgIGVsZW0tPnN0cmF5VGFibGVDb250ZW50ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBwcmV2TWF4RWxlbS0+bmV4dCA9IGVsZW07Ci0gICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZVB0cik7Ci0gICAgICAgICAgICBwcmV2TWF4RWxlbS0+bm9kZSA9IG5l
d05vZGVQdHI7Ci0gICAgICAgICAgICBuZXdOb2RlUHRyLT5yZWYoKTsKLSAgICAgICAgICAgIHBy
ZXZNYXhFbGVtLT5kaWRSZWZOb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdHJlZURlcHRoKys7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZGVsZXRlIGVsZW07Ci0gICAgfQotCi0gICAg
Ly8gRklYTUU6IElmIHdlIGV2ZXIgbWFrZSBhIGNhc2UgbGlrZSB0aGlzIHdvcms6Ci0gICAgLy8g
PHRhYmxlPjxiPjxpPjxmb3JtPjwvYj48L2Zvcm0+PC9pPjwvdGFibGU+Ci0gICAgLy8gVGhlbiB0
aGlzIGNoZWNrIHdpbGwgYmUgdG9vIHNpbXBsaXN0aWMuICBSaWdodCBub3cgdGhlIDxpPjxmb3Jt
PiBjaGFpbiB3aWxsIGVuZCB1cCBpbnNpZGUgdGhlIDx0Ym9keT4sIHdoaWNoIGlzIHByZXR0eSBj
cmF6eS4KLSAgICBpZiAoc3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAgIG1faW5TdHJheVRhYmxl
Q29udGVudC0tOwotCi0gICAgLy8gU3RlcCA3OiBSZW9wZW4gaW50ZXJtZWRpYXRlIGlubGluZXMs
IGUuZy4sIDxiPjxwPjxpPkZvbzwvYj5Hb288L3A+LgotICAgIC8vIEluIHRoZSBhYm92ZSBleGFt
cGxlLCBHb28gc2hvdWxkIHN0YXkgaXRhbGljLgotICAgIC8vIFdlIGNhcCB0aGUgbnVtYmVyIG9m
IHRhZ3Mgd2UncmUgd2lsbGluZyB0byByZW9wZW4gYmFzZWQgb2ZmIGNSZXNpZHVhbFN0eWxlTWF4
RGVwdGguCi0gICAgCi0gICAgSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKLSAg
ICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAwOwotICAgIHVuc2lnbmVkIHN0
YWNrRGVwdGggPSAxOwotICAgIHVuc2lnbmVkIHJlZHVuZGFudFN0eWxlQ291bnQgPSAwOwotICAg
IHdoaWxlIChjdXJyICYmIGN1cnIgIT0gbWF4RWxlbSkgewotICAgICAgICAvLyBXZSB3aWxsIGFj
dHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcKLSAgICAgICAgLy8gYWZ0ZXIg
d2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgotICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpICYmIHN0YWNrRGVwdGgrKyA8IGNSZXNp
ZHVhbFN0eWxlTWF4RGVwdGgpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQgdGhl
IHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKLSAgICAgICAg
ICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZh
cmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKLSAgICAgICAgICAgIC8vIGZyb20gaW5uZXJt
b3N0IHRvIG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBu
ZWVkIHRvIHJlb3BlbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3V0ZXJtb3N0IHRvIHRoZSBp
bm5lcm1vc3QsIGkuZS4sIHJlc2lkdWFsU3R5bGVTdGFjayB3aWxsIGVuZCB1cCBwb2ludGluZwot
ICAgICAgICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcgd2UgbmVlZCB0byByZW9wZW4uCi0g
ICAgICAgICAgICAvLyBXZSBhbHNvIHNldCBjdXJyLT5ub2RlIHRvIGJlIHRoZSBhY3R1YWwgZWxl
bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KLSAgICAgICAgICAgIC8v
IGN1cnItPmlkIHJhdGhlciB0aGFuIHRoZSBub2RlIHRoYXQgeW91IHNob3VsZCBwb3AgdG8gd2hl
biB0aGUgZWxlbWVudCBnZXRzIHB1bGxlZCBvZmYKLSAgICAgICAgICAgIC8vIHRoZSBzdGFjay4K
LSAgICAgICAgICAgIGlmIChyZXNpZHVhbFN0eWxlU3RhY2sgJiYgY3Vyci0+dGFnTmFtZSA9PSBy
ZXNpZHVhbFN0eWxlU3RhY2stPnRhZ05hbWUgJiYgY3Vyci0+bm9kZS0+YXR0cmlidXRlcygpLT5t
YXBzRXF1aXZhbGVudChyZXNpZHVhbFN0eWxlU3RhY2stPm5vZGUtPmF0dHJpYnV0ZXMoKSkpCi0g
ICAgICAgICAgICAgICAgcmVkdW5kYW50U3R5bGVDb3VudCsrOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQgPSAwOwotCi0gICAgICAgICAgICBp
ZiAocmVkdW5kYW50U3R5bGVDb3VudCA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0aCkKLSAgICAgICAg
ICAgICAgICBtb3ZlT25lQmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotCi0gICAgICAgIGN1cnIgPSBtX2Jsb2NrU3Rh
Y2s7Ci0gICAgfQotCi0gICAgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MocmVzaWR1YWxTdHlsZVN0
YWNrLCAwKTsgLy8gU3RyYXkgdGFibGUgY29udGVudCBjYW4ndCBiZSBhbiBpc3N1ZSBoZXJlLCBz
aW5jZSBzb21lIGVsZW1lbnQgYWJvdmUgd2lsbCBhbHdheXMgYmVjb21lIHRoZSByb290IG9mIG5l
dyBzdHJheSB0YWJsZSBjb250ZW50LgotCi0gICAgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jv
c3NCbG9ja3MgPSBmYWxzZTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpy
ZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBOb2RlKiBtYWxmb3Jt
ZWRUYWJsZVBhcmVudCkKLXsKLSAgICAvLyBMb29wIGZvciBlYWNoIHRhZyB0aGF0IG5lZWRzIHRv
IGJlIHJlb3BlbmVkLgotICAgIHdoaWxlIChlbGVtKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHNo
YWxsb3cgY2xvbmUgb2YgdGhlIERPTSBub2RlIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXdOb2RlID0gZWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsgCi0gICAg
ICAgIHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5ld05vZGUtPmxvY2FsTmFtZSgp
KTsKLQotICAgICAgICAvLyBBcHBlbmQgdGhlIG5ldyBub2RlLiBJbiB0aGUgbWFsZm9ybWVkIHRh
YmxlIGNhc2UsIHdlIG5lZWQgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGFibGUsCi0gICAgICAgIC8v
IHdoaWNoIHdpbGwgYmUgdGhlIGxhc3QgY2hpbGQuCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICBpZiAobWFsZm9ybWVkVGFibGVQYXJlbnQpCi0gICAgICAgICAgICBtYWxm
b3JtZWRUYWJsZVBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG1hbGZvcm1lZFRhYmxlUGFy
ZW50LT5sYXN0Q2hpbGQoKSwgZWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJl
bnQtPmFwcGVuZENoaWxkKG5ld05vZGUsIGVjKTsKLSAgICAgICAgLy8gRklYTUU6IElzIGl0IHJl
YWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KLQotICAgICAgICAvLyBOb3cg
cHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgot
ICAgICAgICBwdXNoQmxvY2soZWxlbS0+dGFnTmFtZSwgZWxlbS0+bGV2ZWwpOwotICAgICAgICBu
ZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgICAgIC8vIFNldCBvdXIgc3Ry
YXlUYWJsZUNvbnRlbnQgYm9vbGVhbiBpZiBuZWVkZWQsIHNvIHRoYXQgdGhlIHJlb3BlbmVkIHRh
ZyBhbHNvIGtub3dzCi0gICAgICAgIC8vIHRoYXQgaXQgaXMgaW5zaWRlIGEgbWFsZm9ybWVkIHRh
YmxlLgotICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gbWFsZm9ybWVk
VGFibGVQYXJlbnQgIT0gMDsKLSAgICAgICAgaWYgKG1fYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNv
bnRlbnQpCi0gICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQrKzsKLQotICAgICAgICAv
LyBDbGVhciBvdXIgbWFsZm9ybWVkIHRhYmxlIHBhcmVudCB2YXJpYWJsZS4KLSAgICAgICAgbWFs
Zm9ybWVkVGFibGVQYXJlbnQgPSAwOwotCi0gICAgICAgIC8vIFVwZGF0ZSB8Y3VycmVudHwgbWFu
dWFsbHkgdG8gcG9pbnQgdG8gdGhlIG5ldyBub2RlLgotICAgICAgICBzZXRDdXJyZW50KG5ld05v
ZGUuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0YWcg
dGhhdCBuZWVkcyB0byBiZSByZW9wZW5lZC4KLSAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dCA9
IGVsZW0tPm5leHQ7Ci0gICAgICAgIGVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICBkZWxldGUg
ZWxlbTsKLSAgICAgICAgZWxlbSA9IG5leHQ7Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGlu
dCBsZXZlbCkKLXsKLSAgICBtX2Jsb2NrU3RhY2sgPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1l
LCBsZXZlbCwgbV9jdXJyZW50LCBtX2RpZFJlZkN1cnJlbnQsIG1fYmxvY2tTdGFjayk7Ci0gICAg
aWYgKGxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkKLSAgICAgICAgbV9ibG9ja3NJ
blN0YWNrKys7Ci0gICAgbV90cmVlRGVwdGgrKzsKLSAgICBtX2RpZFJlZkN1cnJlbnQgPSBmYWxz
ZTsKLSAgICBpZiAodGFnTmFtZSA9PSBwVGFnKQotICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29w
ZSA9IEluU2NvcGU7Ci0gICAgZWxzZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpKQotICAgICAg
ICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IE5vdEluU2NvcGU7Ci19Ci0KLXZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBi
b29sIHJlcG9ydEVycm9ycykKLXsKLSAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0
YWNrOwotCi0gICAgaWYgKG1fcGFyc2VyUXVpcmtzICYmIGVsZW0gJiYgIW1fcGFyc2VyUXVpcmtz
LT5zaG91bGRQb3BCbG9jayhlbGVtLT50YWdOYW1lLCB0YWdOYW1lKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IG1heExldmVsID0gMDsKLQotICAgIHdoaWxlIChlbGVtICYmIChlbGVtLT50
YWdOYW1lICE9IHRhZ05hbWUpKSB7Ci0gICAgICAgIGlmIChtYXhMZXZlbCA8IGVsZW0tPmxldmVs
KQotICAgICAgICAgICAgbWF4TGV2ZWwgPSBlbGVtLT5sZXZlbDsKLSAgICAgICAgZWxlbSA9IGVs
ZW0tPm5leHQ7Ci0gICAgfQotCi0gICAgaWYgKCFlbGVtKSB7Ci0gICAgICAgIGlmIChyZXBvcnRF
cnJvcnMpCi0gICAgICAgICAgICByZXBvcnRFcnJvcihTdHJheUNsb3NlVGFnRXJyb3IsICZ0YWdO
YW1lLCAwLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtYXhMZXZl
bCA+IGVsZW0tPmxldmVsKSB7Ci0gICAgICAgIC8vIFdlIGRpZG4ndCBtYXRjaCBiZWNhdXNlIHRo
ZSB0YWcgaXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCi0gICAgICAgIC8vIDxiPjxwPkZv
bzwvYj4uICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAgaWYgKCFpc1Jlc2lk
dWFsU3R5bGVUYWcodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJldHVy
biBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoZWxlbSk7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUo
ZWxlbS0+dGFnTmFtZSk7Ci0gICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0g
MDsKLSAgICBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7Ci0gICAgCi0gICAgZWxlbSA9
IG1fYmxvY2tTdGFjazsKLSAgICB1bnNpZ25lZCBzdGFja0RlcHRoID0gMTsKLSAgICB1bnNpZ25l
ZCByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKLSAgICB3aGlsZSAoZWxlbSkgewotICAgICAgICBp
ZiAoZWxlbS0+dGFnTmFtZSA9PSB0YWdOYW1lKSB7Ci0gICAgICAgICAgICBpbnQgc3RyYXlUYWJs
ZSA9IG1faW5TdHJheVRhYmxlQ29udGVudDsKLSAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0g
ICAgICAgICAgICBlbGVtID0gMDsKLQotICAgICAgICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyB0
aGUgcm9vdCBvZiBzb21lIG1hbGZvcm1lZCBjb250ZW50IGp1c3QgaW5zaWRlIGFuIGltcGxpY2l0
IG9yCi0gICAgICAgICAgICAvLyBleHBsaWNpdCA8dGJvZHk+IG9yIDx0cj4uCi0gICAgICAgICAg
ICAvLyBJZiB3ZSBlbmQgdXAgbmVlZGluZyB0byByZW9wZW4gcmVzaWR1YWwgc3R5bGUgdGFncywg
dGhlIHJvb3Qgb2YgdGhlIHJlb3BlbmVkIGNoYWluCi0gICAgICAgICAgICAvLyBtdXN0IGFsc28g
a25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBhIDx0
Ym9keT4vPHRyPi4KLSAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChtX2luU3RyYXlUYWJs
ZUNvbnRlbnQgPCBzdHJheVRhYmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBjdXJyID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlIChj
dXJyICYmICFjdXJyLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
Y3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICBtYWxmb3JtZWRUYWJs
ZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKG1fY3VycmVudEZvcm1F
bGVtZW50ICYmIGVsZW0tPnRhZ05hbWUgPT0gZm9ybVRhZykKLSAgICAgICAgICAgICAgICAvLyBB
IDxmb3JtPiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0aGlzIGlzCi0gICAgICAg
ICAgICAgICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgZm9y
bSB0byBjbGVhciBvdXQgaXRzCi0gICAgICAgICAgICAgICAgLy8gYm90dG9tIG1hcmdpbi4KLSAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudC0+c2V0TWFsZm9ybWVkKHRydWUpOwot
Ci0gICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCi0gICAgICAg
ICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxvY2su
Ci0gICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFn
KGVsZW0tPnRhZ05hbWUpICYmIHN0YWNrRGVwdGgrKyA8IGNSZXNpZHVhbFN0eWxlTWF4RGVwdGgp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sg
ZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgLy8gc3Ry
dWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAg
SW5zdGVhZCBvZiBjaGFpbmluZwotICAgICAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRv
IG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRv
IHJlb3BlbgotICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG91dGVybW9zdCB0byB0aGUgaW5u
ZXJtb3N0LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sgd2lsbCBlbmQgdXAgcG9pbnRpbmcKLSAg
ICAgICAgICAgICAgICAvLyB0byB0aGUgb3V0ZXJtb3N0IHRhZyB3ZSBuZWVkIHRvIHJlb3Blbi4K
LSAgICAgICAgICAgICAgICAvLyBXZSBhbHNvIHNldCBlbGVtLT5ub2RlIHRvIGJlIHRoZSBhY3R1
YWwgZWxlbWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KLSAgICAgICAg
ICAgICAgICAvLyBlbGVtLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91bGQg
cG9wIHRvIHdoZW4gdGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCi0gICAgICAgICAgICAgICAg
Ly8gdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIGlmIChyZXNpZHVhbFN0eWxlU3RhY2sgJiYg
ZWxlbS0+dGFnTmFtZSA9PSByZXNpZHVhbFN0eWxlU3RhY2stPnRhZ05hbWUgJiYgZWxlbS0+bm9k
ZS0+YXR0cmlidXRlcygpLT5tYXBzRXF1aXZhbGVudChyZXNpZHVhbFN0eWxlU3RhY2stPm5vZGUt
PmF0dHJpYnV0ZXMoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQr
KzsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0
eWxlQ291bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlZHVuZGFudFN0eWxlQ291bnQg
PCBjTWF4UmVkdW5kYW50VGFnRGVwdGgpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVPbmVCbG9j
a1RvU3RhY2socmVzaWR1YWxTdHlsZVN0YWNrKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgICAgICAgICAgZWxlbSA9IG1fYmxvY2tTdGFj
azsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lk
dWFsU3R5bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQpOwotfQotCi1pbmxpbmUgSFRNTFN0
YWNrRWxlbSogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cG9wT25lQmxvY2tDb21tb24oKQot
ewotICAgIEhUTUxTdGFja0VsZW0qIGVsZW0gPSBtX2Jsb2NrU3RhY2s7Ci0KLSAgICAvLyBGb3Jt
IGVsZW1lbnRzIHJlc3RvcmUgdGhlaXIgc3RhdGUgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3Mu
Ci0gICAgLy8gQWxzbywgYSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0PikgbmVlZCB0
byBrbm93IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWlsYWJsZS4K
LSAgICBpZiAobV9jdXJyZW50ICYmIGVsZW0tPm5vZGUgIT0gbV9jdXJyZW50KQotICAgICAgICBt
X2N1cnJlbnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKG1fYmxvY2tTdGFj
ay0+bGV2ZWwgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7Ci0gICAgICAgIEFTU0VSVCht
X2Jsb2Nrc0luU3RhY2sgPiAwKTsKLSAgICAgICAgbV9ibG9ja3NJblN0YWNrLS07Ci0gICAgfQot
ICAgIG1fdHJlZURlcHRoLS07Ci0gICAgbV9ibG9ja1N0YWNrID0gZWxlbS0+bmV4dDsKLSAgICBt
X2N1cnJlbnQgPSBlbGVtLT5ub2RlOwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGVsZW0tPmRpZFJl
Zk5vZGU7Ci0KLSAgICBpZiAoZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAgIG1faW5T
dHJheVRhYmxlQ29udGVudC0tOwotCi0gICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gcFRhZykKLSAg
ICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwotICAgIGVsc2UgaWYgKGlz
U2NvcGluZ1RhZyhlbGVtLT50YWdOYW1lKSkKLSAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUg
PSBVbmtub3duOwotCi0gICAgcmV0dXJuIGVsZW07Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cG9wT25lQmxvY2soKQotewotICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IG5v
ZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCi0gICAgTm9kZSogbGFz
dEN1cnJlbnQgPSBtX2N1cnJlbnQ7Ci0gICAgYm9vbCBkaWRSZWZMYXN0Q3VycmVudCA9IG1fZGlk
UmVmQ3VycmVudDsKLQotICAgIGRlbGV0ZSBwb3BPbmVCbG9ja0NvbW1vbigpOwotCi0gICAgaWYg
KGRpZFJlZkxhc3RDdXJyZW50KQotICAgICAgICBsYXN0Q3VycmVudC0+ZGVyZWYoKTsKLX0KLQot
dm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptb3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxT
dGFja0VsZW0qJiBoZWFkKQotewotICAgIC8vIFdlJ2xsIGJlIHVzaW5nIHRoZSBzdGFjayBlbGVt
ZW50IHdlJ3JlIHBvcHBpbmcsIGJ1dCBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAvLyBTZWUg
dGhlIHR3byBjYWxsZXJzIGZvciBkZXRhaWxzLgotCi0gICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQg
bm9kZSBiZWZvcmUgcG9wT25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBpdC4KLSAgICBOb2RlKiBs
YXN0Q3VycmVudCA9IG1fY3VycmVudDsKLSAgICBib29sIGRpZFJlZkxhc3RDdXJyZW50ID0gbV9k
aWRSZWZDdXJyZW50OwotCi0gICAgLy8gUG9wIHRoZSBibG9jaywgYnV0IGRvbid0IGRlcmVmIHRo
ZSBjdXJyZW50IG5vZGUgYXMgcG9wT25lQmxvY2sgZG9lcyBiZWNhdXNlCi0gICAgLy8gd2UnbGwg
YmUgdXNpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIG5ldyBzdGFjayBlbGVtZW50LgotICAgIEhUTUxT
dGFja0VsZW0qIGVsZW0gPSBwb3BPbmVCbG9ja0NvbW1vbigpOwotCi0gICAgLy8gVHJhbnNmZXIg
dGhlIGN1cnJlbnQgbm9kZSBpbnRvIHRoZSBzdGFjayBlbGVtZW50LgotICAgIC8vIE5vIG5lZWQg
dG8gZGVyZWYgdGhlIG9sZCBlbGVtLT5ub2RlIGJlY2F1c2UgcG9wT25lQmxvY2tDb21tb24gdHJh
bnNmZXJyZWQKLSAgICAvLyBpdCBpbnRvIHRoZSBtX2N1cnJlbnQvbV9kaWRSZWZDdXJyZW50IGZp
ZWxkcy4KLSAgICBlbGVtLT5ub2RlID0gbGFzdEN1cnJlbnQ7Ci0gICAgZWxlbS0+ZGlkUmVmTm9k
ZSA9IGRpZFJlZkxhc3RDdXJyZW50OwotICAgIGVsZW0tPm5leHQgPSBoZWFkOwotICAgIGhlYWQg
PSBlbGVtOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZIYXNQ
RWxlbWVudEluU2NvcGUoKQotewotICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29w
ZTsKLSAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwotICAgIHdoaWxlIChl
bGVtKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IGVsZW0tPnRhZ05h
bWU7Ci0gICAgICAgIGlmICh0YWdOYW1lID09IHBUYWcpIHsKLSAgICAgICAgICAgIG1faGFzUEVs
ZW1lbnRJblNjb3BlID0gSW5TY29wZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBl
bHNlIGlmIChpc1Njb3BpbmdUYWcodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGVsZW0gPSBlbGVtLT5uZXh0OwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpwb3BJbmxpbmVCbG9ja3MoKQotewotICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sg
JiYgaXNJbmxpbmUobV9jdXJyZW50KSkKLSAgICAgICAgcG9wT25lQmxvY2soKTsKLX0KLQotdm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmVlQmxvY2soKQotewotICAgIHdoaWxlICht
X2Jsb2NrU3RhY2spCi0gICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgQVNTRVJUKCFtX2Jsb2Nr
c0luU3RhY2spOwotICAgIEFTU0VSVCghbV90cmVlRGVwdGgpOwotfQotCi12b2lkIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OmNyZWF0ZUhlYWQoKQotewotICAgIGlmIChtX2hlYWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgJiYg
IW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2RvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSB8fCBtX2lzUGFyc2luZ0ZyYWdtZW50KTsKLSAgICB9Ci0KLSAg
ICBtX2hlYWQgPSBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLQotICAgIGlm
IChtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIVE1MRWxlbWVu
dCogYm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKG1faGVhZC5n
ZXQoKSwgYm9keSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgbV9oZWFkID0gMDsKLSAgICAg
ICAgCi0gICAgLy8gSWYgdGhlIGJvZHkgZG9lcyBub3QgZXhpc3QgeWV0LCB0aGVuIHRoZSA8aGVh
ZD4gc2hvdWxkIGJlIHB1c2hlZCBhcyB0aGUgY3VycmVudCBibG9jay4KLSAgICBpZiAobV9oZWFk
ICYmICFib2R5KSB7Ci0gICAgICAgIHB1c2hCbG9jayhtX2hlYWQtPmxvY2FsTmFtZSgpLCBtX2hl
YWQtPnRhZ1ByaW9yaXR5KCkpOwotICAgICAgICBzZXRDdXJyZW50KG1faGVhZC5nZXQoKSk7Ci0g
ICAgfQotfQotCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Omhh
bmRsZUlzaW5kZXgoVG9rZW4qIHQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IG4gPSBIVE1MRGl2RWxl
bWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotCi0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHQt
PmF0dHJzLmdldCgpOwotCi0gICAgUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4gaXNJbmRleCA9
IEhUTUxJc0luZGV4RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIG1fY3VycmVudEZvcm1FbGVt
ZW50LmdldCgpKTsKLSAgICBpc0luZGV4LT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMpOwotICAgIGlz
SW5kZXgtPnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgImtodG1sX2lzaW5kZXgiKTsKLQotICAgIFN0
cmluZyB0ZXh0ID0gc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCk7Ci0gICAgaWYgKGF0dHJz
KSB7Ci0gICAgICAgIGlmIChBdHRyaWJ1dGUqIGEgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShw
cm9tcHRBdHRyKSkKLSAgICAgICAgICAgIHRleHQgPSBhLT52YWx1ZSgpLnN0cmluZygpICsgIiAi
OwotICAgICAgICB0LT5hdHRycyA9IDA7Ci0gICAgfQotCi0gICAgbi0+YWRkQ2hpbGQoSFRNTEhS
RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpKTsKLSAgICBuLT5hZGRDaGlsZChUZXh0OjpjcmVh
dGUobV9kb2N1bWVudCwgdGV4dCkpOwotICAgIG4tPmFkZENoaWxkKGlzSW5kZXgucmVsZWFzZSgp
KTsKLSAgICBuLT5hZGRDaGlsZChIVE1MSFJFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkpOwot
Ci0gICAgcmV0dXJuIG4ucmVsZWFzZSgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OnN0YXJ0Qm9keSgpCi17Ci0gICAgaWYgKG1faW5Cb2R5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2luQm9keSA9IHRydWU7Ci0KLSAgICBpZiAobV9pc2luZGV4RWxlbWVudCkgewot
ICAgICAgICBpbnNlcnROb2RlKG1faXNpbmRleEVsZW1lbnQuZ2V0KCksIHRydWUgLyogZG9uJ3Qg
ZGVzY2VuZCBpbnRvIHRoaXMgbm9kZSAqLyk7Ci0gICAgICAgIG1faXNpbmRleEVsZW1lbnQgPSAw
OwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmaW5pc2hlZCgp
Ci17Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBo
ZXJlJ3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgotICAgIGlmIChtX2N1
cnJlbnQgJiYgbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKSkKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0
ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCAiY3VycmVu
dCIgaXMgbm90IGxlZnQgcG9pbnRpbmcgdG8gYSBub2RlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGRl
c3Ryb3llZC4KLSAgICBmcmVlQmxvY2soKTsKLSAgICBzZXRDdXJyZW50KDApOwotCi0gICAgLy8g
V2FybmluZywgdGhpcyBtYXkgZGVsZXRlIHRoZSBwYXJzZXIsIHNvIGRvbid0IHRyeSB0byBkbyBh
bnl0aGluZyBlbHNlIGFmdGVyIHRoaXMuCi0gICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KQot
ICAgICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9pZCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpyZXBvcnRFcnJvclRvQ29uc29sZShIVE1MUGFyc2VyRXJyb3JD
b2RlIGVycm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWlj
U3RyaW5nKiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpCi17ICAgIAotICAgIEZyYW1lKiBmcmFt
ZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogaHRtbFRva2VuaXplciA9IHN0
YXRpY19jYXN0PExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcio+KG1fZG9jdW1lbnQtPnBhcnNlcigp
KTsKLSAgICBpbnQgbGluZU51bWJlciA9IGh0bWxUb2tlbml6ZXItPmxpbmVOdW1iZXIoKSArIDE7
Ci0KLSAgICBBdG9taWNTdHJpbmcgdGFnMTsKLSAgICBBdG9taWNTdHJpbmcgdGFnMjsKLSAgICBp
ZiAodGFnTmFtZTEpIHsKLSAgICAgICAgaWYgKCp0YWdOYW1lMSA9PSAiI3RleHQiKQotICAgICAg
ICAgICAgdGFnMSA9ICJUZXh0IjsKLSAgICAgICAgZWxzZSBpZiAoKnRhZ05hbWUxID09ICIjY29t
bWVudCIpCi0gICAgICAgICAgICB0YWcxID0gIjwhLS0gY29tbWVudCAtLT4iOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0YWcxID0gKGNsb3NlVGFncyA/ICI8LyIgOiAiPCIpICsgKnRhZ05h
bWUxICsgIj4iOwotICAgIH0KLSAgICBpZiAodGFnTmFtZTIpIHsKLSAgICAgICAgaWYgKCp0YWdO
YW1lMiA9PSAiI3RleHQiKQotICAgICAgICAgICAgdGFnMiA9ICJUZXh0IjsKLSAgICAgICAgZWxz
ZSBpZiAoKnRhZ05hbWUyID09ICIjY29tbWVudCIpCi0gICAgICAgICAgICB0YWcyID0gIjwhLS0g
Y29tbWVudCAtLT4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0YWcyID0gKGNsb3NlVGFn
cyA/ICI8LyIgOiAiPCIpICsgKnRhZ05hbWUyICsgIj4iOwotICAgIH0KLSAgICAgICAgCi0gICAg
Y29uc3QgY2hhciogZXJyb3JNc2cgPSBodG1sUGFyc2VyRXJyb3JNZXNzYWdlVGVtcGxhdGUoZXJy
b3JDb2RlKTsKLSAgICBpZiAoIWVycm9yTXNnKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChodG1sVG9rZW5pemVyLT5wcm9jZXNzaW5nQ29u
dGVudFdyaXR0ZW5CeVNjcmlwdCgpKQotICAgICAgICBtZXNzYWdlICs9IGh0bWxQYXJzZXJEb2N1
bWVudFdyaXRlTWVzc2FnZSgpOwotICAgIG1lc3NhZ2UgKz0gZXJyb3JNc2c7Ci0gICAgbWVzc2Fn
ZS5yZXBsYWNlKCIldGFnMSIsIHRhZzEpOwotICAgIG1lc3NhZ2UucmVwbGFjZSgiJXRhZzIiLCB0
YWcyKTsKLQotICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhU
TUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgCi0gICAgICAgIGlzV2FybmluZyhlcnJv
ckNvZGUpID8gV2FybmluZ01lc3NhZ2VMZXZlbCA6IEVycm9yTWVzc2FnZUxldmVsLAotICAgICAg
ICBtZXNzYWdlLCBsaW5lTnVtYmVyLCBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7Ci19Ci0K
LSNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVh
ZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAKLSAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2Uo
KS0+c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVk
c0xlb3BhcmRNYWlsUXVpcmtzKCkgOiB0cnVlOwotfQotI2VsaWYgZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikKLWJvb2wgc2hvdWxkQ3JlYXRlSW1wbGljaXRIZWFkKERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIAotICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5zZXR0aW5ncygpIDogMDsK
LSAgICByZXR1cm4gc2V0dGluZ3MgPyAhc2V0dGluZ3MtPm5lZWRzVGlnZXJNYWlsUXVpcmtzKCkg
OiB0cnVlOwotfQotI2VuZGlmCi0KLQotU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91
YmxlIG51bWJlcikKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIG4gYXMgYSBmbG9hdGluZwotICAgIC8vIHBvaW50IG51
bWJlciIgaXMgYSBzdHJpbmcgcHJvZHVjZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgot
ICAgIER0b2FCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICBkb3VibGVU
b1N0cmluZ0luSmF2YVNjcmlwdEZvcm1hdChudW1iZXIsIGJ1ZmZlciwgJmxlbmd0aCk7Ci0gICAg
cmV0dXJuIFN0cmluZyhidWZmZXIsIGxlbmd0aCk7Ci19Ci0KLWJvb2wgcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiBzcmMsIGRvdWJsZSogb3V0KQotewotICAgIC8vIFNl
ZSBIVE1MNSAyLjQuNC4zIGBSZWFsIG51bWJlcnMuJwotCi0gICAgaWYgKHNyYy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBTdHJpbmc6OnRvRG91YmxlKCkgYWNjZXB0
cyBsZWFkaW5nICsgXHQgXG4gXHYgXGYgXHIgYW5kIFNQQUNFLCB3aGljaCBhcmUgaW52YWxpZCBp
biBIVE1MNS4KLSAgICAvLyBTbywgY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3Rlci4KLSAgICBpZiAo
c3JjWzBdICE9ICctJyAmJiAoc3JjWzBdIDwgJzAnIHx8IHNyY1swXSA+ICc5JykpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKLSAgICBkb3VibGUgdmFs
dWUgPSBzcmMudG9Eb3VibGUoJnZhbGlkKTsKLSAgICBpZiAoIXZhbGlkKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgLy8gTmFOIGFuZCBJbmZpbml0eSBhcmUgbm90IHZhbGlkIG51bWJlcnMg
YWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIC0wIC0+IDAKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICB2YWx1ZSA9IDA7Ci0gICAgaWYgKG91dCkKLSAgICAgICAgKm91dCA9IHZhbHVlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmgJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAg
ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKLSAgICAg
ICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKLSAgICAgICAgICAg
ICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgICAgICAgICAg
ICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotKi8KLQotI2lmbmRlZiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gKLSNkZWZp
bmUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCi0KLSNpbmNsdWRlICJGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24uaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIgotI2lu
Y2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRG9jdHlwZVRva2VuOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBE
b2N1bWVudEZyYWdtZW50OwotY2xhc3MgSFRNTERvY3VtZW50OwotY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OwotY2xhc3MgSFRNTEhlYWRFbGVtZW50OwotY2xhc3MgSFRNTE1hcEVsZW1lbnQ7Ci1jbGFz
cyBIVE1MUGFyc2VyUXVpcmtzOwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEhUTUxTdGFja0VsZW07
Ci1zdHJ1Y3QgVG9rZW47Ci0KLS8qKgotICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2
ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciwg
YW5kCi0gKiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0LgotICovCi1j
bGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1
YmxpYzoKLSAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKEhUTUxEb2N1bWVudCosIGJvb2wg
cmVwb3J0RXJyb3JzKTsKLSAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKERvY3VtZW50RnJh
Z21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0Fs
bG93ZWQpOwotICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoKTsKLQotICAg
IC8qKgotICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tlbml6ZXIK
LSAgICAgKi8KLSAgICBQYXNzUmVmUHRyPE5vZGU+IHBhcnNlVG9rZW4oVG9rZW4qKTsKLSAgICAK
LSAgICAvLyBQYXJzZXMgYSBkb2N0eXBlIHRva2VuLgotICAgIHZvaWQgcGFyc2VEb2N0eXBlVG9r
ZW4oRG9jdHlwZVRva2VuKik7Ci0KLSAgICAvKioKLSAgICAgKiB0b2tlbml6ZXIgc2F5cyBpdCdz
IG5vdCBnb2luZyB0byBiZSBzZW5kaW5nIHVzIGFueSBtb3JlIHRva2VucwotICAgICAqLwotICAg
IHZvaWQgZmluaXNoZWQoKTsKLQotICAgIC8qKgotICAgICAqIHJlc2V0cyB0aGUgcGFyc2VyCi0g
ICAgICovCi0gICAgdm9pZCByZXNldCgpOwotCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsg
cmV0dXJuICFtX3NraXBNb2RlVGFnLmlzTnVsbCgpOyB9Ci0gICAgYm9vbCBpc0hhbmRsaW5nUmVz
aWR1YWxTdHlsZUFjcm9zc0Jsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxpbmdSZXNpZHVh
bFN0eWxlQWNyb3NzQmxvY2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRDdXJyZW50KE5v
ZGUqKTsKLSAgICB2b2lkIGRlcmVmQ3VycmVudCgpOwotICAgIHZvaWQgc2V0U2tpcE1vZGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgbV9za2lwTW9kZVRhZyA9IHFOYW1lLmxvY2FsTmFt
ZSgpOyB9Ci0KLSAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5vZGUoVG9rZW4qKTsKLSAgICBib29s
IGJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBj
YW52YXNDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBj
b21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wg
ZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBkdENy
ZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIGZvcm1DcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBmcmFtZXNldENy
ZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIGhlYWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBpZnJhbWVDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBpc2luZGV4Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbWFwQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbmVzdGVkQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbmVzdGVkUENsb3Nl
ckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5lc3Rl
ZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wg
bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29s
IG5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJv
b2wgbm9sYXllckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAg
ICBib29sIHBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
Jik7Ci0gICAgYm9vbCBycENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsK
LSAgICBib29sIHJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgdGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwot
ICAgIGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpOwotICAgIGJvb2wgdGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KTsKLQotICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7Ci0KLSAgICB2b2lkIGxpbWl0
RGVwdGgoaW50IHRhZ1ByaW9yaXR5KTsKLSAgICBib29sIGluc2VydE5vZGVBZnRlckxpbWl0RGVw
dGgoTm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKLSAgICBib29sIGluc2VydE5vZGUoTm9kZSos
IGJvb2wgZmxhdCA9IGZhbHNlKTsKLSAgICBib29sIGhhbmRsZUVycm9yKE5vZGUqLCBib29sIGZs
YXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpOwotICAg
IAotICAgIHZvaWQgcHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IGxl
dmVsKTsKLSAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9v
bCByZXBvcnRFcnJvcnMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwb3BCbG9jayhjb25zdCBRdWFsaWZp
ZWROYW1lJiBxTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSkgeyByZXR1cm4gcG9wQmxv
Y2socU5hbWUubG9jYWxOYW1lKCksIHJlcG9ydEVycm9ycyk7IH0gLy8gQ29udmVuaWVuY2UgZnVu
Y3Rpb24gZm9yIHJlYWRhYmlsaXR5LgotICAgIHZvaWQgcG9wT25lQmxvY2soKTsKLSAgICB2b2lk
IG1vdmVPbmVCbG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhlYWQpOwotICAgIGlubGluZSBI
VE1MU3RhY2tFbGVtKiBwb3BPbmVCbG9ja0NvbW1vbigpOwotICAgIHZvaWQgcG9wSW5saW5lQmxv
Y2tzKCk7Ci0KLSAgICB2b2lkIGZyZWVCbG9jaygpOwotCi0gICAgdm9pZCBjcmVhdGVIZWFkKCk7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKLSAgICBzdGF0aWMgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgdm9pZCBoYW5kbGVSZXNpZHVhbFN0eWxl
Q2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSopOwotICAgIHZvaWQgcmVvcGVuUmVz
aWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSosIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50
KTsKLQotICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRpbmdUYWcoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKTsKLQotICAgIGJvb2wgaXNJbmxpbmUoTm9kZSopIGNvbnN0Owot
ICAgIAotICAgIHZvaWQgc3RhcnRCb2R5KCk7IC8vIGluc2VydHMgdGhlIGlzaW5kZXggZWxlbWVu
dAotICAgIFBhc3NSZWZQdHI8Tm9kZT4gaGFuZGxlSXNpbmRleChUb2tlbiopOwotCi0gICAgdm9p
ZCBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7Ci0gICAgYm9vbCBoYXNQRWxlbWVudEluU2Nv
cGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1faGFzUEVsZW1lbnRJblNjb3BlID09IFVua25vd24p
Ci0gICAgICAgICAgICBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7Ci0gICAgICAgIHJldHVy
biBtX2hhc1BFbGVtZW50SW5TY29wZSA9PSBJblNjb3BlOwotICAgIH0KLQotICAgIHZvaWQgcmVw
b3J0RXJyb3IoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyogdGFnTmFtZTEgPSAwLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyID0gMCwgYm9vbCBj
bG9zZVRhZ3MgPSBmYWxzZSkKLSAgICB7IGlmICghbV9yZXBvcnRFcnJvcnMpIHJldHVybjsgcmVw
b3J0RXJyb3JUb0NvbnNvbGUoZXJyb3JDb2RlLCB0YWdOYW1lMSwgdGFnTmFtZTIsIGNsb3NlVGFn
cyk7IH0KLQotICAgIHZvaWQgcmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNlckVycm9yQ29k
ZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdO
YW1lMiwgYm9vbCBjbG9zZVRhZ3MpOwotICAgIAotICAgIERvY3VtZW50KiBtX2RvY3VtZW50Owot
Ci0gICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9uZSBuZXcgZWxlbWVu
dHMgd2lsbCBiZSBhZGRlZCB0bykuIENhbiBiZSBhIGRvY3VtZW50IGZyYWdtZW50LCBhIGRvY3Vt
ZW50IG9yIGFuIGVsZW1lbnQuCi0gICAgTm9kZSogbV9jdXJyZW50OwotICAgIC8vIFdlIGNhbid0
IHJlZiBhIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFudGx5IGNoZWNrIGlm
IGEgbm9kZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZGVyZWYuCi0g
ICAgYm9vbCBtX2RpZFJlZkN1cnJlbnQ7Ci0KLSAgICBIVE1MU3RhY2tFbGVtKiBtX2Jsb2NrU3Rh
Y2s7Ci0KLSAgICAvLyBUaGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlvcml0eSBtaW5CbG9ja0xl
dmVsVGFnUHJpb3JpdHkgb3IgaGlnaGVyCi0gICAgLy8gY3VycmVudGx5IGluIG1fYmxvY2tTdGFj
ay4gVGhlIHBhcnNlciBlbmZvcmNlcyBhIGNhcCBvbiB0aGlzIHZhbHVlIGJ5Ci0gICAgLy8gYWRk
aW5nIHN1Y2ggbmV3IGVsZW1lbnRzIGFzIHNpYmxpbmdzIGluc3RlYWQgb2YgY2hpbGRyZW4gb25j
ZSBpdCBpcyByZWFjaGVkLgotICAgIHNpemVfdCBtX2Jsb2Nrc0luU3RhY2s7Ci0gICAgLy8gRGVw
dGggb2YgdGhlIHRyZWUuCi0gICAgdW5zaWduZWQgbV90cmVlRGVwdGg7Ci0KLSAgICBlbnVtIEVs
ZW1lbnRJblNjb3BlU3RhdGUgeyBOb3RJblNjb3BlLCBJblNjb3BlLCBVbmtub3duIH07IAotICAg
IEVsZW1lbnRJblNjb3BlU3RhdGUgbV9oYXNQRWxlbWVudEluU2NvcGU7Ci0KLSAgICBSZWZQdHI8
SFRNTEZvcm1FbGVtZW50PiBtX2N1cnJlbnRGb3JtRWxlbWVudDsgLy8gY3VycmVudGx5IGFjdGl2
ZSBmb3JtCi0gICAgUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBtX2N1cnJlbnRNYXBFbGVtZW50OyAv
LyBjdXJyZW50IG1hcAotICAgIFJlZlB0cjxIVE1MSGVhZEVsZW1lbnQ+IG1faGVhZDsgLy8gaGVh
ZCBlbGVtZW50OyBuZWVkZWQgZm9yIEhUTUwgd2hpY2ggZGVmaW5lcyA8YmFzZT4gYWZ0ZXIgPC9o
ZWFkPgotICAgIFJlZlB0cjxOb2RlPiBtX2lzaW5kZXhFbGVtZW50OyAvLyBhIHBvc3NpYmxlIDxp
c2luZGV4PiBlbGVtZW50IGluIHRoZSBoZWFkCi0KLSAgICBib29sIG1faW5Cb2R5OwotICAgIGJv
b2wgbV9oYXZlQ29udGVudDsKLSAgICBib29sIG1faGF2ZUZyYW1lU2V0OwotCi0gICAgQXRvbWlj
U3RyaW5nIG1fc2tpcE1vZGVUYWc7IC8vIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwg
dGFncyB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCi0KLSAgICBib29sIG1faXNQ
YXJzaW5nRnJhZ21lbnQ7Ci0gICAgYm9vbCBtX3JlcG9ydEVycm9yczsKLSAgICBib29sIG1faGFu
ZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOwotICAgIGludCBtX2luU3RyYXlUYWJsZUNv
bnRlbnQ7Ci0gICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fc2NyaXB0aW5nUGVybWlz
c2lvbjsKLQotICAgIE93blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBtX3BhcnNlclF1aXJrczsKLX07
Ci0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpCi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCopOwotI2Vs
c2UKLWlubGluZSBib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCopIHsgcmV0
dXJuIHRydWU7IH0KLSNlbmRpZgotCi0vLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0
byBhIGZsb2F0aW5nIG51bWJlci4KLS8vIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCB0aGUgcmV0
dXJuIHZhbHVlIGlzIGZhbHNlLiBUYWtlIGNhcmUgdGhhdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHVu
bmVjZXNzYXJ5IGNoYXJhY3RlcnMgbWFrZSBmYWlsdXJlcy4gIFRoaXMgcmV0dXJucyBmYWxzZSBm
b3IgYW4gZW1wdHkgc3RyaW5nIGlucHV0LgotLy8gVGhlIGRvdWJsZSogcGFyYW1ldGVyIG1heSBi
ZSAwLgotYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJpbmcmLCBkb3Vi
bGUqKTsKLS8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHRvIGEgc3RyaW5nLiBUaGlz
IGlzIGFuIGltcGxlbWVudGF0aW9uIG9mCi0vLyBIVE1MNSdzICJhbGdvcml0aG0gdG8gY29udmVy
dCBhIG51bWJlciB0byBhIHN0cmluZyIgZm9yIE5VTUJFUi9SQU5HRSB0eXBlcy4KLVN0cmluZyBz
ZXJpYWxpemVGb3JOdW1iZXJUeXBlKGRvdWJsZSk7Ci0KLX0KLSAgICAKLSNlbmRpZiAvLyBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCShyZXZpc2lvbiA2MTY3
MikKKysrIFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3
ICsyMyw3IEBACiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlk
aXR5U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNw
cAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZWd1
bGFyRXhwcmVzc2lvbi5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZp
c2lvbiA2MTY3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWls
ZGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59492</attachid>
            <date>2010-06-23 01:52:41 -0700</date>
            <delta_ts>2010-06-23 01:56:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41053-20100623015239.patch</filename>
            <type>text/plain</type>
            <size>224386</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA2LTIzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVu
YW1lIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgdG8gTGVnYWN5SFRNTFRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTA1MworCisg
ICAgICAgIFRoZXJlIHdhcyBzb21lIGRlYmF0ZSBhYm91dCB3aGV0aGVyIHRvIGNhbGwgdGhpcyBj
bGFzcyAoYW5kIHRoZQorICAgICAgICBub24tbGVnYWN5IHZlcnNpb24pICJ0cmVlIGJ1aWxkZXIi
IG9yICJ0cmVlIGNvbnN0cnVjdG9yIi4gIE1hY2llagorICAgICAgICBwb2ludGVkIG91dCB0aGF0
IG90aGVyIGltcGxlbWVudGF0aW9ucyAoaW5jbHVkaW5nIE1vemlsbGEgYW5kIEhUTUw1TGliKQor
ICAgICAgICBjYWxsIGl0IGEgdHJlZSBidWlsZGVyLiAgVGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0
YW5jZSBzZWVtcyB0byBiZSBjYWxsCisgICAgICAgIGl0IHRoYXQgZm9yIG5vdy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGh0bWwv
SFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBh
cnNlcjo6aHRtbFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9IVE1M
VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6bGVnYWN5
VHJlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aHRt
bFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OkxlZ2FjeUhUTUxU
cmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6On5M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OnNldEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjps
aW1pdERlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aW5z
ZXJ0Tm9kZUFmdGVyTGltaXREZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnBhcnNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpwYXJzZURvY3R5cGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Omluc2VydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJhbWVzZXRDcmVh
dGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkZENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkdENyZWF0ZUVycm9yQ2hlY2spOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9yQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpydENyZWF0ZUVy
cm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVT
ZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0
ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpw
Q2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MVHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0hlYWRpbmdUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVSZXNp
ZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnB1c2hCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wT25lQmxvY2tDb21tb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwb3BPbmVCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om1vdmVPbmVCbG9ja1RvU3RhY2spOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjaGVja0lmSGFzUEVsZW1lbnRJblNjb3Bl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wSW5saW5lQmxv
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJlZUJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlSGVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZUlzaW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzdGFydEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlcG9ydEVycm9yVG9Db25zb2xl
KToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oLgorICAgICAgICAqIGh0bWwv
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9M
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9TdGVw
UmFuZ2UuY3BwOgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CisKIDIwMTAtMDYtMjMgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJ
KHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQsNyArMjY0LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAJaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwIFwKIAlodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAgXAogCWh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBcCi0JaHRtbC9MZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yLmNwcCBcCisJaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
IAlodG1sL0hUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1
bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgXApJbmRleDogV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTk3Miw3ICs5NzIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAK
ICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCi0gICAgaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcAorICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAogICAgIGh0
bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwCiAgICAgaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVy
LmNwcAogICAgIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDYxNjc1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTIy
MSw4ICsxMjIxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBh
cmFncmFwaEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwK
IAlXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHAgXAotCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggXAorCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
KwlXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggXAogCVdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclF1aXJrcy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjA4LDggKzE2MDgsOCBAQAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQu
aCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvci5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgnLAogICAgICAg
ICAgICAgJ2h0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwJywKICAgICAgICAgICAgICdodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcnNlclNj
aGVkdWxlci5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw3ICs2NzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0bWwvSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwKLSAgICBodG1sL0xl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVp
bGRlci5jcHAgXAogICAgIGh0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIFwKICAgICBodG1s
L0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIFwKICAgICBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNw
cCBcCkBAIC0xNDE3LDcgKzE0MTcsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0hUTUxQYXJh
Z3JhcGhFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKICAgICBodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmggXAotICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5oIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIFwKICAgICBodG1sL0hU
TUxQbHVnSW5FbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIFwK
ICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2NTM3LDExICszNjUzNywxMSBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
ci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ4Miw3
ICsyNDgyLDcgQEAKIAkJOTNFQjM1NUYwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwICovOyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOThFRjA4
MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYz
NUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJOTNGMTk4RUYwODI0
NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8q
IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlB
QkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI1MTIsNyArMjUxMiw3IEBACiAJCTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3Jl
Vmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSAqLzsg
fTsKIAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2
MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBOTIwODI0NUU1OTAw
MUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5j
cHAgKi87IH07Ci0JCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjUwMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKKwkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVl
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI1MjAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NzgwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovOyB9OwogCQk5
M0YxOUFCOTA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmNwcCAqLzsgfTsKQEAgLTEwNjU4LDggKzEwNjU4LDggQEAKIAkJRjUyM0QyM0MwMkRFNDM5
NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjNFMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRjAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjUwMDJERTQzOTYw
MTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJRjUyM0QyNTAwMkRFNDM5NjAx
ODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKKwkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNE
MjUzMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQlGNTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNl
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xMzc1Niw4ICsxMzc1Niw4IEBA
CiAJCQkJQjAxNDlFN0MxMUE0QjIxNTAwMTk2QTdCIC8qIEltYWdlUmVzaXplclRocmVhZC5oICov
LAogCQkJCUE0NTZGQTI0MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5jcHAgKi8s
CiAJCQkJQTQ1NkZBMjUxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggKi8sCi0J
CQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Iu
Y3BwICovLAotCQkJCUY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggKi8sCisJCQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhU
TUxUcmVlQnVpbGRlci5jcHAgKi8sCisJCQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oICovLAogCQkJCUU0NDYxMzlCMENENjMzMTAwMEZBREE3NSAv
KiBNZWRpYUVycm9yLmggKi8sCiAJCQkJRTQ0NjEzOUMwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlh
RXJyb3IuaWRsICovLAogCQkJCUU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBMZWdhY3lQcmVs
b2FkU2Nhbm5lci5jcHAgKi8sCkBAIC0xODY4NSw3ICsxODY4NSw3IEBACiAJCQkJQTQ1NkZBMjcx
MUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUVDOUFGQjBBNzFBMkM2MDBFRUVBRUQgLyogTGFuZ3VhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjE5OEVGMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1MEQ5MUU2QUYw
MDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NUJF
QjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5
MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKQEAgLTIxMTA3
LDcgKzIxMTA3LDcgQEAKIAkJCQlBNDU2RkEyNjExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8q
IExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4
IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTlCMDgyNDVFNTkw
MDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdl
YkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVD
IC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBF
QUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDcgKzc2LDcgQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRpdGxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
IgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcjsK
KyAgICBjbGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiAgICAgY2xhc3MgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOwogICAgIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKICAgICBjbGFzcyBYU1NB
dWRpdG9yOwpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkge30KIAot
ICAgICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIGh0bWxUcmVlQ29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyKiBodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
ICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJz
ZXIoKSB7IHJldHVybiAwOyB9CiAKICAgICAgICAgWFNTQXVkaXRvciogeHNzQXVkaXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fWFNTQXVkaXRvcjsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAJKHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgSFRNTERvY3VtZW50UGFy
c2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSAogICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKICAg
ICAsIG1fdG9rZW5pemVyKG5ldyBIVE1MVG9rZW5pemVyKQogICAgICwgbV9zY3JpcHRSdW5uZXIo
bmV3IEhUTUxTY3JpcHRSdW5uZXIoZG9jdW1lbnQsIHRoaXMpKQotICAgICwgbV90cmVlQ29uc3Ry
dWN0b3IobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rva2VuaXplci5nZXQoKSwgZG9jdW1lbnQsIHJl
cG9ydEVycm9ycykpCisgICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBIVE1MVHJlZUJ1aWxkZXIobV90
b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQogICAgICwgbV9wYXJzZXJT
Y2hlZHVsZXIobmV3IEhUTUxQYXJzZXJTY2hlZHVsZXIodGhpcykpCiAgICAgLCBtX2VuZFdhc0Rl
bGF5ZWQoZmFsc2UpCiAgICAgLCBtX3dyaXRlTmVzdGluZ0xldmVsKDApCkBAIC04Miw3ICs4Miw3
IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEgKIEhUTUxEb2N1bWVu
dFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKICAgICA6IG1f
ZG9jdW1lbnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3Rva2VuaXplcihuZXcgSFRN
TFRva2VuaXplcikKLSAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBIVE1MVHJlZUJ1aWxkZXIo
bV90b2tlbml6ZXIuZ2V0KCksIGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAs
IG1fdHJlZUJ1aWxkZXIobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rva2VuaXplci5nZXQoKSwgZnJh
Z21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQogICAgICwgbV9lbmRXYXNEZWxheWVkKGZhbHNl
KQogICAgICwgbV93cml0ZU5lc3RpbmdMZXZlbCgwKQogewpAQCAtMTE1LDcgKzExNSw3IEBAIGJv
b2wgSFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nRGF0YSgKIAogdm9pZCBIVE1MRG9jdW1l
bnRQYXJzZXI6OnB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKFN5bmNocm9ub3VzTW9kZSBtb2RlKQog
ewotICAgIGlmIChtX3BhcnNlclN0b3BwZWQgfHwgbV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2Vk
KCkpCisgICAgaWYgKG1fcGFyc2VyU3RvcHBlZCB8fCBtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBPbmNlIGEgcmVzdW1lIGlzIHNjaGVkdWxlZCwg
SFRNTFBhcnNlclNjaGVkdWxlciBjb250cm9scyB3aGVuIHdlIG5leHQgcHVtcC4KQEAgLTE0MCwx
MiArMTQwLDEyIEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWYKICAg
ICBwdW1wVG9rZW5pemVyKEFsbG93WWllbGQpOwogfQogCi1ib29sIEhUTUxEb2N1bWVudFBhcnNl
cjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3RvcigpCitib29sIEhUTUxEb2N1bWVu
dFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCkKIHsKLSAgICBBU1NFUlQo
bV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVChtX3RyZWVCdWlsZGVy
LT5pc1BhdXNlZCgpKTsKIAogICAgIGludCBzY3JpcHRTdGFydExpbmUgPSAwOwotICAgIFJlZlB0
cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQ29uc3RydWN0b3ItPnRha2VTY3JpcHRU
b1Byb2Nlc3Moc2NyaXB0U3RhcnRMaW5lKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gc2NyaXB0RWxl
bWVudCA9IG1fdHJlZUJ1aWxkZXItPnRha2VTY3JpcHRUb1Byb2Nlc3Moc2NyaXB0U3RhcnRMaW5l
KTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0UnVubmVyIHdoZW4gcGFyc2luZyBh
IERvY3VtZW50RnJhZ21lbnQuCiAgICAgaWYgKCFtX3NjcmlwdFJ1bm5lcikKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJ1
blNjcmlwdHNGb3JQYQogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3lu
Y2hyb25vdXNNb2RlIG1vZGUpCiB7CiAgICAgQVNTRVJUKCFtX3BhcnNlclN0b3BwZWQpOwotICAg
IEFTU0VSVCghbV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOworICAgIEFTU0VSVCghbV90
cmVlQnVpbGRlci0+aXNQYXVzZWQoKSk7CiAgICAgQVNTRVJUKCFpc1NjaGVkdWxlZEZvclJlc3Vt
ZSgpKTsKIAogICAgIC8vIFdlIHRlbGwgdGhlIEluc3BlY3RvclRpbWVsaW5lQWdlbnQgYWJvdXQg
ZXZlcnkgcHVtcCwgZXZlbiBpZiB3ZQpAQCAtMTY4LDE2ICsxNjgsMTYgQEAgdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoUwogICAgICAgICBpZiAoIW1fdG9rZW5pemVyLT5u
ZXh0VG9rZW4obV9pbnB1dC5jdXJyZW50KCksIG1fdG9rZW4pKQogICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgbV90cmVlQ29uc3RydWN0b3ItPmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4obV90
b2tlbik7CisgICAgICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWVGcm9tVG9rZW4obV90
b2tlbik7CiAgICAgICAgIG1fdG9rZW4uY2xlYXIoKTsKIAogICAgICAgICAvLyBUaGUgcGFyc2Vy
IHdpbGwgcGF1c2UgaXRzZWxmIHdoZW4gd2FpdGluZyBvbiBhIHNjcmlwdCB0byBsb2FkIG9yIHJ1
bi4KLSAgICAgICAgaWYgKCFtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSkKKyAgICAgICAg
aWYgKCFtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgLy8gSWYgd2UncmUgcGF1c2VkIHdhaXRpbmcgZm9yIGEgc2NyaXB0LCB3ZSB0cnkg
dG8gZXhlY3V0ZSBzY3JpcHRzIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICBib29sIHNob3Vs
ZENvbnRpbnVlUGFyc2luZyA9IHJ1blNjcmlwdHNGb3JQYXVzZWRUcmVlQ29uc3RydWN0b3IoKTsK
LSAgICAgICAgbV90cmVlQ29uc3RydWN0b3ItPnNldFBhdXNlZCghc2hvdWxkQ29udGludWVQYXJz
aW5nKTsKKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZVBhcnNpbmcgPSBydW5TY3JpcHRzRm9y
UGF1c2VkVHJlZUJ1aWxkZXIoKTsKKyAgICAgICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKCFz
aG91bGRDb250aW51ZVBhcnNpbmcpOwogICAgICAgICBpZiAoIXNob3VsZENvbnRpbnVlUGFyc2lu
ZykKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIEhU
TUxEb2N1bWVudFBhcnNlcjo6ZW5kKCkKICAgICBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShGb3Jj
ZVN5bmNocm9ub3VzKTsKIAogICAgIC8vIEluZm9ybXMgdGhlIHRoZSByZXN0IG9mIFdlYkNvcmUg
dGhhdCBwYXJzaW5nIGlzIHJlYWxseSBmaW5pc2hlZCAoYW5kIGRlbGV0ZXMgdGhpcykuCi0gICAg
bV90cmVlQ29uc3RydWN0b3ItPmZpbmlzaGVkKCk7CisgICAgbV90cmVlQnVpbGRlci0+ZmluaXNo
ZWQoKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmF0dGVtcHRUb0VuZCgpCkBAIC0z
MDksMjAgKzMwOSwyMCBAQCBpbnQgSFRNTERvY3VtZW50UGFyc2VyOjpjb2x1bW5OdW1iZXIoKSBj
CiAgICAgcmV0dXJuIG1fdG9rZW5pemVyLT5jb2x1bW5OdW1iZXIoKTsKIH0KIAotTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3RvciogSFRNTERvY3VtZW50UGFyc2VyOjpodG1sVHJlZUNvbnN0cnVjdG9y
KCkgY29uc3QKK0xlZ2FjeUhUTUxUcmVlQnVpbGRlciogSFRNTERvY3VtZW50UGFyc2VyOjpodG1s
VHJlZUJ1aWxkZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rvci0+bGVn
YWN5VHJlZUNvbnN0cnVjdG9yKCk7CisgICAgcmV0dXJuIG1fdHJlZUJ1aWxkZXItPmxlZ2FjeVRy
ZWVCdWlsZGVyKCk7CiB9CiAKIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JT
Y3JpcHRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2Vk
KCk7CisgICAgcmV0dXJuIG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCk7CiB9CiAKIHZvaWQgSFRN
TERvY3VtZW50UGFyc2VyOjpyZXN1bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKQogewog
ICAgIEFTU0VSVCghaW5TY3JpcHRFeGVjdXRpb24oKSk7Ci0gICAgQVNTRVJUKCFtX3RyZWVDb25z
dHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisgICAgQVNTRVJUKCFtX3RyZWVCdWlsZGVyLT5pc1BhdXNl
ZCgpKTsKIAogICAgIHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKEFsbG93WWllbGQpOwogCkBAIC0z
NTksMTIgKzM1OSwxMiBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQo
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKCFpblNjcmlwdEV4ZWN1dGlvbigp
KTsKLSAgICBBU1NFUlQobV90cmVlQ29uc3RydWN0b3ItPmlzUGF1c2VkKCkpOworICAgIEFTU0VS
VChtX3RyZWVCdWlsZGVyLT5pc1BhdXNlZCgpKTsKICAgICAvLyBOb3RlOiBXZSBvbmx5IGV2ZXIg
d2FpdCBvbiBvbmUgc2NyaXB0IGF0IGEgdGltZSwgc28gd2UgYWx3YXlzIGtub3cgdGhpcwogICAg
IC8vIGlzIHRoZSBvbmUgd2Ugd2VyZSB3YWl0aW5nIG9uIGFuZCBjYW4gdW4tcGF1c2UgdGhlIHRy
ZWUgYnVpbGRlci4KLSAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+c2V0UGF1c2VkKGZhbHNlKTsKKyAg
ICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoZmFsc2UpOwogICAgIGJvb2wgc2hvdWxkQ29udGlu
dWVQYXJzaW5nID0gbV9zY3JpcHRSdW5uZXItPmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvckxvYWQo
Y2FjaGVkUmVzb3VyY2UpOwotICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoIXNob3Vs
ZENvbnRpbnVlUGFyc2luZyk7CisgICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKCFzaG91bGRD
b250aW51ZVBhcnNpbmcpOwogICAgIGlmIChzaG91bGRDb250aW51ZVBhcnNpbmcpCiAgICAgICAg
IHJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpAQCAtMzgwLDEyICszODAs
MTIgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzVwogICAgIGlmICgh
bV9zY3JpcHRSdW5uZXItPmhhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9zY3JpcHRSdW5uZXItPmluU2NyaXB0RXhlY3V0aW9u
KCkpOwotICAgIEFTU0VSVChtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisgICAgQVNT
RVJUKG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZl
ciB3YWl0IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAg
ICAgLy8gaXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUg
dHJlZSBidWlsZGVyLgotICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoZmFsc2UpOwor
ICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7CiAgICAgYm9vbCBzaG91bGRDb250
aW51ZVBhcnNpbmcgPSBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5
bGVzaGVldHMoKTsKLSAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+c2V0UGF1c2VkKCFzaG91bGRDb250
aW51ZVBhcnNpbmcpOworICAgIG1fdHJlZUJ1aWxkZXItPnNldFBhdXNlZCghc2hvdWxkQ29udGlu
dWVQYXJzaW5nKTsKICAgICBpZiAoc2hvdWxkQ29udGludWVQYXJzaW5nKQogICAgICAgICByZXN1
bWVQYXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50UGFyc2VyLmgJKHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVu
dFBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEhUTUxUb2tl
bml6ZXI7CiBjbGFzcyBIVE1MU2NyaXB0UnVubmVyOwogY2xhc3MgSFRNTFRyZWVCdWlsZGVyOwog
Y2xhc3MgSFRNTFByZWxvYWRTY2FubmVyOwotY2xhc3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjsKK2NsYXNzIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjsKIGNsYXNzIFNjcmlwdENvbnRyb2xsZXI7
CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCkBAIC03MCw5ICs3MCw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAg
ICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29sdW1u
TnVtYmVyKCkgY29uc3Q7Ci0gICAgLy8gRklYTUU6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgYWNj
ZXNzZXMgdGhlIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgdmlhIHRoaXMgbWV0aG9kLgotICAg
IC8vIFJlbW92ZSB0aGlzIHdoZW4gdGhlIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgaXMgbm8g
bG9uZ2VyIHVzZWQuCi0gICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKiBodG1s
VHJlZUNvbnN0cnVjdG9yKCkgY29uc3Q7CisgICAgLy8gRklYTUU6IEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQgYWNjZXNzZXMgdGhlIExlZ2FjeUhUTUxUcmVlQnVpbGRlciB2aWEgdGhpcyBtZXRob2Qu
CisgICAgLy8gUmVtb3ZlIHRoaXMgd2hlbiB0aGUgTGVnYWN5SFRNTFRyZWVCdWlsZGVyIGlzIG5v
IGxvbmdlciB1c2VkLgorICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKiBodG1sVHJl
ZUJ1aWxkZXIoKSBjb25zdDsKIAogICAgIC8vIEhUTUxTY3JpcHRSdW5uZXJIb3N0CiAgICAgdmly
dHVhbCB2b2lkIHdhdGNoRm9yTG9hZChDYWNoZWRSZXNvdXJjZSopOwpAQCAtOTgsNyArOTgsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgcHVtcFRva2VuaXplcihTeW5jaHJvbm91c01vZGUpOwogICAg
IHZvaWQgcHVtcFRva2VuaXplcklmUG9zc2libGUoU3luY2hyb25vdXNNb2RlKTsKIAotICAgIGJv
b2wgcnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3RvcigpOworICAgIGJvb2wgcnVuU2Ny
aXB0c0ZvclBhdXNlZFRyZWVCdWlsZGVyKCk7CiAgICAgdm9pZCByZXN1bWVQYXJzaW5nQWZ0ZXJT
Y3JpcHRFeGVjdXRpb24oKTsKIAogICAgIHZvaWQgYXR0ZW1wdFRvRW5kKCk7CkBAIC0xMjAsNyAr
MTIwLDcgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBPd25QdHI8
SFRNTFRva2VuaXplcj4gbV90b2tlbml6ZXI7CiAgICAgT3duUHRyPEhUTUxTY3JpcHRSdW5uZXI+
IG1fc2NyaXB0UnVubmVyOwotICAgIE93blB0cjxIVE1MVHJlZUJ1aWxkZXI+IG1fdHJlZUNvbnN0
cnVjdG9yOworICAgIE93blB0cjxIVE1MVHJlZUJ1aWxkZXI+IG1fdHJlZUJ1aWxkZXI7CiAgICAg
T3duUHRyPEhUTUxQcmVsb2FkU2Nhbm5lcj4gbV9wcmVsb2FkU2Nhbm5lcjsKICAgICBPd25QdHI8
SFRNTFBhcnNlclNjaGVkdWxlcj4gbV9wYXJzZXJTY2hlZHVsZXI7CiAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3
ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIK
ICNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlICJMYWJlbHNO
b2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTE3OCwxMSArMTc4LDExIEBAIHZvaWQg
SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb20KIHsKICAgICAvLyBJZiB0aGUgZm9y
bSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2ZSB0aGUgY29u
bmVjdGlvbiB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0IG91ciBmb3Jt
IGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVsZW1lbnRzLgot
ICAgIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIHRyZWVDb25zdHJ1Y3RvciA9IDA7CisgICAg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyKiB0cmVlQnVpbGRlciA9IDA7CiAgICAgaWYgKERvY3VtZW50
UGFyc2VyKiBwYXJzZXIgPSBkb2N1bWVudCgpLT5wYXJzZXIoKSkKLSAgICAgICAgdHJlZUNvbnN0
cnVjdG9yID0gcGFyc2VyLT5odG1sVHJlZUNvbnN0cnVjdG9yKCk7CisgICAgICAgIHRyZWVCdWls
ZGVyID0gcGFyc2VyLT5odG1sVHJlZUJ1aWxkZXIoKTsKIAotICAgIGlmIChtX2Zvcm0gJiYgISh0
cmVlQ29uc3RydWN0b3IgJiYgdHJlZUNvbnN0cnVjdG9yLT5pc0hhbmRsaW5nUmVzaWR1YWxTdHls
ZUFjcm9zc0Jsb2NrcygpKSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5kUm9vdChtX2Zvcm0pKSB7
CisgICAgaWYgKG1fZm9ybSAmJiAhKHRyZWVCdWlsZGVyICYmIHRyZWVCdWlsZGVyLT5pc0hhbmRs
aW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcygpKSAmJiBmaW5kUm9vdCh0aGlzKSAhPSBmaW5k
Um9vdChtX2Zvcm0pKSB7CiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlRm9ybUVsZW1lbnQodGhpcyk7
CiAgICAgICAgIG1fZm9ybSA9IDA7CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VM
b2FkZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxl
bWVudC5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUg
IlJlbmRlck1ldGVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNyBAQAogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDYxNjc0KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CkBAIC01MSw3ICs1MSw3IEBAIEhUTUxUcmVl
QnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2sKICAgICAsIG1faXNQYXVzZWQoZmFsc2Up
CiAgICAgLCBtX2luc2VydGlvbk1vZGUoSW5pdGlhbCkKICAgICAsIG1fdG9rZW5pemVyKHRva2Vu
aXplcikKLSAgICAsIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yKGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQorICAgICwgbV9sZWdhY3lUcmVlQnVp
bGRlcihuZXcgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQog
ICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJl
clZhbHVlKQogICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExp
bmVOdW1iZXJWYWx1ZSkKICAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdt
ZW50U2NyaXB0aW5nQWxsb3dlZCkKQEAgLTY2LDcgKzY2LDcgQEAgSFRNTFRyZWVCdWlsZGVyOjpI
VE1MVHJlZUJ1aWxkZXIoSFRNTFRvawogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1f
aW5zZXJ0aW9uTW9kZShJbml0aWFsKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVyKQotICAg
ICwgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Io
ZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQorICAgICwgbV9sZWdhY3lUcmVlQnVpbGRl
cihuZXcgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9u
KSkKICAgICAsIG1fbGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVO
dW1iZXJWYWx1ZSkKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRMaW5lKHVuaW5pdGlhbGl6
ZWRMaW5lTnVtYmVyVmFsdWUpCiAgICAgLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihz
Y3JpcHRpbmdQZXJtaXNzaW9uKQpAQCAtMTc1LDcgKzE3NSw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4g
SFRNTFRyZWVCdWlsZGVyOjpwYXNzVG8KICAgICAgICAgZG9jdHlwZVRva2VuLm1fc3lzdGVtSUQg
PSB0b2tlbi5zeXN0ZW1JZGVudGlmaWVyKCk7CiAgICAgICAgIGRvY3R5cGVUb2tlbi5tX2ZvcmNl
UXVpcmtzID0gdG9rZW4uZm9yY2VRdWlya3MoKTsKIAotICAgICAgICBtX2xlZ2FjeVRyZWVDb25z
dHJ1Y3Rvci0+cGFyc2VEb2N0eXBlVG9rZW4oJmRvY3R5cGVUb2tlbik7CisgICAgICAgIG1fbGVn
YWN5VHJlZUJ1aWxkZXItPnBhcnNlRG9jdHlwZVRva2VuKCZkb2N0eXBlVG9rZW4pOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4Myw3ICsxODMsNyBAQCBQYXNzUmVmUHRyPE5vZGU+
IEhUTUxUcmVlQnVpbGRlcjo6cGFzc1RvCiAgICAgVG9rZW4gb2xkU3R5bGVUb2tlbjsKICAgICBj
b252ZXJ0VG9PbGRTdHlsZSh0b2tlbiwgb2xkU3R5bGVUb2tlbik7CiAKLSAgICBSZWZQdHI8Tm9k
ZT4gcmVzdWx0ID0gIG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yLT5wYXJzZVRva2VuKCZvbGRTdHls
ZVRva2VuKTsKKyAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gIG1fbGVnYWN5VHJlZUJ1aWxkZXIt
PnBhcnNlVG9rZW4oJm9sZFN0eWxlVG9rZW4pOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuOjpTdGFydFRhZykgewogICAgICAgICAvLyBUaGlzIHdvcmsgaXMgc3VwcG9zZWQgdG8g
YmUgZG9uZSBieSB0aGUgcGFyc2VyLCBidXQKICAgICAgICAgLy8gd2hlbiB1c2luZyB0aGUgb2xk
IHBhcnNlciBmb3Igd2UgaGF2ZSB0byBkbyB0aGlzIG1hbnVhbGx5LgpAQCAtMjQ3LDggKzI0Nyw4
IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXMKIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpmaW5pc2hlZCgpCiB7CiAgICAgLy8gV2Ugc2hvdWxkIGNhbGwgbV9kb2N1bWVu
dC0+ZmluaXNoZWRQYXJzaW5nKCkgaGVyZSwgZXhjZXB0Ci0gICAgLy8gbV9sZWdhY3lUcmVlQ29u
c3RydWN0b3ItPmZpbmlzaGVkKCkgZG9lcyBpdCBmb3IgdXMuCi0gICAgbV9sZWdhY3lUcmVlQ29u
c3RydWN0b3ItPmZpbmlzaGVkKCk7CisgICAgLy8gbV9sZWdhY3lUcmVlQnVpbGRlci0+ZmluaXNo
ZWQoKSBkb2VzIGl0IGZvciB1cy4KKyAgICBtX2xlZ2FjeVRyZWVCdWlsZGVyLT5maW5pc2hlZCgp
OwogfQogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6aXNTY3JpcHRpbmdGbGFnRW5hYmxlZChGcmFt
ZSogZnJhbWUpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCShyZXZpc2lvbiA2MTY3NCkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1MVG9rZW47CiBj
bGFzcyBIVE1MRG9jdW1lbnQ7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOworY2xh
c3MgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgTm9kZTsKIAogY2xhc3MgSFRNTFRyZWVC
dWlsZGVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgog
CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSBkaXJ0eSwgcm90dGVuIGhhY2sgdG8ga2VlcCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50IGhhcHB5CiAgICAgLy8gdW50aWwgd2Ugc3RvcCB1c2luZyB0aGUg
bGVnYWN5IHBhcnNlci4gRE8gTk9UIENBTEwgVEhJUyBNRVRIT0QuCi0gICAgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3RvciogbGVnYWN5VHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9s
ZWdhY3lUcmVlQ29uc3RydWN0b3IuZ2V0KCk7IH0KKyAgICBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIq
IGxlZ2FjeVRyZWVCdWlsZGVyKCkgY29uc3QgeyByZXR1cm4gbV9sZWdhY3lUcmVlQnVpbGRlci5n
ZXQoKTsgfQogCiBwcml2YXRlOgogICAgIC8vIFJlcHJlc2VudHMgSFRNTDUgImluc2VydGlvbiBt
b2RlIgpAQCAtOTksOCArOTksOCBAQCBwcml2YXRlOgogICAgIC8vIGZyb20gd2l0aGluIHBhcnNl
ciBhY3Rpb25zLgogICAgIEhUTUxUb2tlbml6ZXIqIG1fdG9rZW5pemVyOwogCi0gICAgLy8gV2Un
cmUgcmUtdXNpbmcgbG9naWMgZnJvbSB0aGUgb2xkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Ig
d2hpbGUgdGhpcyBjbGFzcyBpcyBiZWluZyB3cml0dGVuLgotICAgIE93blB0cjxMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yPiBtX2xlZ2FjeVRyZWVDb25zdHJ1Y3RvcjsKKyAgICAvLyBXZSdyZSBy
ZS11c2luZyBsb2dpYyBmcm9tIHRoZSBvbGQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyIHdoaWxlIHRo
aXMgY2xhc3MgaXMgYmVpbmcgd3JpdHRlbi4KKyAgICBPd25QdHI8TGVnYWN5SFRNTFRyZWVCdWls
ZGVyPiBtX2xlZ2FjeVRyZWVCdWlsZGVyOwogCiAgICAgLy8gVGhlc2UgbWVtYmVycyBhcmUgaW50
ZW50aW9uYWxseSBkdXBsaWNhdGVkIGFzIHRoZSBmaXJzdCBzZXQgaXMgYSBoYWNrCiAgICAgLy8g
b24gdG9wIG9mIHRoZSBsZWdhY3kgcGFyc2VyIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBiZSByZW1v
dmVkLgpJbmRleDogV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAJKHJl
dmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0j
aW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhU
TUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5oIgogI2luY2x1ZGUgIkltYWdlTG9hZGVyLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNp
bmNsdWRlICJMZWdhY3lQcmVsb2FkU2Nhbm5lci5oIgorI2luY2x1ZGUgIlByZWxvYWRTY2FubmVy
LmgiCiAjaW5jbHVkZSAiU2NyaXB0U291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVl
LmgiCiAjaW5jbHVkZSAiWFNTQXVkaXRvci5oIgpAQCAtMTU5LDcgKzE1OSw3IEBAIExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3UKICAgICAsIG1fdGltZXIodGhpcywgJkxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKICAgICAsIG1fZXh0ZXJuYWxTY3Jp
cHRzVGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFs
U2NyaXB0c1RpbWVyRmlyZWQpCiAgICAgLCBtX2RvYyhkb2MpCi0gICAgLCBtX3RyZWVDb25zdHJ1
Y3RvcihuZXcgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcihkb2MsIHJlcG9ydEVycm9ycykpCisg
ICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZG9jLCByZXBvcnRF
cnJvcnMpKQogICAgICwgbV9pbldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudChmYWxzZSkK
ICAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCkBA
IC0xOTksNyArMTk5LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9j
dQogICAgICwgbV90aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZp
cmVkKQogICAgICwgbV9leHRlcm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKICAgICAsIG1fZG9j
KGZyYWctPmRvY3VtZW50KCkpCi0gICAgLCBtX3RyZWVDb25zdHJ1Y3RvcihuZXcgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3RvcihmcmFnLCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKKyAgICAsIG1fdHJl
ZUJ1aWxkZXIobmV3IExlZ2FjeUhUTUxUcmVlQnVpbGRlcihmcmFnLCBzY3JpcHRpbmdQZXJtaXNz
aW9uKSkKICAgICAsIG1faW5Xcml0ZShmYWxzZSkKICAgICAsIG1fZnJhZ21lbnQodHJ1ZSkKICAg
ICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9uKQpAQCAtNDMxLDcg
KzQzMSw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFQKICAgICBp
ZiAoIWluVmlld1NvdXJjZU1vZGUoKSkgewogICAgICAgICBpZiAoIW1fc2NyaXB0VGFnU3JjQXR0
clZhbHVlLmlzRW1wdHkoKSAmJiBtX2RvYy0+ZnJhbWUoKSkgewogICAgICAgICAgICAgLy8gZm9y
Z2V0IHdoYXQgd2UganVzdCBnb3Q7IGxvYWQgZnJvbSBzcmMgdXJsIGluc3RlYWQKLSAgICAgICAg
ICAgIGlmICghbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1l
c2V0KSB7CisgICAgICAgICAgICBpZiAoIW1fdHJlZUJ1aWxkZXItPnNraXBNb2RlKCkgJiYgIWZv
bGxvd2luZ0ZyYW1lc2V0KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHBhcnNlciBtaWdodCBo
YXZlIGJlZW4gc3RvcHBlZCBieSBmb3IgZXhhbXBsZSBhIHdpbmRvdy5jbG9zZSBjYWxsIGluIGFu
IGVhcmxpZXIgc2NyaXB0LgogICAgICAgICAgICAgICAgIC8vIElmIHNvLCB3ZSBkb24ndCB3YW50
IHRvIGxvYWQgc2NyaXB0cy4KICAgICAgICAgICAgICAgICBpZiAoIW1fcGFyc2VyU3RvcHBlZCAm
JiBtX3NjcmlwdE5vZGUtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KG1fc2NyaXB0VGFnU3JjQXR0
clZhbHVlKSAmJgpAQCAtNDc4LDcgKzQ3OCw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgTGVnYWN5SFQKICAgICBTZWdtZW50ZWRTdHJpbmcgcHJlcGVuZGluZ1NyYzsKICAgICBt
X2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gJnByZXBlbmRpbmdTcmM7CiAKLSAgICBpZiAoIW1fdHJl
ZUNvbnN0cnVjdG9yLT5za2lwTW9kZSgpICYmICFmb2xsb3dpbmdGcmFtZXNldCkgeworICAgIGlm
ICghbV90cmVlQnVpbGRlci0+c2tpcE1vZGUoKSAmJiAhZm9sbG93aW5nRnJhbWVzZXQpIHsKICAg
ICAgICAgaWYgKGNzKSB7CiAgICAgICAgICAgICBpZiAoc2F2ZWRQcmVwZW5kaW5nU3JjKQogICAg
ICAgICAgICAgICAgIHNhdmVkUHJlcGVuZGluZ1NyYy0+YXBwZW5kKG1fc3JjKTsKQEAgLTUzMyw3
ICs1MzMsNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUCiAjaWYg
UFJFTE9BRF9TQ0FOTkVSX0VOQUJMRUQKICAgICBpZiAoIW1fcGVuZGluZ1NjcmlwdHMuaXNFbXB0
eSgpICYmICFtX2V4ZWN1dGluZ1NjcmlwdCkgewogICAgICAgICBpZiAoIW1fcHJlbG9hZFNjYW5u
ZXIpCi0gICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLnNldChuZXcgTGVnYWN5UHJlbG9hZFNj
YW5uZXIobV9kb2MpKTsKKyAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIuc2V0KG5ldyBQcmVs
b2FkU2Nhbm5lcihtX2RvYykpOwogICAgICAgICBpZiAoIW1fcHJlbG9hZFNjYW5uZXItPmluUHJv
Z3Jlc3MoKSkgewogICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+YmVnaW4oKTsKICAgICAg
ICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPndyaXRlKG1fcGVuZGluZ1NyYyk7CkBAIC01ODQsNyAr
NTg0LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVAogI2lmIFBS
RUxPQURfU0NBTk5FUl9FTkFCTEVECiAgICAgICAgICAgICAvLyBXZSBhcmUgc3R1Y2sgd2FpdGlu
ZyBmb3IgYW5vdGhlciBzY3JpcHQuIExldHMgY2hlY2sgdGhlIHNvdXJjZSB0aGF0CiAgICAgICAg
ICAgICAvLyB3YXMganVzdCBkb2N1bWVudC53cml0ZSgpbiBmb3IgYW55dGhpbmcgdG8gbG9hZC4K
LSAgICAgICAgICAgIExlZ2FjeVByZWxvYWRTY2FubmVyIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nh
bm5lcihtX2RvYyk7CisgICAgICAgICAgICBQcmVsb2FkU2Nhbm5lciBkb2N1bWVudFdyaXRlUHJl
bG9hZFNjYW5uZXIobV9kb2MpOwogICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVByZWxvYWRTY2Fu
bmVyLmJlZ2luKCk7CiAgICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIud3Jp
dGUocHJlcGVuZGluZ1NyYyk7CiAgICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5u
ZXIuZW5kKCk7CkBAIC0xMzkxLDcgKzEzOTEsNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OlN0YXRlIExlZ2FjeUhUCiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluVmll
d1NvdXJjZU1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRUb2tl
bi5hZGRWaWV3U291cmNlQ2hhcigndicpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3Jp
cHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBN
b2RlKCkgJiYgbV9hdHRyTmFtZSA9PSBzcmNBdHRyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9
PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQnVpbGRlci0+c2tp
cE1vZGUoKSAmJiBtX2F0dHJOYW1lID09IHNyY0F0dHIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgY29udGV4dChtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVlLmRhdGEoKSwg
bV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX1hTU0F1ZGl0b3IgJiYgIW1fWFNTQXVkaXRvci0+Y2FuTG9hZEV4dGVybmFs
U2NyaXB0RnJvbVNyYyhhdHRyaWJ1dGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYmxhbmtVUkwoKS5zdHJpbmcoKTsKQEAgLTE0MjgsNyAr
MTQyOCw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFQKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzQVNDSUlTcGFjZShjdXJjaGFyKSB8fCBjdXJjaGFyID09ICc+
JykgewogICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZVZhbHVl
KG1fYnVmZmVyICsgMSwgbV9kZXN0IC0gbV9idWZmZXIgLSAxKTsKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRh
Z05hbWUgPT0gc2NyaXB0VGFnICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUNvbnN0
cnVjdG9yLT5za2lwTW9kZSgpICYmIG1fYXR0ck5hbWUgPT0gc3JjQXR0cikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRv
a2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFnICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJl
ZUJ1aWxkZXItPnNraXBNb2RlKCkgJiYgbV9hdHRyTmFtZSA9PSBzcmNBdHRyKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRleHQobV9yYXdBdHRyaWJ1dGVCZWZvcmVW
YWx1ZS5kYXRhKCksIG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuc2l6ZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9YU1NBdWRpdG9yICYmICFtX1hTU0F1ZGl0b3ItPmNh
bkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoYXR0cmlidXRlVmFsdWUpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9IGJsYW5rVVJMKCkuc3RyaW5nKCk7
CkBAIC0xNDgwLDcgKzE0ODAsNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExl
Z2FjeUhUCiAgICAgICAgICAgICAvLyBjb21wYXRpYmlsaXR5LgogICAgICAgICAgICAgYm9vbCBp
c1NlbGZDbG9zaW5nU2NyaXB0ID0gbV9jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmdUYWcgJiYgbV9j
dXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRU
YWc7CiAgICAgICAgICAgICBib29sIGJlZ2luVGFnID0gIW1fY3VycmVudFRva2VuLnNlbGZDbG9z
aW5nVGFnICYmIG1fY3VycmVudFRva2VuLmJlZ2luVGFnOwotICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudFRva2VuLmJlZ2luVGFnICYmIG1fY3VycmVudFRva2VuLnRhZ05hbWUgPT0gc2NyaXB0VGFn
ICYmICFpblZpZXdTb3VyY2VNb2RlKCkgJiYgIW1fdHJlZUNvbnN0cnVjdG9yLT5za2lwTW9kZSgp
KSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50
VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90
cmVlQnVpbGRlci0+c2tpcE1vZGUoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYSA9
IDA7CiAgICAgICAgICAgICAgICAgbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUgPSBTdHJpbmcoKTsK
ICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUgPSBTdHJpbmcoKTsK
QEAgLTE4NDIsNyArMTg0Miw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjplbmQo
KQogICAgIH0KIAogICAgIGlmICghaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICBtX3RyZWVD
b25zdHJ1Y3Rvci0+ZmluaXNoZWQoKTsKKyAgICAgICAgbV90cmVlQnVpbGRlci0+ZmluaXNoZWQo
KTsKICAgICBlbHNlCiAgICAgICAgIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KQEAgLTE5
MTIsNyArMTkxMiw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTERvY3VtZW50UGFyc2UK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWV3U291cmNlRG9jdW1lbnQqPihtX2RvYykt
PmFkZFZpZXdTb3VyY2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAvLyBwYXNzIHRoZSB0b2tlbiBvdmVyIHRvIHRoZSBwYXJzZXIsIHRoZSBwYXJzZXIg
RE9FUyBOT1QgZGVsZXRlIHRoZSB0b2tlbgotICAgICAgICAgICAgbiA9IG1fdHJlZUNvbnN0cnVj
dG9yLT5wYXJzZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7CisgICAgICAgICAgICBuID0gbV90cmVl
QnVpbGRlci0+cGFyc2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOwogICAgIH0KICAgICBtX2N1cnJl
bnRUb2tlbi5yZXNldCgpOwogCkBAIC0xOTI0LDcgKzE5MjQsNyBAQCB2b2lkIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6cHJvY2Vzc0RvCiAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKICAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZXdTb3VyY2VEb2N1bWVudCo+KG1fZG9jKS0+YWRkVmll
d1NvdXJjZURvY3R5cGVUb2tlbigmbV9kb2N0eXBlVG9rZW4pOwogICAgIGVsc2UKLSAgICAgICAg
bV90cmVlQ29uc3RydWN0b3ItPnBhcnNlRG9jdHlwZVRva2VuKCZtX2RvY3R5cGVUb2tlbik7Cisg
ICAgICAgIG1fdHJlZUJ1aWxkZXItPnBhcnNlRG9jdHlwZVRva2VuKCZtX2RvY3R5cGVUb2tlbik7
CiB9CiAKIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6fkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cigpCkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oCShyZXZpc2lv
biA2MTY3NSkKKysrIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBjbGFzcyBIVE1MRG9jdW1lbnQ7CiBjbGFzcyBI
VE1MU2NyaXB0RWxlbWVudDsKIGNsYXNzIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ7CiBjbGFzcyBG
cmFtZVZpZXc7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOworY2xhc3MgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgTm9kZTsKLWNsYXNzIExlZ2FjeVByZWxvYWRTY2FubmVy
OworY2xhc3MgUHJlbG9hZFNjYW5uZXI7CiBjbGFzcyBTY3JpcHRTb3VyY2VDb2RlOwogCiAvKioK
QEAgLTE2NCw3ICsxNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNj
cmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKIAotICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3RvciogaHRtbFRyZWVDb25zdHJ1Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJl
ZUNvbnN0cnVjdG9yLmdldCgpOyB9CisgICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIq
IGh0bWxUcmVlQnVpbGRlcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlZUJ1aWxkZXIuZ2V0KCk7IH0K
ICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogYXNIVE1MRG9jdW1lbnRQYXJz
ZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKIHByaXZhdGU6CkBAIC00MzIsMTIgKzQzMiwxMiBAQCBw
cml2YXRlOgogCiAgICAgU2VnbWVudGVkU3RyaW5nIG1fc3JjOwogICAgIERvY3VtZW50KiBtX2Rv
YzsKLSAgICBPd25QdHI8TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcj4gbV90cmVlQ29uc3RydWN0
b3I7CisgICAgT3duUHRyPExlZ2FjeUhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQnVpbGRlcjsKICAg
ICBib29sIG1faW5Xcml0ZTsKICAgICBib29sIG1fZnJhZ21lbnQ7CiAgICAgRnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uIG1fc2NyaXB0aW5nUGVybWlzc2lvbjsKIAotICAgIE93blB0cjxMZWdh
Y3lQcmVsb2FkU2Nhbm5lcj4gbV9wcmVsb2FkU2Nhbm5lcjsKKyAgICBPd25QdHI8UHJlbG9hZFNj
YW5uZXI+IG1fcHJlbG9hZFNjYW5uZXI7CiB9OwogCiB2b2lkIHBhcnNlTGVnYWN5SFRNTERvY3Vt
ZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7CkluZGV4OiBXZWJD
b3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gNjE2NzIpCShmcm9tIFdl
YkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcDo2MTY3MikKKysrIFdlYkNv
cmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTc0NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9u
ZXNAa2RlLm9yZykKKyAgICAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2Rl
Lm9yZykKKyAgICAgICAgICAgICAgKEMpIDE5OTksMjAwMSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICAgICAgICAgICAgICAoQykgMjAwMCwyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBr
ZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCisj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiQ29uc29sZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5
cGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxCb2R5RWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTERMaXN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9y
eS5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxIUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSHRtbEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSXNJbmRleEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TWFwRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJz
ZXJRdWlya3MuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgY29u
c3QgdW5zaWduZWQgY01heFJlZHVuZGFudFRhZ0RlcHRoID0gMjA7CitzdGF0aWMgY29uc3QgdW5z
aWduZWQgY1Jlc2lkdWFsU3R5bGVNYXhEZXB0aCA9IDIwMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjUmVzaWR1YWxTdHlsZUl0ZXJhdGlvbkxpbWl0ID0gNTsKKworCitzdGF0aWMgY29uc3QgaW50
IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSA9IDM7CisKKy8vIEEgY2FwIG9uIHRoZSBudW1iZXIg
b2YgdGFncyB3aXRoIHByaW9yaXR5IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSBvciBoaWdoZXIK
Ky8vIGFsbG93ZWQgaW4gbV9ibG9ja1N0YWNrLiBUaGUgY2FwIGlzIGVuZm9yY2VkIGJ5IGFkZGlu
ZyBzdWNoIG5ldyBlbGVtZW50cyBhcworLy8gc2libGluZ3MgaW5zdGVhZCBvZiBjaGlsZHJlbiBv
bmNlIGl0IGlzIHJlYWNoZWQuCitzdGF0aWMgY29uc3Qgc2l6ZV90IGNNYXhCbG9ja0RlcHRoID0g
NDA5NjsKKworCit0eXBlZGVmIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IFRhZ05hbWVTZXQ7
CisKK3RlbXBsYXRlPCBzaXplX3QgQXJyYXlTaXplID4KK3N0YXRpYyB2b2lkIGFkZFRhZ3MoVGFn
TmFtZVNldCYgc2V0LCBRdWFsaWZpZWROYW1lICgmbmFtZXMpW0FycmF5U2l6ZV0pCit7CisgICAg
Zm9yIChzaXplX3QgeCA9IDA7IHggPCBBcnJheVNpemU7IHgrKykgeworICAgICAgICBjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lID0gbmFtZXNbeF07CisgICAgICAgIHNldC5hZGQobmFtZS5sb2Nh
bE5hbWUoKS5pbXBsKCkpOworICAgIH0KK30KKworc3RydWN0IEhUTUxTdGFja0VsZW0gOiBOb25j
b3B5YWJsZSB7CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcmIHQsIGludCBs
dmwsIE5vZGUqIG4sIGJvb2wgciwgSFRNTFN0YWNrRWxlbSogbngpCisgICAgICAgIDogdGFnTmFt
ZSh0KQorICAgICAgICAsIGxldmVsKGx2bCkKKyAgICAgICAgLCBzdHJheVRhYmxlQ29udGVudChm
YWxzZSkKKyAgICAgICAgLCBub2RlKG4pCisgICAgICAgICwgZGlkUmVmTm9kZShyKQorICAgICAg
ICAsIG5leHQobngpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZGVyZWZOb2RlKCkKKyAgICB7
CisgICAgICAgIGlmIChkaWRSZWZOb2RlKQorICAgICAgICAgICAgbm9kZS0+ZGVyZWYoKTsKKyAg
ICB9CisKKyAgICBBdG9taWNTdHJpbmcgdGFnTmFtZTsKKyAgICBpbnQgbGV2ZWw7CisgICAgYm9v
bCBzdHJheVRhYmxlQ29udGVudDsKKyAgICBOb2RlKiBub2RlOworICAgIGJvb2wgZGlkUmVmTm9k
ZTsKKyAgICBIVE1MU3RhY2tFbGVtKiBuZXh0OworfTsKKworLyoqCisgKiBUaGUgcGFyc2VyIHBh
cnNlcyB0b2tlbml6ZWQgaW5wdXQgaW50byB0aGUgZG9jdW1lbnQsIGJ1aWxkaW5nIHVwIHRoZQor
ICogZG9jdW1lbnQgdHJlZS4gSWYgdGhlIGRvY3VtZW50IGlzIHdlbGwtZm9ybWVkLCBwYXJzaW5n
IGl0IGlzIHN0cmFpZ2h0Zm9yd2FyZC4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRv
IGhhbmRsZSBtYW55IEhUTUwgZG9jdW1lbnRzIHRoYXQgYXJlIG5vdCB3ZWxsLWZvcm1lZCwKKyAq
IHNvIHRoZSBwYXJzZXIgaGFzIHRvIGJlIHRvbGVyYW50IGFib3V0IGVycm9ycy4KKyAqCisgKiBX
ZSBoYXZlIHRvIHRha2UgY2FyZSBvZiBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGVycm9yIGNvbmRp
dGlvbnM6CisgKgorICogMS4gVGhlIGVsZW1lbnQgYmVpbmcgYWRkZWQgaXMgZXhwbGljaXRseSBm
b3JiaWRkZW4gaW5zaWRlIHNvbWUgb3V0ZXIgdGFnLgorICogICAgSW4gdGhpcyBjYXNlIHdlIHNo
b3VsZCBjbG9zZSBhbGwgdGFncyB1cCB0byB0aGUgb25lLCB3aGljaCBmb3JiaWRzCisgKiAgICB0
aGUgZWxlbWVudCwgYW5kIGFkZCBpdCBhZnRlcndhcmRzLgorICoKKyAqIDIuIFdlIGFyZSBub3Qg
YWxsb3dlZCB0byBhZGQgdGhlIGVsZW1lbnQgZGlyZWN0bHkuIEl0IGNvdWxkIGJlIHRoYXQKKyAq
ICAgIHRoZSBwZXJzb24gd3JpdGluZyB0aGUgZG9jdW1lbnQgZm9yZ290IHNvbWUgdGFnIGluIGJl
dHdlZW4gKG9yIHRoYXQgdGhlCisgKiAgICB0YWcgaW4gYmV0d2VlbiBpcyBvcHRpb25hbCkuIFRo
aXMgY291bGQgYmUgdGhlIGNhc2Ugd2l0aCB0aGUgZm9sbG93aW5nCisgKiAgICB0YWdzOiBIVE1M
IEhFQUQgQk9EWSBUQk9EWSBUUiBURCBMSSAoZGlkIEkgZm9yZ2V0IGFueT8pLgorICoKKyAqIDMu
IFdlIHdhbnQgdG8gYWRkIGEgYmxvY2sgZWxlbWVudCBpbnNpZGUgdG8gYW4gaW5saW5lIGVsZW1l
bnQuIENsb3NlIGFsbAorICogICAgaW5saW5lIGVsZW1lbnRzIHVwIHRvIHRoZSBuZXh0IGhpZ2hl
ciBibG9jayBlbGVtZW50LgorICoKKyAqIDQuIElmIHRoaXMgZG9lc24ndCBoZWxwLCBjbG9zZSBl
bGVtZW50cyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgdGhlCisgKiAgICBlbGVtZW50IG9y
IGlnbm9yZSB0aGUgdGFnLgorICoKKyAqLworCitMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKEhUTUxEb2N1bWVudCogZG9jLCBib29sIHJlcG9ydEVy
cm9ycykKKyAgICA6IG1fZG9jdW1lbnQoZG9jKQorICAgICwgbV9jdXJyZW50KGRvYykKKyAgICAs
IG1fZGlkUmVmQ3VycmVudChmYWxzZSkKKyAgICAsIG1fYmxvY2tTdGFjaygwKQorICAgICwgbV9i
bG9ja3NJblN0YWNrKDApCisgICAgLCBtX3RyZWVEZXB0aCgwKQorICAgICwgbV9oYXNQRWxlbWVu
dEluU2NvcGUoTm90SW5TY29wZSkKKyAgICAsIG1faW5Cb2R5KGZhbHNlKQorICAgICwgbV9oYXZl
Q29udGVudChmYWxzZSkKKyAgICAsIG1faGF2ZUZyYW1lU2V0KGZhbHNlKQorICAgICwgbV9pc1Bh
cnNpbmdGcmFnbWVudChmYWxzZSkKKyAgICAsIG1fcmVwb3J0RXJyb3JzKHJlcG9ydEVycm9ycykK
KyAgICAsIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzKGZhbHNlKQorICAgICwg
bV9pblN0cmF5VGFibGVDb250ZW50KDApCisgICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oRnJh
Z21lbnRTY3JpcHRpbmdBbGxvd2VkKQorICAgICwgbV9wYXJzZXJRdWlya3MobV9kb2N1bWVudC0+
cGFnZSgpID8gbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmNyZWF0ZUhU
TUxQYXJzZXJRdWlya3MoKSA6IDApCit7Cit9CisKK0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoRG9jdW1lbnRGcmFnbWVudCogZnJhZywgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCisgICAgOiBtX2RvY3Vt
ZW50KGZyYWctPmRvY3VtZW50KCkpCisgICAgLCBtX2N1cnJlbnQoZnJhZykKKyAgICAsIG1fZGlk
UmVmQ3VycmVudCh0cnVlKQorICAgICwgbV9ibG9ja1N0YWNrKDApCisgICAgLCBtX2Jsb2Nrc0lu
U3RhY2soMCkKKyAgICAsIG1fdHJlZURlcHRoKDApCisgICAgLCBtX2hhc1BFbGVtZW50SW5TY29w
ZShOb3RJblNjb3BlKQorICAgICwgbV9pbkJvZHkodHJ1ZSkKKyAgICAsIG1faGF2ZUNvbnRlbnQo
ZmFsc2UpCisgICAgLCBtX2hhdmVGcmFtZVNldChmYWxzZSkKKyAgICAsIG1faXNQYXJzaW5nRnJh
Z21lbnQodHJ1ZSkKKyAgICAsIG1fcmVwb3J0RXJyb3JzKGZhbHNlKQorICAgICwgbV9oYW5kbGlu
Z1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoZmFsc2UpCisgICAgLCBtX2luU3RyYXlUYWJsZUNv
bnRlbnQoMCkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9u
KQorICAgICwgbV9wYXJzZXJRdWlya3MobV9kb2N1bWVudC0+cGFnZSgpID8gbV9kb2N1bWVudC0+
cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCktPmNyZWF0ZUhUTUxQYXJzZXJRdWlya3MoKSA6IDAp
Cit7CisgICAgaWYgKGZyYWcpCisgICAgICAgIGZyYWctPnJlZigpOworfQorCitMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjp+TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcigpCit7CisgICAgZnJl
ZUJsb2NrKCk7CisgICAgaWYgKG1fZGlkUmVmQ3VycmVudCkKKyAgICAgICAgbV9jdXJyZW50LT5k
ZXJlZigpOworfQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJlc2V0KCkKK3sK
KyAgICBBU1NFUlQoIW1faXNQYXJzaW5nRnJhZ21lbnQpOworCisgICAgc2V0Q3VycmVudChtX2Rv
Y3VtZW50KTsKKworICAgIGZyZWVCbG9jaygpOworCisgICAgbV90cmVlRGVwdGggPSAwOworICAg
IG1faW5Cb2R5ID0gZmFsc2U7CisgICAgbV9oYXZlRnJhbWVTZXQgPSBmYWxzZTsKKyAgICBtX2hh
dmVDb250ZW50ID0gZmFsc2U7CisgICAgbV9pblN0cmF5VGFibGVDb250ZW50ID0gMDsKKworICAg
IG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsKKyAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gMDsK
KyAgICBtX2hlYWQgPSAwOworICAgIG1faXNpbmRleEVsZW1lbnQgPSAwOworCisgICAgbV9za2lw
TW9kZVRhZyA9IG51bGxBdG9tOworICAgIAorICAgIGlmIChtX3BhcnNlclF1aXJrcykKKyAgICAg
ICAgbV9wYXJzZXJRdWlya3MtPnJlc2V0KCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6c2V0Q3VycmVudChOb2RlKiBuZXdDdXJyZW50KSAKK3sKKyAgICBib29sIGRpZFJl
Zk5ld0N1cnJlbnQgPSBuZXdDdXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gbV9kb2N1bWVudDsKKyAg
ICBpZiAoZGlkUmVmTmV3Q3VycmVudCkgCisgICAgICAgIG5ld0N1cnJlbnQtPnJlZigpOyAKKyAg
ICBpZiAobV9kaWRSZWZDdXJyZW50KSAKKyAgICAgICAgbV9jdXJyZW50LT5kZXJlZigpOworICAg
IG1fY3VycmVudCA9IG5ld0N1cnJlbnQ7CisgICAgbV9kaWRSZWZDdXJyZW50ID0gZGlkUmVmTmV3
Q3VycmVudDsKK30KKworaW5saW5lIHN0YXRpYyBpbnQgdGFnUHJpb3JpdHlPZk5vZGUoTm9kZSog
bikKK3sKKyAgICByZXR1cm4gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihuKS0+dGFnUHJpb3JpdHkoKSA6IDA7Cit9CisKK2lubGluZSB2b2lkIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OmxpbWl0RGVwdGgoaW50IHRhZ1ByaW9yaXR5KQoreworICAgIHdo
aWxlIChtX3RyZWVEZXB0aCA+PSBtYXhET01UcmVlRGVwdGgpCisgICAgICAgIHBvcEJsb2NrKG1f
YmxvY2tTdGFjay0+dGFnTmFtZSk7CisgICAgaWYgKHRhZ1ByaW9yaXR5ID49IG1pbkJsb2NrTGV2
ZWxUYWdQcmlvcml0eSkgeworICAgICAgICB3aGlsZSAobV9ibG9ja3NJblN0YWNrID49IGNNYXhC
bG9ja0RlcHRoKQorICAgICAgICAgICAgcG9wQmxvY2sobV9ibG9ja1N0YWNrLT50YWdOYW1lKTsK
KyAgICB9Cit9CisKK2lubGluZSBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Omluc2Vy
dE5vZGVBZnRlckxpbWl0RGVwdGgoTm9kZSogbiwgYm9vbCBmbGF0KQoreworICAgIGxpbWl0RGVw
dGgodGFnUHJpb3JpdHlPZk5vZGUobikpOworICAgIHJldHVybiBpbnNlcnROb2RlKG4sIGZsYXQp
OworfQorCitQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBhcnNl
VG9rZW4oVG9rZW4qIHQpCit7CisgICAgaWYgKCFtX3NraXBNb2RlVGFnLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGlmICghdC0+YmVnaW5UYWcgJiYgdC0+dGFnTmFtZSA9PSBtX3NraXBNb2RlVGFnKQor
ICAgICAgICAgICAgLy8gRm91bmQgdGhlIGVuZCB0YWcgZm9yIHRoZSBjdXJyZW50IHNraXAgbW9k
ZSwgc28gd2UncmUgZG9uZSBza2lwcGluZy4KKyAgICAgICAgICAgIG1fc2tpcE1vZGVUYWcgPSBu
dWxsQXRvbTsKKyAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSB0LT50
YWdOYW1lKQorICAgICAgICAgICAgLy8gRG8gbm90IHNraXAgPC9pZnJhbWU+LgorICAgICAgICAg
ICAgLy8gRklYTUU6IFdoYXQgZG9lcyB0aGF0IGNvbW1lbnQgbWVhbj8gSG93IGNhbiBpdCBiZSBy
aWdodCB0byBwYXJzZSBhIHRva2VuIHdpdGhvdXQgY2xlYXJpbmcgbV9za2lwTW9kZVRhZz8KKyAg
ICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgLy8gQXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4u
IEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxi
cj4uCisgICAgaWYgKHQtPmlzQ2xvc2VUYWcoYnJUYWcpICYmIG1fZG9jdW1lbnQtPmluQ29tcGF0
TW9kZSgpKSB7CisgICAgICAgIHJlcG9ydEVycm9yKE1hbGZvcm1lZEJSRXJyb3IpOworICAgICAg
ICB0LT5iZWdpblRhZyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCF0LT5iZWdpblRhZykgewor
ICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIC8vIElnbm9yZSBzcGFjZXMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYSBwYXJhZ3JhcGggb3Ig
b3RoZXIgaW5saW5lIGNvZGUuCisgICAgLy8gRG8gbm90IGFsdGVyIHRoZSB0ZXh0IGlmIGl0IGlz
IHBhcnQgb2YgYSBzY3JpcHRUYWcuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gdGV4dEF0b20gJiYg
dC0+dGV4dCAmJiBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHNjcmlwdFRhZykgeworICAgICAg
ICBpZiAobV9pbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSAh
PSBzdHlsZVRhZyAmJgorICAgICAgICAgICAgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSAhPSB0aXRs
ZVRhZyAmJiAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAg
bV9oYXZlQ29udGVudCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Tm9kZT4gbjsK
KyAgICAgICAgU3RyaW5nIHRleHQgPSB0LT50ZXh0LmdldCgpOworICAgICAgICB1bnNpZ25lZCBj
aGFyc0xlZnQgPSB0ZXh0Lmxlbmd0aCgpOworICAgICAgICB3aGlsZSAoY2hhcnNMZWZ0KSB7Cisg
ICAgICAgICAgICAvLyBzcGxpdCBsYXJnZSBibG9ja3Mgb2YgdGV4dCB0byBub2RlcyBvZiBtYW5h
Z2VhYmxlIHNpemUKKyAgICAgICAgICAgIG4gPSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQo
bV9kb2N1bWVudCwgdGV4dCwgY2hhcnNMZWZ0KTsKKyAgICAgICAgICAgIGlmICghaW5zZXJ0Tm9k
ZUFmdGVyTGltaXREZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG47CisgICAgfQorCisg
ICAgUmVmUHRyPE5vZGU+IG4gPSBnZXROb2RlKHQpOworICAgIC8vIGp1c3QgdG8gYmUgc3VyZSwg
YW5kIHRvIGNhdGNoIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIHN0dWZmCisgICAgaWYgKCFuKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIHNldCBhdHRyaWJ1dGVzCisgICAgaWYgKG4tPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obi5nZXQoKSk7CisgICAgICAgIGlmIChtX3NjcmlwdGluZ1Blcm1pc3Npb24g
PT0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkIHx8IHQtPnRhZ05hbWUgIT0gc2NyaXB0VGFnKQor
ICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKHQtPmF0dHJzLmdldCgpLCBtX3NjcmlwdGlu
Z1Blcm1pc3Npb24pOworCisgICAgICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9zZSB0
YWdzCisgICAgICAgIGlmIChlLT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c09wdGlv
bmFsKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgLy8gSWYgdGhlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGZvcmJpZGRlbiBlbmQgdGFnIHJl
cXVpcmVtZW50LCBhbmQgaWYgdGhlIGJyb2tlbiBYTUwgc2VsZi1jbG9zaW5nCisgICAgICAgIC8v
IHN5bnRheCB3YXMgdXNlZCwgcmVwb3J0IGFuIGVycm9yLgorICAgICAgICBpZiAodC0+YnJva2Vu
WE1MU3R5bGUgJiYgZS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBUYWdTdGF0dXNGb3JiaWRkZW4p
IHsKKyAgICAgICAgICAgIGlmICh0LT50YWdOYW1lID09IHNjcmlwdFRhZykKKyAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihJbmNvcnJlY3RYTUxDbG9zZVNjcmlwdFdhcm5pbmcpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKEluY29ycmVjdFhNTFNlbGZD
bG9zZUVycm9yLCAmdC0+dGFnTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlu
c2VydE5vZGVBZnRlckxpbWl0RGVwdGgobi5nZXQoKSwgdC0+c2VsZkNsb3NpbmdUYWcpKSB7Cisg
ICAgICAgIC8vIHdlIGNvdWxkbid0IGluc2VydCB0aGUgbm9kZQorCisgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obi5nZXQoKSk7CisgICAgICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAoMCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV9jdXJyZW50TWFwRWxlbWVudCA9PSBuKQorICAgICAg
ICAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7CisKKyAgICAgICAgaWYgKG1fY3VycmVudEZv
cm1FbGVtZW50ID09IG4pCisgICAgICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9IDA7CisK
KyAgICAgICAgaWYgKG1faGVhZCA9PSBuKQorICAgICAgICAgICAgbV9oZWFkID0gMDsKKworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG47Cit9CisKK3ZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cGFyc2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKiB0KQorewor
ICAgIC8vIElnbm9yZSBhbnkgZG9jdHlwZSBhZnRlciB0aGUgZmlyc3QuICBJZ25vcmUgZG9jdHlw
ZXMgaW4gZnJhZ21lbnRzLgorICAgIGlmIChtX2RvY3VtZW50LT5kb2N0eXBlKCkgfHwgbV9pc1Bh
cnNpbmdGcmFnbWVudCB8fCBtX2N1cnJlbnQgIT0gbV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gTWFrZSBhIG5ldyBkb2N0eXBlIG5vZGUgYW5kIHNldCBpdCBhcyBvdXIgZG9j
dHlwZS4KKyAgICBtX2RvY3VtZW50LT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2Rv
Y3VtZW50LCBTdHJpbmc6OmFkb3B0KHQtPm1fbmFtZSksIFN0cmluZzo6YWRvcHQodC0+bV9wdWJs
aWNJRCksIFN0cmluZzo6YWRvcHQodC0+bV9zeXN0ZW1JRCkpKTsKKyAgICBpZiAodC0+bV9mb3Jj
ZVF1aXJrcykKKyAgICAgICAgbV9kb2N1bWVudC0+c2V0UGFyc2VNb2RlKERvY3VtZW50OjpDb21w
YXQpOworfQorCitzdGF0aWMgYm9vbCBpc1RhYmxlU2VjdGlvbihjb25zdCBOb2RlKiBuKQorewor
ICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRmb290
VGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRoZWFkVGFnKTsKK30KKworc3RhdGljIGJvb2wgaXNUYWJs
ZVBhcnQoY29uc3QgTm9kZSogbikKK3sKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0clRhZykg
fHwgbi0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0aFRhZykKKyAgICAgICAg
fHwgaXNUYWJsZVNlY3Rpb24obik7Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKGNv
bnN0IE5vZGUqIG4pCit7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodGFibGVUYWcpIHx8IGlz
VGFibGVQYXJ0KG4pOworfQorCitzdGF0aWMgYm9vbCBpc1Njb3BpbmdUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKQoreworICAgIHJldHVybiB0YWdOYW1lID09IGFwcGxldFRhZyB8fCB0
YWdOYW1lID09IGNhcHRpb25UYWcgfHwgdGFnTmFtZSA9PSB0ZFRhZworICAgICAgICB8fCB0YWdO
YW1lID09IHRoVGFnIHx8IHRhZ05hbWUgPT0gYnV0dG9uVGFnIHx8IHRhZ05hbWUgPT0gbWFycXVl
ZVRhZworICAgICAgICB8fCB0YWdOYW1lID09IG9iamVjdFRhZyB8fCB0YWdOYW1lID09IHRhYmxl
VGFnIHx8IHRhZ05hbWUgPT0gaHRtbFRhZzsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjppbnNlcnROb2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKK3sKKyAgICBSZWZQdHI8Tm9k
ZT4gcHJvdGVjdE5vZGUobik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9
IG4tPmxvY2FsTmFtZSgpOworICAgIAorICAgIC8vIDx0YWJsZT4gaXMgbmV2ZXIgYWxsb3dlZCBp
bnNpZGUgc3RyYXkgdGFibGUgY29udGVudC4gIEFsd2F5cyBwb3Agb3V0IG9mIHRoZSBzdHJheSB0
YWJsZSBjb250ZW50CisgICAgLy8gYW5kIGNsb3NlIHVwIHRoZSBmaXJzdCB0YWJsZSwgYW5kIHRo
ZW4gc3RhcnQgdGhlIHNlY29uZCB0YWJsZSBhcyBhIHNpYmxpbmcuCisgICAgaWYgKG1faW5TdHJh
eVRhYmxlQ29udGVudCAmJiBsb2NhbE5hbWUgPT0gdGFibGVUYWcpCisgICAgICAgIHBvcEJsb2Nr
KHRhYmxlVGFnKTsKKworICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiAhbV9wYXJzZXJRdWlya3Mt
PnNob3VsZEluc2VydE5vZGUobV9jdXJyZW50LCBuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaW50IHRhZ1ByaW9yaXR5ID0gdGFnUHJpb3JpdHlPZk5vZGUobik7CisKKyAgICAvLyBs
ZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KKyAgICAvLyB0aGlzIHNo
b3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAorICAgIE5vZGUqIG5ld05v
ZGUgPSBtX2N1cnJlbnQtPmFkZENoaWxkKG4pOworICAgIGlmICghbmV3Tm9kZSkKKyAgICAgICAg
cmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOyAvLyBU
cnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KKworICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0
aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjaworICAgIGJvb2wgcGFyZW50
QXR0YWNoZWQgPSBtX2N1cnJlbnQtPmF0dGFjaGVkKCk7CisgICAgaWYgKHRhZ1ByaW9yaXR5ID4g
MCAmJiAhZmxhdCkgeworICAgICAgICBpZiAobmV3Tm9kZSA9PSBtX2N1cnJlbnQpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgb25seSBiZSBoaXQgd2hlbiBhIGRlbW90ZWQgPGZv
cm0+IGlzIHBsYWNlZCBpbnNpZGUgYSB0YWJsZS4KKyAgICAgICAgICAgIEFTU0VSVChsb2NhbE5h
bWUgPT0gZm9ybVRhZyk7CisgICAgICAgICAgICByZXBvcnRFcnJvcihGb3JtSW5zaWRlVGFibGVQ
YXJ0RXJyb3IsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG4pOworICAgICAg
ICAgICAgZm9ybS0+c2V0RGVtb3RlZCh0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBwdXNoQmxvY2sgZnVuY3Rpb24gdHJhbnNmZXJzIG93bmVyc2hpcCBvZiBjdXJy
ZW50IHRvIHRoZSBibG9jayBzdGFjaworICAgICAgICAgICAgLy8gc28gd2UncmUgZ3VhcmFudGVl
ZCB0aGF0IG1fZGlkUmVmQ3VycmVudCBpcyBmYWxzZS4gVGhlIGNvZGUgYmVsb3cgaXMgYW4KKyAg
ICAgICAgICAgIC8vIG9wdGltaXplZCB2ZXJzaW9uIG9mIHNldEN1cnJlbnQgdGhhdCB0YWtlcyBh
ZHZhbnRhZ2Ugb2YgdGhhdCBmYWN0IGFuZCBhbHNvCisgICAgICAgICAgICAvLyBhc3N1bWVzIHRo
YXQgbmV3Tm9kZSBpcyBuZWl0aGVyIDAgbm9yIGEgcG9pbnRlciB0byB0aGUgZG9jdW1lbnQuCisg
ICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CisgICAgICAgICAg
ICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICAgICAgQVNTRVJUKCFt
X2RpZFJlZkN1cnJlbnQpOworICAgICAgICAgICAgbmV3Tm9kZS0+cmVmKCk7IAorICAgICAgICAg
ICAgbV9jdXJyZW50ID0gbmV3Tm9kZTsKKyAgICAgICAgICAgIG1fZGlkUmVmQ3VycmVudCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hl
ZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgbi0+YXR0YWNoKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRhY2hlZCgp
ICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgbi0+YXR0YWNoKCk7CisgICAg
ICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOworICAgIH0KKworICAgIGlmIChsb2NhbE5h
bWUgPT0gaHRtbFRhZyAmJiBtX2RvY3VtZW50LT5mcmFtZSgpICYmICFtX2lzUGFyc2luZ0ZyYWdt
ZW50KQorICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1
bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSkKK3sKKyAgICAv
LyBFcnJvciBoYW5kbGluZyBjb2RlLiAgVGhpcyBpcyBqdXN0IGFkIGhvYyBoYW5kbGluZyBvZiBz
cGVjaWZpYyBwYXJlbnQvY2hpbGQgY29tYmluYXRpb25zLgorICAgIGJvb2wgaGFuZGxlZCA9IGZh
bHNlOworCisgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFnIG5hbWUgdG8gZGVj
aWRlIGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgorICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4p
OworICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKHRyVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUo
dGhUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0ZFRhZykpIHsKKyAgICAgICAgICAgIGlmIChtX2lu
U3RyYXlUYWJsZUNvbnRlbnQgJiYgIWlzVGFibGVSZWxhdGVkKG1fY3VycmVudCkpIHsKKyAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRUYWJsZVBhcnRFcnJvciwgJmxvY2FsTmFt
ZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQg
dG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxlLXJlbGF0ZWQgdGFnLgorICAgICAgICAgICAg
ICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkKG1fY3VycmVudCkpCisg
ICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGluc2VydE5vZGUobik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKGhlYWRUYWcpKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSAmJiAhbV9jdXJyZW50LT5oYXNUYWdOYW1lKGh0bWxUYWcpKSB7CisgICAgICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZEVycm9yKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKG1ldGFUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShsaW5rVGFnKSB8fCBoLT5oYXNM
b2NhbE5hbWUoYmFzZVRhZykpIHsKKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZEhlYWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghbV9oZWFkKSB7CisgICAgICAgICAgICAgICAgY3JlYXRlSGVh
ZCgpOworICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChtX2hlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZWRI
ZWFkKQorICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkQ29udGVu
dEVycm9yLCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAg
ICAgICAgaWYgKG1faGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+YXR0YWNoKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGh0bWxU
YWcpKSB7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgJiYgbV9k
b2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgIW1faXNQ
YXJzaW5nRnJhZ21lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoUmVkdW5k
YW50SFRNTEJvZHlFcnJvciwgJmxvY2FsTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIHdl
IGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlz
dGluZyBvbmUKKyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3
cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgTmFt
ZWROb2RlTWFwKiBtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGV4aXN0aW5nSFRNTCA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIE5hbWVkTm9kZU1hcCogYm1hcCA9IGV4aXN0aW5nSFRNTC0+YXR0cmlidXRlcyhm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbCA9IDA7IG1hcCAmJiBs
IDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1
dGUqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGwpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4aXN0aW5nSFRNTC0+c2V0QXR0cmlidXRlKGl0LT5uYW1lKCksIGl0LT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoaC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcp
IHx8IGgtPmhhc0xvY2FsTmFtZShzY3JpcHRUYWcpKSB7CisgICAgICAgICAgICBib29sIGNyZWF0
ZWRIZWFkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1faGVhZCkgeworICAgICAgICAgICAg
ICAgIGNyZWF0ZUhlYWQoKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVkSGVhZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9oZWFkKSB7CisgICAgICAgICAgICAgICAg
Tm9kZSogbmV3Tm9kZSA9IG1faGVhZC0+YWRkQ2hpbGQobik7CisgICAgICAgICAgICAgICAgaWYg
KCFuZXdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKGgtPnRhZ1FOYW1l
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghY3JlYXRlZEhlYWQpCisg
ICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250ZW50RXJyb3Is
ICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CisgICAg
ICAgICAgICAgICAgbmV3Tm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG5ld05vZGUpOworICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNo
ZWQoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbi0+YXR0
YWNoKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobV9pbkJvZHkpIHsKKyAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShoLT50
YWdRTmFtZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGJvZHlUYWcpKSB7CisgICAgICAg
ICAgICBpZiAobV9pbkJvZHkgJiYgbV9kb2N1bWVudC0+Ym9keSgpICYmICFtX2lzUGFyc2luZ0Zy
YWdtZW50KSB7CisgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBlbGVt
ZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQorICAgICAgICAgICAgICAg
IC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1
dGVzCisgICAgICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1yaWdo
dGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KKyAgICAgICAgICAgICAgICByZXBv
cnRFcnJvcihSZWR1bmRhbnRIVE1MQm9keUVycm9yLCAmbG9jYWxOYW1lKTsKKyAgICAgICAgICAg
ICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmli
dXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50KiBleGlzdGluZ0JvZHkgPSBtX2Rv
Y3VtZW50LT5ib2R5KCk7CisgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBibWFwID0gZXhp
c3RpbmdCb2R5LT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgeworICAgICAgICAgICAg
ICAgICAgICBBdHRyaWJ1dGUqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGwpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPm5hbWUoKSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0JvZHktPnNldEF0dHJpYnV0ZShpdC0+bmFtZSgp
LCBpdC0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fY3VycmVudC0+aXNEb2N1bWVudE5v
ZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAo
aC0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKSB7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50TWFw
RWxlbWVudCkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEFyZWFFcnJv
ciwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIG1fY3VycmVudE1h
cEVsZW1lbnQtPmFkZENoaWxkKG4pOworICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNo
KCk7CisgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBoLT5oYXNMb2Nh
bE5hbWUoY2FwdGlvblRhZykpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZChtX2N1
cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fYmxvY2tTdGFjayAmJiBpc1RhYmxl
UGFydChtX2N1cnJlbnQpKQorICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOworICAg
ICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChuLT5pc0NvbW1lbnROb2RlKCkgJiYgIW1faGVhZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50
bHkgYWN0aXZlIGVsZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgorICAg
IGlmIChtX2N1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudCog
aCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obV9jdXJyZW50KTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBjdXJyZW50VGFnTmFtZSA9IGgtPmxvY2FsTmFtZSgpOworICAgICAgICBp
ZiAoaC0+aGFzTG9jYWxOYW1lKGh0bWxUYWcpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudCog
ZWx0ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKSA6
IDA7CisgICAgICAgICAgICBpZiAoZWx0ICYmIChlbHQtPmhhc0xvY2FsTmFtZShzY3JpcHRUYWcp
IHx8IGVsdC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+
aGFzTG9jYWxOYW1lKG1ldGFUYWcpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpIHx8Cisg
ICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fCBlbHQtPmhhc0xv
Y2FsTmFtZShlbWJlZFRhZykgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZSh0
aXRsZVRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoaXNpbmRleFRhZykgfHwKKyAgICAgICAgICAg
ICAgICBlbHQtPmhhc0xvY2FsTmFtZShiYXNlVGFnKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IW1faGVhZCkgeworICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSBIVE1MSGVhZEVsZW1lbnQ6
OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShtX2hl
YWQuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0
PFRleHQqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFtX2hhdmVGcmFtZVNldCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBoZWFkIGV4aXN0cy4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gQnV0IG5vdCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgTWFpbCwgd2hlcmUgdGhlIGlt
cGxpY2l0IDxoZWFkPiBpc24ndCBleHBlY3RlZCAtIDxyZGFyOi8vcHJvYmxlbS82ODYzNzk1Pgor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQgJiYgc2hvdWxkQ3Jl
YXRlSW1wbGljaXRIZWFkKG1fZG9jdW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlSGVhZCgpOworCisgICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGhlYWRUYWcpOworICAg
ICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
Tm9kZShIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRGcmFtZXNldENvbnRlbnRFcnJv
ciwgJmxvY2FsTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKGhlYWRUYWcpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShodG1s
VGFnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0cyBoZXJlLi4uCisg
ICAgICAgICAgICAgICAgaWYgKCFtX2hhdmVGcmFtZVNldCkgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoY3VycmVudFRhZ05hbWUgPT0gaGVhZFRhZyk7CisgICAgICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5
KCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEJvZHlFbGVtZW50OjpjcmVh
dGUobV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJy
b3IoTWlzcGxhY2VkRnJhbWVzZXRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShhZGRyZXNzVGFnKSB8fCBo
LT5oYXNMb2NhbE5hbWUoZm9udFRhZykKKyAgICAgICAgICAgICAgICAgICB8fCBoLT5oYXNMb2Nh
bE5hbWUoc3R5bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0aXRsZVRhZykpIHsKKyAgICAgICAg
ICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRyeUVycm9yLCAmbG9jYWxOYW1lLCAm
Y3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKGNhcHRpb25UYWcpKSB7CisgICAgICAgICAgICAvLyBJbGxlZ2FsIGNvbnRlbnQgaW4g
YSBjYXB0aW9uLiBDbG9zZSB0aGUgY2FwdGlvbiBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAg
cmVwb3J0RXJyb3IoTWlzcGxhY2VkQ2FwdGlvbkNvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSk7Cisg
ICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICBpZiAoaXNU
YWJsZVBhcnQobikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSB8fCBoLT5oYXNM
b2NhbE5hbWUodHJUYWcpIHx8IGlzVGFibGVTZWN0aW9uKGgpKSB7CisgICAgICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihN
aXNwbGFjZWRUYWJsZUVycm9yLCAmY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgIGlm
IChtX2lzUGFyc2luZ0ZyYWdtZW50ICYmICFoLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQorICAg
ICAgICAgICAgICAgICAgICAvLyBmcmFnbWVudCBtYXkgY29udGFpbiB0YWJsZSBwYXJ0cyB3aXRo
b3V0IDx0YWJsZT4gYW5jZXN0b3IsIHBvcCB0aGVtIG9uZSBieSBvbmUKKyAgICAgICAgICAgICAg
ICAgICAgcG9wQmxvY2soaC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIHBvcEJsb2Nr
KGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKKyAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25lCisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2N1cnJlbnQ7CisgICAgICAgICAgICAgICAgTm9kZSogcGFyZW50ID0g
bm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIC8vIEEgc2NyaXB0IG1heSBoYXZl
IHJlbW92ZWQgdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVudCBmcm9tIHRoZSBET00KKyAgICAgICAg
ICAgICAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTM3Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBkbyByZWFsIHJlY292ZXJ5IGhlcmUg
YW5kIHJlLXBhcmVudCB3aXRoIHRoZSBjb3JyZWN0IG5vZGUuCisgICAgICAgICAgICAgICAgaWYg
KCFwYXJlbnQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOworCisgICAgICAg
ICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAgICAgICAgICAgICAoaC0+
aGFzTG9jYWxOYW1lKHRyVGFnKSAmJgorICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rp
b24ocGFyZW50KSAmJiBncmFuZHBhcmVudCAmJiBncmFuZHBhcmVudC0+aGFzVGFnTmFtZSh0YWJs
ZVRhZykpIHx8CisgICAgICAgICAgICAgICAgICAgICAoKCFuLT5oYXNUYWdOYW1lKHRkVGFnKSAm
JiAhbi0+aGFzVGFnTmFtZSh0aFRhZykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIW4tPmhh
c1RhZ05hbWUoZm9ybVRhZykgJiYgIW4tPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSkgJiYgaXNUYWJs
ZVNlY3Rpb24obm9kZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aGFzVGFnTmFt
ZSh0YWJsZVRhZykpKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSAobm9kZS0+aGFzVGFn
TmFtZSh0YWJsZVRhZykpID8gbm9kZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChu
b2RlLT5oYXNUYWdOYW1lKHRyVGFnKSkgPyBncmFuZHBhcmVudCA6IHBhcmVudCk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGZyYWdtZW50cworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVm
b3JlKG4sIG5vZGUsIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlYykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlUYWJsZUNvbnRlbnRFcnJvciwgJmxv
Y2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
LT5pc0hUTUxFbGVtZW50KCkgJiYgdGFnUHJpb3JpdHkgPiAwICYmIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPmVuZFRh
Z1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUs
IHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5iZWdpblBhcnNp
bmdDaGlsZHJlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pblN0cmF5VGFibGVDb250ZW50Kys7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICghZWMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fY3VycmVudC0+aGFzVGFnTmFtZSh0clRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlcG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZsb2NhbE5hbWUsICZ0ZFRhZy5s
b2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKEhUTUxUYWJs
ZUNlbGxFbGVtZW50OjpjcmVhdGUodGRUYWcsIG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgYW4gZXJyb3IgaW4gdGhp
cyBjYXNlLCBzaW5jZSBtYWtpbmcgYSA8dGJvZHk+IGhhcHBlbnMgYWxsIHRoZSB0aW1lIHdoZW4g
eW91IGhhdmUgPHRhYmxlPjx0cj4sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgaXQg
aXNuJ3QgcmVhbGx5IGEgcGFyc2UgZXJyb3IgcGVyIHNlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0Tm9kZShIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y3JlYXRlKHRib2R5VGFnLCBt
X2RvY3VtZW50KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihUYWJsZVBhcnRSZXF1aXJlZEVycm9yLCAmbG9j
YWxOYW1lLCAmdHJUYWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0Tm9kZShIVE1MVGFibGVSb3dFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSkgeworICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlz
cGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50VGFnTmFtZSk7Cisg
ICAgICAgICAgICBwb3BCbG9jayhvYmplY3RUYWcpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKHBUYWcpIHx8IGlzSGVhZGlu
Z1RhZyhjdXJyZW50VGFnTmFtZSkpIHsKKyAgICAgICAgICAgIGlmICghaXNJbmxpbmUobikpIHsK
KyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKG9wdGdyb3VwVGFnKSkg
eworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBvcHRncm91cFRhZykgeworICAgICAgICAg
ICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxOYW1lID09IHNlbGVjdFRhZykg
eworICAgICAgICAgICAgICAgIC8vIElFIHRyZWF0cyBhIG5lc3RlZCBzZWxlY3QgYXMgPC9zZWxl
Y3Q+LiBMZXQncyBkbyB0aGUgc2FtZQorICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFt
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKHNl
bGVjdFRhZykpIHsKKyAgICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gaW5wdXRUYWcgfHwgbG9j
YWxOYW1lID09IHRleHRhcmVhVGFnKSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlz
cGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50VGFnTmFtZSk7Cisg
ICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShjb2xncm91cFRhZykpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRU
YWdOYW1lKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KCFoLT5oYXNMb2NhbE5hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAgIGlmIChpc0lubGluZSht
X2N1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgcG9wSW5saW5lQmxvY2tzKCk7CisgICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKG1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkgeworICAgICAgICBpZiAobi0+
aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+
KG4pOworICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7CisgICAgICAgICAgICBpbnNlcnROb2RlKEhUTUxI
dG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMy4gSWYgd2UgY291bGRuJ3Qg
aGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVtcHQgdG8gZXJyb3It
Y29ycmVjdCBhZ2Fpbi4KKyAgICBpZiAoIWhhbmRsZWQpIHsKKyAgICAgICAgcmVwb3J0RXJyb3Io
SWdub3JlZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBpbnNlcnROb2RlKG4p
OworfQorCit0eXBlZGVmIGJvb2wgKExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OipDcmVhdGVF
cnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpOwordHlwZWRlZiBIYXNoTWFw
PEF0b21pY1N0cmluZ0ltcGwqLCBDcmVhdGVFcnJvckNoZWNrRnVuYz4gRnVuY3Rpb25NYXA7CisK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IFRleHQ6OmNyZWF0
ZShtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIHJlc3VsdCA9IENvbW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoIW1faGVhZCB8fCBtX2N1cnJl
bnQtPmxvY2FsTmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgbV9oZWFkID0gSFRNTEhlYWRF
bGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgICAgIHJlc3VsdCA9IG1faGVhZDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZEVycm9yKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Ym9keUNy
ZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIC8vIGJvZHkgbm8g
bG9uZ2VyIGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZyYW1lc2V0CisgICAgaWYgKG1faGF2ZUZyYW1l
U2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRoYXQgaGVh
ZCBleGlzdHMgKHVubGVzcyBwYXJzaW5nIGEgZnJhZ21lbnQpLgorICAgIC8vIEJ1dCBub3QgZm9y
IG9sZGVyIHZlcnNpb25zIG9mIE1haWwsIHdoZXJlIHRoZSBpbXBsaWNpdCA8aGVhZD4gaXNuJ3Qg
ZXhwZWN0ZWQgLSA8cmRhcjovL3Byb2JsZW0vNjg2Mzc5NT4KKyAgICBpZiAoIW1faXNQYXJzaW5n
RnJhZ21lbnQgJiYgc2hvdWxkQ3JlYXRlSW1wbGljaXRIZWFkKG1fZG9jdW1lbnQpKQorICAgICAg
ICBjcmVhdGVIZWFkKCk7CisgICAgCisgICAgcG9wQmxvY2soaGVhZFRhZyk7CisgICAgc3RhcnRC
b2R5KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sK
KyAgICBwb3BCbG9jayhoZWFkVGFnKTsKKyAgICBpZiAobV9pbkJvZHkgJiYgIW1faGF2ZUZyYW1l
U2V0ICYmICFtX2hhdmVDb250ZW50KSB7CisgICAgICAgIHBvcEJsb2NrKGJvZHlUYWcpOworICAg
ICAgICAvLyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93
IGhpZGRlbiAiYm9keSIgZWxlbWVudAorICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhh
dCBiZWhhdmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKKyAgICAgICAg
Ly8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBh
cyBsb25nIGFzIHRoZXJlIGlzCisgICAgICAgIC8vIG5vIHNpdGUgYWN0dWFsbHkgcmVseWluZyBv
biB0aGF0IGRldGFpbCAoRGlyaykKKyAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmJvZHkoKSAmJiAh
bV9pc1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPmJvZHkoKS0+c2V0
QXR0cmlidXRlKHN0eWxlQXR0ciwgImRpc3BsYXk6bm9uZSIpOworICAgICAgICBtX2luQm9keSA9
IGZhbHNlOworICAgIH0KKyAgICBpZiAoKG1faGF2ZUNvbnRlbnQgfHwgbV9oYXZlRnJhbWVTZXQp
ICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIG1faGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKKyAgICBzdGFydEJvZHkoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmb3JtQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgLy8g
T25seSBjcmVhdGUgYSBuZXcgZm9ybSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbnNpZGUgb25lLgor
ICAgIC8vIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIGJyb3dzZXJzJyBiZWhhdmlvci4K
KyAgICBpZiAoIW1fY3VycmVudEZvcm1FbGVtZW50KSB7CisgICAgICAgIG1fY3VycmVudEZvcm1F
bGVtZW50ID0gSFRNTEZvcm1FbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgICAgIHJl
c3VsdCA9IG1fY3VycmVudEZvcm1FbGVtZW50OworICAgICAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JD
aGVjayh0LCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQs
IFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIFJlZlB0cjxOb2RlPiBuID0gaGFuZGxlSXNp
bmRleCh0KTsKKyAgICBpZiAoIW1faW5Cb2R5KQorICAgICAgICBtX2lzaW5kZXhFbGVtZW50ID0g
bi5yZWxlYXNlKCk7CisgICAgZWxzZSB7CisgICAgICAgIHQtPnNlbGZDbG9zaW5nVGFnID0gdHJ1
ZTsKKyAgICAgICAgcmVzdWx0ID0gbi5yZWxlYXNlKCk7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpzZWxlY3RDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpkZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
IHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNr
KHQsIHJlc3VsdCk7CisgICAgcG9wQmxvY2soZHRUYWcpOworICAgIHBvcEJsb2NrKGRkVGFnKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpk
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAg
IHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7CisgICAgcG9wQmxvY2soZGRUYWcp
OworICAgIHBvcEJsb2NrKGR0VGFnKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpycENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKQoreworICAgIHBvcEJsb2NrKHJwVGFnKTsKKyAgICBwb3BCbG9jayhydFRhZyk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnRD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBwb3BCbG9jayhy
cFRhZyk7CisgICAgcG9wQmxvY2socnRUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
IHQsIFJlZlB0cjxOb2RlPiYpCit7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkUENs
b3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorewor
ICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7CisgICAgcG9wQmxvY2sodC0+
dGFnTmFtZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mKQoreworICAgIHJldHVybiBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50YWdOYW1lKTsK
K30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBwb3BCbG9jayh0ZFRhZyk7Cisg
ICAgcG9wQmxvY2sodGhUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKQoreworICAgIHBvcEJsb2NrKHRoZWFkVGFnKTsKKyAgICBwb3BCbG9jayh0
Ym9keVRhZyk7CisgICAgcG9wQmxvY2sodGZvb3RUYWcpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBzZXRTa2lwTW9kZShub2VtYmVkVGFnKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpu
b2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHNl
dFNraXBNb2RlKG5vZnJhbWVzVGFnKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKQoreworICAgIGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCkgeworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUg
JiYgZnJhbWUtPnNjcmlwdCgpLT5jYW5FeGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNj
cmlwdCkpCisgICAgICAgICAgICBzZXRTa2lwTW9kZShub3NjcmlwdFRhZyk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9z
ZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBpZiAoaGFz
UEVsZW1lbnRJblNjb3BlKCkpCisgICAgICAgIHBvcEJsb2NrKHBUYWcpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJTdHJpY3RD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK3sKKyAgICBpZiAobV9kb2N1
bWVudC0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXNQ
RWxlbWVudEluU2NvcGUoKSkKKyAgICAgICAgcG9wQmxvY2socFRhZyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bWFwQ3JlYXRlRXJyb3JD
aGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIG1fY3VycmVudE1hcEVs
ZW1lbnQgPSBIVE1MTWFwRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOworICAgIHJlc3VsdCA9
IG1fY3VycmVudE1hcEVsZW1lbnQ7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9p
ZCBtYXBUYWdUb0Z1bmMoRnVuY3Rpb25NYXAmIG1hcCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
LCBDcmVhdGVFcnJvckNoZWNrRnVuYyBmdW5jKQoreworICAgIG1hcC5zZXQodGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgZnVuYyk7Cit9CisKK3RlbXBsYXRlPCBzaXplX3QgQXJyYXlTaXplID4KK3N0
YXRpYyB2b2lkIG1hcFRhZ3NUb0Z1bmMoRnVuY3Rpb25NYXAmIG1hcCwgUXVhbGlmaWVkTmFtZSAo
Jm5hbWVzKVtBcnJheVNpemVdLCBDcmVhdGVFcnJvckNoZWNrRnVuYyBmdW5jKQoreworICAgIGZv
ciAoc2l6ZV90IHggPSAwOyB4IDwgQXJyYXlTaXplOyB4KyspIHsKKyAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSA9IG5hbWVzW3hdOworICAgICAgICBtYXBUYWdUb0Z1bmMobWFwLCBu
YW1lLCBmdW5jKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6Z2V0Tm9kZShUb2tlbiogdCkKK3sKKyAgICAvLyBJbml0IG91ciBlcnJvciBo
YW5kbGluZyB0YWJsZS4KKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBnRnVu
Y3Rpb25NYXAsICgpKTsKKyAgICBpZiAoZ0Z1bmN0aW9uTWFwLmlzRW1wdHkoKSkgeworICAgICAg
ICBRdWFsaWZpZWROYW1lIG5lc3RlZENyZWF0ZUVycm9yVGFnc1tdID0geyBhVGFnLCBidXR0b25U
YWcsIG5vYnJUYWcsIHRyVGFnIH07CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBuZXN0ZWRDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKTsKKworICAgICAgICBRdWFsaWZpZWROYW1lIG5lc3RlZFN0eWxl
Q3JlYXRlRXJyb3JUYWdzW10gPSB7IGJUYWcsIGJpZ1RhZywgaVRhZywgc1RhZywgc21hbGxUYWcs
IHN0cmlrZVRhZywgdHRUYWcsIHVUYWcgfTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rp
b25NYXAsIG5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKworICAgICAgICBRdWFsaWZpZWRO
YW1lIHBDbG9zZXJDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYWRkcmVzc1RhZywgYXJ0aWNsZVRhZywK
KyAgICAgICAgICAgIGFzaWRlVGFnLCBibG9ja3F1b3RlVGFnLCBjZW50ZXJUYWcsIGRpclRhZywg
ZGl2VGFnLCBkbFRhZywKKyAgICAgICAgICAgIGZpZWxkc2V0VGFnLCBmb290ZXJUYWcsIGgxVGFn
LCBoMlRhZywgaDNUYWcsIGg0VGFnLCBoNVRhZywgaDZUYWcsCisgICAgICAgICAgICBoZWFkZXJU
YWcsIGhncm91cFRhZywgaHJUYWcsIGxpc3RpbmdUYWcsIG1lbnVUYWcsIG5hdlRhZywgb2xUYWcs
CisgICAgICAgICAgICBwVGFnLCBwbGFpbnRleHRUYWcsIHByZVRhZywgc2VjdGlvblRhZywgdWxU
YWcgfTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIHBDbG9zZXJDcmVhdGVF
cnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JD
aGVjayk7CisKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgYm9keVRhZywgJkxl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
bWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBkdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlRXJyb3JDaGVj
ayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZvcm1UYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRh
Z1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZyYW1lc2V0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdG
dW5jdGlvbk1hcCwgaGVhZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhlYWRDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgaXNpbmRl
eFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbWFwVGFnLCAmTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIGxpVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVz
dGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0
aW9uTWFwLCBub2VtYmVkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub2Zy
YW1lc1RhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZnJhbWVzQ3JlYXRlRXJyb3JD
aGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vc2NyaXB0VGFnLCAm
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGFibGVUYWcsICZMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1h
cFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJwVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6cnBDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgcnRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpydENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBzZWxlY3RUYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
Ojp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5j
dGlvbk1hcCwgdGhUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGJvZHlU
YWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGZvb3RUYWcsICZMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGhlYWRUYWcsICZMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKworICAgICAgICBn
RnVuY3Rpb25NYXAuc2V0KGNvbW1lbnRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dCh0ZXh0QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0ZXh0Q3JlYXRl
RXJyb3JDaGVjayk7CisgICAgfQorCisgICAgYm9vbCBwcm9jZWVkID0gdHJ1ZTsKKyAgICBSZWZQ
dHI8Tm9kZT4gcmVzdWx0OworICAgIGlmIChDcmVhdGVFcnJvckNoZWNrRnVuYyBlcnJvckNoZWNr
RnVuYyA9IGdGdW5jdGlvbk1hcC5nZXQodC0+dGFnTmFtZS5pbXBsKCkpKQorICAgICAgICBwcm9j
ZWVkID0gKHRoaXMtPiplcnJvckNoZWNrRnVuYykodCwgcmVzdWx0KTsKKyAgICBpZiAocHJvY2Vl
ZCkKKyAgICAgICAgcmVzdWx0ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVu
dChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0LT50YWdOYW1lLCB4aHRtbE5hbWVzcGFjZVVSSSks
IG1fZG9jdW1lbnQsIG1fY3VycmVudEZvcm1FbGVtZW50LmdldCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjphbGxv
d05lc3RlZFJlZHVuZGFudFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAg
Ly8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBleGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVz
IGEgbGV2ZWwgb2YgbmVzdGluZyBvZgorICAgIC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20g
YSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBvbmx5IGFsbG93IGF0IG1vc3QgMjAKKyAgICAvLyBu
ZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBlIGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxs
IHRvZ2V0aGVyLgorICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAoSFRNTFN0YWNrRWxlbSog
Y3VyciA9IG1fYmxvY2tTdGFjazsKKyAgICAgICAgIGkgPCBjTWF4UmVkdW5kYW50VGFnRGVwdGgg
JiYgY3VyciAmJiBjdXJyLT50YWdOYW1lID09IHRhZ05hbWU7CisgICAgICAgICBjdXJyID0gY3Vy
ci0+bmV4dCwgaSsrKSB7IH0KKyAgICByZXR1cm4gaSAhPSBjTWF4UmVkdW5kYW50VGFnRGVwdGg7
Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHJvY2Vzc0Nsb3NlVGFnKFRv
a2VuKiB0KQoreworICAgIC8vIFN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KKyAgICAv
LyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdl
cyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KKyAgICAvLyBsZXQn
cyByZWx5IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICBpZiAodC0+dGFn
TmFtZSA9PSBodG1sVGFnIHx8IHQtPnRhZ05hbWUgPT0gYm9keVRhZyB8fCB0LT50YWdOYW1lID09
IGNvbW1lbnRBdG9tKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBjaGVja0ZvckNs
b3NlVGFnRXJyb3JzID0gdHJ1ZTsKKyAgICBpZiAodC0+dGFnTmFtZSA9PSBmb3JtVGFnICYmIG1f
Y3VycmVudEZvcm1FbGVtZW50KSB7CisgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsK
KyAgICAgICAgY2hlY2tGb3JDbG9zZVRhZ0Vycm9ycyA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAo
dC0+dGFnTmFtZSA9PSBtYXBUYWcpCisgICAgICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOwor
ICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gcFRhZykKKyAgICAgICAgY2hlY2tGb3JDbG9zZVRh
Z0Vycm9ycyA9IGZhbHNlOworICAgICAgICAKKyAgICBIVE1MU3RhY2tFbGVtKiBvbGRFbGVtID0g
bV9ibG9ja1N0YWNrOworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUsIGNoZWNrRm9yQ2xvc2VUYWdF
cnJvcnMpOworICAgIGlmIChvbGRFbGVtID09IG1fYmxvY2tTdGFjayAmJiB0LT50YWdOYW1lID09
IHBUYWcpIHsKKyAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBzdHJheSA8L3A+LiAgQW1hemlu
Z2x5IEdlY2tvLCBXaW5JRSwgYW5kIE1hY0lFIGFsbCB0cmVhdAorICAgICAgICAvLyB0aGlzIGFz
IGEgdmFsaWQgYnJlYWssIGkuZS4sIDxwPjwvcD4uICBTbyBnbyBhaGVhZCBhbmQgbWFrZSB0aGUg
ZW1wdHkKKyAgICAgICAgLy8gcGFyYWdyYXBoLgorICAgICAgICB0LT5iZWdpblRhZyA9IHRydWU7
CisgICAgICAgIHBhcnNlVG9rZW4odCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwor
ICAgICAgICByZXBvcnRFcnJvcihTdHJheVBhcmFncmFwaENsb3NlRXJyb3IpOworICAgIH0KK30K
KworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0hlYWRpbmdUYWcoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGFnTmFtZVNl
dCwgaGVhZGluZ1RhZ3MsICgpKTsKKyAgICBpZiAoaGVhZGluZ1RhZ3MuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZXNbXSA9IHsgaDFUYWcsIGgyVGFnLCBoM1RhZywg
aDRUYWcsIGg1VGFnLCBoNlRhZyB9OworICAgICAgICBhZGRUYWdzKGhlYWRpbmdUYWdzLCB0YWdO
YW1lcyk7CisgICAgfQorICAgIHJldHVybiBoZWFkaW5nVGFncy5jb250YWlucyh0YWdOYW1lLmlt
cGwoKSk7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNJbmxpbmUoTm9k
ZSogbm9kZSkgY29uc3QKK3sKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAg
SFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpOworICAgICAg
ICBpZiAoZS0+aGFzTG9jYWxOYW1lKGFUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb250VGFnKSB8
fCBlLT5oYXNMb2NhbE5hbWUodHRUYWcpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
dVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGJUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShpVGFnKSB8
fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHNUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShz
dHJpa2VUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShiaWdUYWcpIHx8CisgICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoc21hbGxUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShlbVRhZykgfHwgZS0+aGFz
TG9jYWxOYW1lKHN0cm9uZ1RhZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShkZm5U
YWcpIHx8IGUtPmhhc0xvY2FsTmFtZShjb2RlVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc2FtcFRh
ZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShrYmRUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZSh2YXJUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShjaXRlVGFnKSB8fAorICAgICAgICAgICAg
ZS0+aGFzTG9jYWxOYW1lKGFiYnJUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShhY3JvbnltVGFnKSB8
fCBlLT5oYXNMb2NhbE5hbWUoc3ViVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KHN1cFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHNwYW5UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShu
b2JyVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5vZnJhbWVzVGFnKSB8fCBl
LT5oYXNMb2NhbE5hbWUobm9sYXllclRhZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFt
ZShub2VtYmVkVGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworI2lmICFFTkFCTEUoWEhU
TUxNUCkKKyAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykgJiYgIW1faXNQ
YXJzaW5nRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQt
PmZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT5jYW5F
eGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNSZXNpZHVhbFN0
eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCByZXNpZHVhbFN0eWxlVGFncywgKCkp
OworICAgIGlmIChyZXNpZHVhbFN0eWxlVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUXVhbGlm
aWVkTmFtZSB0YWdOYW1lc1tdID0geyBhVGFnLCBmb250VGFnLCB0dFRhZywgdVRhZywgYlRhZywg
aVRhZywKKyAgICAgICAgICAgIHNUYWcsIHN0cmlrZVRhZywgYmlnVGFnLCBzbWFsbFRhZywgZW1U
YWcsIHN0cm9uZ1RhZywgZGZuVGFnLAorICAgICAgICAgICAgY29kZVRhZywgc2FtcFRhZywga2Jk
VGFnLCB2YXJUYWcsIG5vYnJUYWcgfTsKKyAgICAgICAgYWRkVGFncyhyZXNpZHVhbFN0eWxlVGFn
cywgdGFnTmFtZXMpOworICAgIH0KKyAgICByZXR1cm4gcmVzaWR1YWxTdHlsZVRhZ3MuY29udGFp
bnModGFnTmFtZS5pbXBsKCkpOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHVu
YWZmZWN0ZWRUYWdzLCAoKSk7CisgICAgaWYgKHVuYWZmZWN0ZWRUYWdzLmlzRW1wdHkoKSkgewor
ICAgICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWVzW10gPSB7IGJvZHlUYWcsIHRhYmxlVGFnLCB0
aGVhZFRhZywgdGJvZHlUYWcsCisgICAgICAgICAgICB0Zm9vdFRhZywgdHJUYWcsIHRoVGFnLCB0
ZFRhZywgY2FwdGlvblRhZywgY29sZ3JvdXBUYWcsIGNvbFRhZywKKyAgICAgICAgICAgIG9wdGlv
blRhZywgb3B0Z3JvdXBUYWcsIHNlbGVjdFRhZywgb2JqZWN0VGFnLCBkYXRhZ3JpZFRhZywgZGF0
YWxpc3RUYWcgfTsKKyAgICAgICAgYWRkVGFncyh1bmFmZmVjdGVkVGFncywgdGFnTmFtZXMpOwor
ICAgIH0KKyAgICByZXR1cm4gIXVuYWZmZWN0ZWRUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgp
KTsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVSZXNpZHVhbFN0
eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSkKK3sKKyAgICBIVE1M
U3RhY2tFbGVtKiBtYXhFbGVtID0gMDsKKyAgICBib29sIGZpbmlzaGVkID0gZmFsc2U7CisgICAg
Ym9vbCBzdHJheVRhYmxlQ29udGVudCA9IGVsZW0tPnN0cmF5VGFibGVDb250ZW50OworCisgICAg
dW5zaWduZWQgaXRlcmF0aW9uQ291bnQgPSAwOworCisgICAgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5
bGVBY3Jvc3NCbG9ja3MgPSB0cnVlOworICAgIHdoaWxlICghZmluaXNoZWQgJiYgKGl0ZXJhdGlv
bkNvdW50KysgPCBjUmVzaWR1YWxTdHlsZUl0ZXJhdGlvbkxpbWl0KSkgeworICAgICAgICAvLyBG
aW5kIHRoZSBvdXRlcm1vc3QgZWxlbWVudCB0aGF0IGNyb3NzZXMgb3ZlciB0byBhIGhpZ2hlciBs
ZXZlbC4gSWYgdGhlcmUgZXhpc3RzIGFub3RoZXIgaGlnaGVyLWxldmVsCisgICAgICAgIC8vIGVs
ZW1lbnQsIHdlIHdpbGwgZG8gYW5vdGhlciBwYXNzLCB1bnRpbCB3ZSBoYXZlIGNvcnJlY3RlZCB0
aGUgaW5uZXJtb3N0IG9uZS4KKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
IEhUTUxTdGFja0VsZW0qIGN1cnIgPSBtX2Jsb2NrU3RhY2s7CisgICAgICAgIEhUTUxTdGFja0Vs
ZW0qIHByZXYgPSAwOworICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2TWF4RWxlbSA9IDA7Cisg
ICAgICAgIG1heEVsZW0gPSAwOworICAgICAgICBmaW5pc2hlZCA9IHRydWU7CisgICAgICAgIHdo
aWxlIChjdXJyICYmIGN1cnIgIT0gZWxlbSkgeworICAgICAgICAgICAgaWYgKGN1cnItPmxldmVs
ID4gZWxlbS0+bGV2ZWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoY3Vyci0+dGFnTmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAobWF4RWxlbSkKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2ls
bCBuZWVkIGFub3RoZXIgcGFzcy4KKyAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBtYXhFbGVtID0gY3VycjsKKyAgICAgICAgICAgICAgICBwcmV2
TWF4RWxlbSA9IHByZXY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXYgPSBjdXJy
OworICAgICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWN1cnIgfHwgIW1heEVsZW0pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTm9k
ZSogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKKyAgICAgICAgTm9kZSogYmxvY2tFbGVtID0g
cHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IG1fY3VycmVudDsKKyAgICAgICAgTm9k
ZSogcGFyZW50RWxlbSA9IGVsZW0tPm5vZGU7CisKKyAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlm
IHRoZSByZXBhcmVudGluZyB0aGF0IGlzIGdvaW5nIHRvIG9jY3VyIGlzIGFsbG93ZWQgYWNjb3Jk
aW5nIHRvIHRoZSBET00uCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZWl0aGVyIGFsd2F5
cyBhbGxvdyBpdCBvciBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgZml4dXAgaW5zdGVhZCBvZgorICAg
ICAgICAvLyBqdXN0IGJhaWxpbmcgaGVyZS4KKyAgICAgICAgLy8gRXhhbXBsZTogPHA+PGZvbnQ+
PGNlbnRlcj5ibGFoPC9mb250PjwvY2VudGVyPjwvcD4gaXNuJ3QgZG9pbmcgYSBmaXh1cCByaWdo
dCBub3cuCisgICAgICAgIGlmICghcGFyZW50RWxlbS0+Y2hpbGRBbGxvd2VkKGJsb2NrRWxlbSkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBV
bmtub3duOworCisgICAgICAgIGlmIChtYXhFbGVtLT5ub2RlLT5wYXJlbnROb2RlKCkgIT0gZWxl
bS0+bm9kZSkgeworICAgICAgICAgICAgLy8gV2FsayB0aGUgc3RhY2sgYW5kIHJlbW92ZSBhbnkg
ZWxlbWVudHMgdGhhdCBhcmVuJ3QgcmVzaWR1YWwgc3R5bGUgdGFncy4gIFRoZXNlCisgICAgICAg
ICAgICAvLyBhcmUgYmFzaWNhbGx5IGp1c3QgYmVpbmcgY2xvc2VkIHVwLiAgRXhhbXBsZToKKyAg
ICAgICAgICAgIC8vIDxmb250PjxzcGFuPk1vbzxwPkdvbzwvZm9udD48L3A+LgorICAgICAgICAg
ICAgLy8gSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSA8c3Bhbj4gZG9lc24ndCBuZWVkIHRvIGJl
IHJlb3BlbmVkLiAgSXQgY2FuIGp1c3QgY2xvc2UuCisgICAgICAgICAgICBIVE1MU3RhY2tFbGVt
KiBjdXJyRWxlbSA9IG1heEVsZW0tPm5leHQ7CisgICAgICAgICAgICBIVE1MU3RhY2tFbGVtKiBw
cmV2RWxlbSA9IG1heEVsZW07CisgICAgICAgICAgICB3aGlsZSAoY3VyckVsZW0gIT0gZWxlbSkg
eworICAgICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5leHRFbGVtID0gY3VyckVsZW0tPm5l
eHQ7CisgICAgICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPnRh
Z05hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHByZXZFbGVtLT5uZXh0ID0gbmV4dEVsZW07
CisgICAgICAgICAgICAgICAgICAgIHByZXZFbGVtLT5kZXJlZk5vZGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJldkVsZW0tPm5vZGUgPSBjdXJyRWxlbS0+bm9kZTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJldkVsZW0tPmRpZFJlZk5vZGUgPSBjdXJyRWxlbS0+ZGlkUmVmTm9kZTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJFbGVtOworICAgICAgICAgICAgICAgICAgICBtX3Ry
ZWVEZXB0aC0tOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBw
cmV2RWxlbSA9IGN1cnJFbGVtOworICAgICAgICAgICAgICAgIGN1cnJFbGVtID0gbmV4dEVsZW07
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gcmVvcGVuIHJlc2lk
dWFsIHRhZ3MgaW4gYmV0d2VlbiBtYXhFbGVtIGFuZCBlbGVtLiAgQW4gZXhhbXBsZSBvZiB0aGlz
IGNhc2UgaXM6CisgICAgICAgICAgICAvLyA8Zm9udD48aT5Nb288cD5Gb288L2ZvbnQ+LgorICAg
ICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHRyYW5zZm9ybSB0aGUgcGFydCBi
ZWZvcmUgdGhlIDxwPiBpbnRvOgorICAgICAgICAgICAgLy8gPGZvbnQ+PGk+TW9vPC9pPjwvZm9u
dD48aT4KKyAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIDxpPiB3aWxsIHJlbWFpbiBvcGVuLiAg
VGhpcyBpbnZvbHZlcyB0aGUgbW9kaWZpY2F0aW9uIG9mIGVsZW1lbnRzCisgICAgICAgICAgICAv
LyBpbiB0aGUgYmxvY2sgc3RhY2suCisgICAgICAgICAgICAvLyBUaGlzIHdpbGwgYWxzbyBhZmZl
Y3QgaG93IHdlIHVsdGltYXRlbHkgcmVwYXJlbnQgdGhlIGJsb2NrLCBzaW5jZSB3ZSB3YW50IGl0
IHRvIGVuZCB1cAorICAgICAgICAgICAgLy8gdW5kZXIgdGhlIHJlb3BlbmVkIHJlc2lkdWFsIHRh
Z3MgKGUuZy4sIHRoZSA8aT4gaW4gdGhlIGFib3ZlIGV4YW1wbGUuKQorICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IHByZXZOb2RlID0gMDsKKyAgICAgICAgICAgIGN1cnJFbGVtID0gbWF4RWxlbTsK
KyAgICAgICAgICAgIHdoaWxlIChjdXJyRWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2Nh
bE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhp
cyBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYWxsIHJlbGVhc2VSZWYgdG8g
Z2V0IGEgcmF3IHBvaW50ZXIgc2luY2Ugd2UgcGxhbiB0byBoYW5kIG92ZXIgb3duZXJzaGlwIHRv
IGN1cnJFbGVtLgorICAgICAgICAgICAgICAgICAgICBOb2RlKiBjdXJyTm9kZSA9IGN1cnJFbGVt
LT5ub2RlLT5jbG9uZU5vZGUoZmFsc2UpLnJlbGVhc2VSZWYoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoUmVzaWR1YWxTdHlsZUVycm9yLCAmY3Vyck5vZGUtPmxvY2FsTmFtZSgp
KTsKKyAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRoZSBzdGFjayBlbGVtZW50
J3Mgbm9kZSB0byBwb2ludCB0byB0aGUgY2xvbmUuCisgICAgICAgICAgICAgICAgICAgIC8vIFRo
ZSBzdGFjayBlbGVtZW50IGFkb3B0cyB0aGUgcmVmZXJlbmNlIHdlIG9idGFpbmVkIGFib3ZlIGJ5
IGNhbGxpbmcgcmVsZWFzZSgpLgorICAgICAgICAgICAgICAgICAgICBjdXJyRWxlbS0+ZGVyZWZO
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5ub2RlID0gY3Vyck5vZGU7Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5kaWRSZWZOb2RlID0gdHJ1ZTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBBdHRhY2ggdGhlIHByZXZpb3VzIG5vZGUgYXMgYSBjaGlsZCBvZiB0
aGlzIG5ldyBub2RlLgorICAgICAgICAgICAgICAgICAgICBpZiAocHJldk5vZGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyTm9kZS0+YXBwZW5kQ2hpbGQocHJldk5vZGUsIGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSAvLyBUaGUgbmV3IHBhcmVudCBmb3IgdGhlIGJsb2NrIGVs
ZW1lbnQgaXMgZ29pbmcgdG8gYmUgdGhlIGlubmVybW9zdCBjbG9uZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudEVsZW0gPSBjdXJyTm9kZTsgIC8vIEZJWE1FOiBXZSBzaGlmdGVkIHBh
cmVudEVsZW0gdG8gYmUgYSByZXNpZHVhbCBpbmxpbmUuICBXZSBuZXZlciBjaGVja2VkIHRvIHNl
ZSBpZiBibG9ja0VsZW0gY291bGQgYmUgbGVnYWxseSBwbGFjZWQgaW5zaWRlIHRoZSBpbmxpbmUg
dGhvdWdoLgorCisgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlID0gY3Vyck5vZGU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY3VyckVsZW0gPSBjdXJyRWxlbS0+bmV4
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgY2hhaW4g
b2YgbmV3IHJlc2lkdWFsIHN0eWxlIGVsZW1lbnRzIGlmIG9uZSBleGlzdHMuCisgICAgICAgICAg
ICBpZiAocHJldk5vZGUpCisgICAgICAgICAgICAgICAgZWxlbS0+bm9kZS0+YXBwZW5kQ2hpbGQo
cHJldk5vZGUsIGVjKTsgIC8vIEZJWE1FOiBUaGlzIGFwcGVuZCBjYW4gcmVzdWx0IGluIHdlaXJk
IHN0dWZmIGhhcHBlbmluZywgbGlrZSBhbiBpbmxpbmUgY2hhaW4gYmVpbmcgcHV0IGludG8gYSB0
YWJsZSBzZWN0aW9uLgorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGJsb2Nr
IGlzIHN0aWxsIGluIHRoZSB0cmVlLiBJZiBpdCBpc24ndCwgdGhlbiB3ZSBkb24ndAorICAgICAg
ICAvLyB3YW50IHRvIHJlbW92ZSBpdCBmcm9tIGl0cyBwYXJlbnQgKHRoYXQgd291bGQgY3Jhc2gp
IG9yIGluc2VydCBpdCBpbnRvCisgICAgICAgIC8vIGEgbmV3IHBhcmVudCBsYXRlci4gU2VlIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzgKKyAgICAgICAgYm9vbCBp
c0Jsb2NrU3RpbGxJblRyZWUgPSBibG9ja0VsZW0tPnBhcmVudE5vZGUoKTsKKworICAgICAgICAv
LyBXZSBuZWVkIHRvIG1ha2UgYSBjbG9uZSBvZiB8cmVzaWR1YWxFbGVtfCBhbmQgcGxhY2UgaXQg
anVzdCBpbnNpZGUgfGJsb2NrRWxlbXwuCisgICAgICAgIC8vIEFsbCBjb250ZW50IG9mIHxibG9j
a0VsZW18IGlzIHJlcGFyZW50ZWQgdG8gYmUgdW5kZXIgdGhpcyBjbG9uZS4gIFdlIHRoZW4KKyAg
ICAgICAgLy8gcmVwYXJlbnQgfGJsb2NrRWxlbXwgdXNpbmcgcmVhbCBET00gY2FsbHMgc28gdGhh
dCBhdHRhY2htZW50L2RldGFjaG1lbnQgd2lsbAorICAgICAgICAvLyBiZSBwZXJmb3JtZWQgdG8g
Zml4IHVwIHRoZSByZW5kZXJpbmcgdHJlZS4KKyAgICAgICAgLy8gU28gZm9yIHRoaXMgZXhhbXBs
ZTogPGI+Li4uPHA+Rm9vPC9iPkdvbzwvcD4KKyAgICAgICAgLy8gVGhlIGVuZCByZXN1bHQgd2ls
bCBiZTogPGI+Li4uPC9iPjxwPjxiPkZvbzwvYj5Hb288L3A+CisgICAgICAgIC8vCisgICAgICAg
IC8vIFN0ZXAgMTogUmVtb3ZlIHxibG9ja0VsZW18IGZyb20gaXRzIHBhcmVudCwgZG9pbmcgYSBi
YXRjaCBkZXRhY2ggb2YgYWxsIHRoZSBraWRzLgorICAgICAgICBpZiAoaXNCbG9ja1N0aWxsSW5U
cmVlKQorICAgICAgICAgICAgYmxvY2tFbGVtLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKGJs
b2NrRWxlbSwgZWMpOworCisgICAgICAgIE5vZGUqIG5ld05vZGVQdHIgPSAwOworICAgICAgICBp
ZiAoYmxvY2tFbGVtLT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgICAgIC8vIFN0ZXAgMjogQ2xv
bmUgfHJlc2lkdWFsRWxlbXwuCisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IHJl
c2lkdWFsRWxlbS0+Y2xvbmVOb2RlKGZhbHNlKTsgLy8gU2hhbGxvdyBjbG9uZS4gV2UgZG9uJ3Qg
cGljayB1cCB0aGUgc2FtZSBraWRzLgorICAgICAgICAgICAgbmV3Tm9kZVB0ciA9IG5ld05vZGUu
Z2V0KCk7CisgICAgICAgICAgICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZuZXdO
b2RlLT5sb2NhbE5hbWUoKSk7CisKKyAgICAgICAgICAgIC8vIFN0ZXAgMzogUGxhY2UgfGJsb2Nr
RWxlbXwncyBjaGlsZHJlbiB1bmRlciB8bmV3Tm9kZXwuICBSZW1vdmUgYWxsIG9mIHRoZSBjaGls
ZHJlbiBvZiB8YmxvY2tFbGVtfAorICAgICAgICAgICAgLy8gYmVmb3JlIHdlJ3ZlIHB1dCB8bmV3
RWxlbXwgaW50byB0aGUgZG9jdW1lbnQuICBUaGF0IHdheSB3ZSdsbCBvbmx5IGRvIG9uZSBhdHRh
Y2htZW50IG9mIGFsbAorICAgICAgICAgICAgLy8gdGhlIG5ldyBjb250ZW50IChpbnN0ZWFkIG9m
IGEgYnVuY2ggb2YgaW5kaXZpZHVhbCBhdHRhY2htZW50cykuCisgICAgICAgICAgICBOb2RlKiBj
dXJyTm9kZSA9IGJsb2NrRWxlbS0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgd2hpbGUgKGN1
cnJOb2RlKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbmV4dE5vZGUgPSBjdXJyTm9kZS0+bmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBuZXdOb2RlLT5hcHBlbmRDaGlsZChjdXJyTm9k
ZSwgZWMpOworICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gbmV4dE5vZGU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFN0ZXAgNDogUGxhY2UgfG5ld05vZGV8IHVuZGVyIHxibG9j
a0VsZW18LiAgfGJsb2NrRWxlbXwgaXMgc3RpbGwgb3V0IG9mIHRoZSBkb2N1bWVudCwgc28gbm8K
KyAgICAgICAgICAgIC8vIGF0dGFjaG1lbnQgY2FuIG9jY3VyIHlldC4KKyAgICAgICAgICAgIGJs
b2NrRWxlbS0+YXBwZW5kQ2hpbGQobmV3Tm9kZS5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CisKKyAgICAgICAgLy8gU3RlcCA1OiBS
ZXBhcmVudCB8YmxvY2tFbGVtfC4gIE5vdyB0aGUgZnVsbCBhdHRhY2htZW50IG9mIHRoZSBmaXhl
ZCB1cCB0cmVlIHRha2VzIHBsYWNlLgorICAgICAgICBpZiAoaXNCbG9ja1N0aWxsSW5UcmVlKQor
ICAgICAgICAgICAgcGFyZW50RWxlbS0+YXBwZW5kQ2hpbGQoYmxvY2tFbGVtLCBlYyk7CisKKyAg
ICAgICAgLy8gU3RlcCA2OiBQdWxsIHxlbGVtfCBvdXQgb2YgdGhlIHN0YWNrLCBzaW5jZSBpdCBp
cyBubyBsb25nZXIgZW5jbG9zaW5nIHVzLiAgQWxzbyB1cGRhdGUKKyAgICAgICAgLy8gdGhlIG5v
ZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmV2aW91cyBzdGFjayBlbGVtZW50IHNvIHRoYXQgd2hl
biBpdCBnZXRzIHBvcHBlZCwKKyAgICAgICAgLy8gaXQgZG9lc24ndCBtYWtlIHRoZSByZXNpZHVh
bCBlbGVtZW50IHRoZSBuZXh0IGN1cnJlbnQgbm9kZS4KKyAgICAgICAgSFRNTFN0YWNrRWxlbSog
Y3VyckVsZW0gPSBtYXhFbGVtOworICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2RWxlbSA9IDA7
CisgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVtKSB7CisgICAgICAgICAgICBwcmV2RWxl
bSA9IGN1cnJFbGVtOworICAgICAgICAgICAgY3VyckVsZW0gPSBjdXJyRWxlbS0+bmV4dDsKKyAg
ICAgICAgfQorICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IGVsZW0tPm5leHQ7CisgICAgICAgIHBy
ZXZFbGVtLT5kZXJlZk5vZGUoKTsKKyAgICAgICAgcHJldkVsZW0tPm5vZGUgPSBlbGVtLT5ub2Rl
OworICAgICAgICBwcmV2RWxlbS0+ZGlkUmVmTm9kZSA9IGVsZW0tPmRpZFJlZk5vZGU7CisgICAg
ICAgIG1fdHJlZURlcHRoLS07CisgICAgICAgIGlmICghZmluaXNoZWQpIHsKKyAgICAgICAgICAg
IC8vIFJlcHVycG9zZSB8ZWxlbXwgdG8gcmVwcmVzZW50IHxuZXdOb2RlfCBhbmQgaW5zZXJ0IGl0
IGF0IHRoZSBhcHByb3ByaWF0ZSBwb3NpdGlvbgorICAgICAgICAgICAgLy8gaW4gdGhlIHN0YWNr
LiBXZSBkbyBub3QgZG8gdGhpcyBmb3IgdGhlIGlubmVybW9zdCBibG9jaywgYmVjYXVzZSBpbiB0
aGF0IGNhc2UgdGhlIG5ldworICAgICAgICAgICAgLy8gbm9kZSBpcyBlZmZlY3RpdmVseSBubyBs
b25nZXIgb3Blbi4KKyAgICAgICAgICAgIGVsZW0tPm5leHQgPSBtYXhFbGVtOworICAgICAgICAg
ICAgZWxlbS0+bm9kZSA9IHByZXZNYXhFbGVtLT5ub2RlOworICAgICAgICAgICAgZWxlbS0+ZGlk
UmVmTm9kZSA9IHByZXZNYXhFbGVtLT5kaWRSZWZOb2RlOworICAgICAgICAgICAgZWxlbS0+c3Ry
YXlUYWJsZUNvbnRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByZXZNYXhFbGVtLT5uZXh0ID0g
ZWxlbTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdOb2RlUHRyKTsKKyAgICAgICAgICAgIHByZXZN
YXhFbGVtLT5ub2RlID0gbmV3Tm9kZVB0cjsKKyAgICAgICAgICAgIG5ld05vZGVQdHItPnJlZigp
OworICAgICAgICAgICAgcHJldk1heEVsZW0tPmRpZFJlZk5vZGUgPSB0cnVlOworICAgICAgICAg
ICAgbV90cmVlRGVwdGgrKzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkZWxldGUgZWxl
bTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogSWYgd2UgZXZlciBtYWtlIGEgY2FzZSBsaWtlIHRo
aXMgd29yazoKKyAgICAvLyA8dGFibGU+PGI+PGk+PGZvcm0+PC9iPjwvZm9ybT48L2k+PC90YWJs
ZT4KKyAgICAvLyBUaGVuIHRoaXMgY2hlY2sgd2lsbCBiZSB0b28gc2ltcGxpc3RpYy4gIFJpZ2h0
IG5vdyB0aGUgPGk+PGZvcm0+IGNoYWluIHdpbGwgZW5kIHVwIGluc2lkZSB0aGUgPHRib2R5Piwg
d2hpY2ggaXMgcHJldHR5IGNyYXp5LgorICAgIGlmIChzdHJheVRhYmxlQ29udGVudCkKKyAgICAg
ICAgbV9pblN0cmF5VGFibGVDb250ZW50LS07CisKKyAgICAvLyBTdGVwIDc6IFJlb3BlbiBpbnRl
cm1lZGlhdGUgaW5saW5lcywgZS5nLiwgPGI+PHA+PGk+Rm9vPC9iPkdvbzwvcD4uCisgICAgLy8g
SW4gdGhlIGFib3ZlIGV4YW1wbGUsIEdvbyBzaG91bGQgc3RheSBpdGFsaWMuCisgICAgLy8gV2Ug
Y2FwIHRoZSBudW1iZXIgb2YgdGFncyB3ZSdyZSB3aWxsaW5nIHRvIHJlb3BlbiBiYXNlZCBvZmYg
Y1Jlc2lkdWFsU3R5bGVNYXhEZXB0aC4KKyAgICAKKyAgICBIVE1MU3RhY2tFbGVtKiBjdXJyID0g
bV9ibG9ja1N0YWNrOworICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVTdGFjayA9IDA7
CisgICAgdW5zaWduZWQgc3RhY2tEZXB0aCA9IDE7CisgICAgdW5zaWduZWQgcmVkdW5kYW50U3R5
bGVDb3VudCA9IDA7CisgICAgd2hpbGUgKGN1cnIgJiYgY3VyciAhPSBtYXhFbGVtKSB7CisgICAg
ICAgIC8vIFdlIHdpbGwgYWN0dWFsbHkgc2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3BlbmluZwor
ICAgICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxv
Y2suCisgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3Vyci0+dGFnTmFtZSkgJiYgc3Rh
Y2tEZXB0aCsrIDwgY1Jlc2lkdWFsU3R5bGVNYXhEZXB0aCkgeworICAgICAgICAgICAgLy8gV2Un
dmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVz
aW5nIHRoZQorICAgICAgICAgICAgLy8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQg
bWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZworICAgICAgICAg
ICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2Yg
YWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCisgICAgICAgICAgICAvLyBmcm9tIHRoZSBv
dXRlcm1vc3QgdG8gdGhlIGlubmVybW9zdCwgaS5lLiwgcmVzaWR1YWxTdHlsZVN0YWNrIHdpbGwg
ZW5kIHVwIHBvaW50aW5nCisgICAgICAgICAgICAvLyB0byB0aGUgb3V0ZXJtb3N0IHRhZyB3ZSBu
ZWVkIHRvIHJlb3Blbi4KKyAgICAgICAgICAgIC8vIFdlIGFsc28gc2V0IGN1cnItPm5vZGUgdG8g
YmUgdGhlIGFjdHVhbCBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIElEIHN0b3JlZCBp
bgorICAgICAgICAgICAgLy8gY3Vyci0+aWQgcmF0aGVyIHRoYW4gdGhlIG5vZGUgdGhhdCB5b3Ug
c2hvdWxkIHBvcCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9mZgorICAgICAgICAg
ICAgLy8gdGhlIHN0YWNrLgorICAgICAgICAgICAgaWYgKHJlc2lkdWFsU3R5bGVTdGFjayAmJiBj
dXJyLT50YWdOYW1lID09IHJlc2lkdWFsU3R5bGVTdGFjay0+dGFnTmFtZSAmJiBjdXJyLT5ub2Rl
LT5hdHRyaWJ1dGVzKCktPm1hcHNFcXVpdmFsZW50KHJlc2lkdWFsU3R5bGVTdGFjay0+bm9kZS0+
YXR0cmlidXRlcygpKSkKKyAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50Kys7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVkdW5kYW50U3R5bGVDb3VudCA9IDA7
CisKKyAgICAgICAgICAgIGlmIChyZWR1bmRhbnRTdHlsZUNvdW50IDwgY01heFJlZHVuZGFudFRh
Z0RlcHRoKQorICAgICAgICAgICAgICAgIG1vdmVPbmVCbG9ja1RvU3RhY2socmVzaWR1YWxTdHls
ZVN0YWNrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CisKKyAgICAgICAg
Y3VyciA9IG1fYmxvY2tTdGFjazsKKyAgICB9CisKKyAgICByZW9wZW5SZXNpZHVhbFN0eWxlVGFn
cyhyZXNpZHVhbFN0eWxlU3RhY2ssIDApOyAvLyBTdHJheSB0YWJsZSBjb250ZW50IGNhbid0IGJl
IGFuIGlzc3VlIGhlcmUsIHNpbmNlIHNvbWUgZWxlbWVudCBhYm92ZSB3aWxsIGFsd2F5cyBiZWNv
bWUgdGhlIHJvb3Qgb2YgbmV3IHN0cmF5IHRhYmxlIGNvbnRlbnQuCisKKyAgICBtX2hhbmRsaW5n
UmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyA9IGZhbHNlOworfQorCit2b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVs
ZW0sIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQoreworICAgIC8vIExvb3AgZm9yIGVhY2gg
dGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCisgICAgd2hpbGUgKGVsZW0pIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGUgRE9NIG5vZGUgZm9yIHRoaXMgZWxl
bWVudC4KKyAgICAgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBlbGVtLT5ub2RlLT5jbG9uZU5v
ZGUoZmFsc2UpOyAKKyAgICAgICAgcmVwb3J0RXJyb3IoUmVzaWR1YWxTdHlsZUVycm9yLCAmbmV3
Tm9kZS0+bG9jYWxOYW1lKCkpOworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgbmV3IG5vZGUuIElu
IHRoZSBtYWxmb3JtZWQgdGFibGUgY2FzZSwgd2UgbmVlZCB0byBpbnNlcnQgYmVmb3JlIHRoZSB0
YWJsZSwKKyAgICAgICAgLy8gd2hpY2ggd2lsbCBiZSB0aGUgbGFzdCBjaGlsZC4KKyAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIGlmIChtYWxmb3JtZWRUYWJsZVBhcmVudCkK
KyAgICAgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50LT5pbnNlcnRCZWZvcmUobmV3Tm9kZSwg
bWFsZm9ybWVkVGFibGVQYXJlbnQtPmxhc3RDaGlsZCgpLCBlYyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fY3VycmVudC0+YXBwZW5kQ2hpbGQobmV3Tm9kZSwgZWMpOworICAgICAgICAv
LyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRvIGlnbm9yZSB0aGUgZXhjZXB0aW9ucyBoZXJlPwor
CisgICAgICAgIC8vIE5vdyBwdXNoIGEgbmV3IHN0YWNrIGVsZW1lbnQgZm9yIHRoaXMgbm9kZSB3
ZSBqdXN0IGNyZWF0ZWQuCisgICAgICAgIHB1c2hCbG9jayhlbGVtLT50YWdOYW1lLCBlbGVtLT5s
ZXZlbCk7CisgICAgICAgIG5ld05vZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICAg
ICAgLy8gU2V0IG91ciBzdHJheVRhYmxlQ29udGVudCBib29sZWFuIGlmIG5lZWRlZCwgc28gdGhh
dCB0aGUgcmVvcGVuZWQgdGFnIGFsc28ga25vd3MKKyAgICAgICAgLy8gdGhhdCBpdCBpcyBpbnNp
ZGUgYSBtYWxmb3JtZWQgdGFibGUuCisgICAgICAgIG1fYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNv
bnRlbnQgPSBtYWxmb3JtZWRUYWJsZVBhcmVudCAhPSAwOworICAgICAgICBpZiAobV9ibG9ja1N0
YWNrLT5zdHJheVRhYmxlQ29udGVudCkKKyAgICAgICAgICAgIG1faW5TdHJheVRhYmxlQ29udGVu
dCsrOworCisgICAgICAgIC8vIENsZWFyIG91ciBtYWxmb3JtZWQgdGFibGUgcGFyZW50IHZhcmlh
YmxlLgorICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7CisKKyAgICAgICAgLy8gVXBk
YXRlIHxjdXJyZW50fCBtYW51YWxseSB0byBwb2ludCB0byB0aGUgbmV3IG5vZGUuCisgICAgICAg
IHNldEN1cnJlbnQobmV3Tm9kZS5nZXQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBBZHZhbmNl
IHRvIHRoZSBuZXh0IHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgorICAgICAgICBIVE1M
U3RhY2tFbGVtKiBuZXh0ID0gZWxlbS0+bmV4dDsKKyAgICAgICAgZWxlbS0+ZGVyZWZOb2RlKCk7
CisgICAgICAgIGRlbGV0ZSBlbGVtOworICAgICAgICBlbGVtID0gbmV4dDsKKyAgICB9Cit9CisK
K3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSwgaW50IGxldmVsKQoreworICAgIG1fYmxvY2tTdGFjayA9IG5ldyBIVE1M
U3RhY2tFbGVtKHRhZ05hbWUsIGxldmVsLCBtX2N1cnJlbnQsIG1fZGlkUmVmQ3VycmVudCwgbV9i
bG9ja1N0YWNrKTsKKyAgICBpZiAobGV2ZWwgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KQor
ICAgICAgICBtX2Jsb2Nrc0luU3RhY2srKzsKKyAgICBtX3RyZWVEZXB0aCsrOworICAgIG1fZGlk
UmVmQ3VycmVudCA9IGZhbHNlOworICAgIGlmICh0YWdOYW1lID09IHBUYWcpCisgICAgICAgIG1f
aGFzUEVsZW1lbnRJblNjb3BlID0gSW5TY29wZTsKKyAgICBlbHNlIGlmIChpc1Njb3BpbmdUYWco
dGFnTmFtZSkpCisgICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKK30K
Kwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BCbG9jayhjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIGJvb2wgcmVwb3J0RXJyb3JzKQoreworICAgIEhUTUxTdGFja0VsZW0q
IGVsZW0gPSBtX2Jsb2NrU3RhY2s7CisKKyAgICBpZiAobV9wYXJzZXJRdWlya3MgJiYgZWxlbSAm
JiAhbV9wYXJzZXJRdWlya3MtPnNob3VsZFBvcEJsb2NrKGVsZW0tPnRhZ05hbWUsIHRhZ05hbWUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgbWF4TGV2ZWwgPSAwOworCisgICAgd2hpbGUg
KGVsZW0gJiYgKGVsZW0tPnRhZ05hbWUgIT0gdGFnTmFtZSkpIHsKKyAgICAgICAgaWYgKG1heExl
dmVsIDwgZWxlbS0+bGV2ZWwpCisgICAgICAgICAgICBtYXhMZXZlbCA9IGVsZW0tPmxldmVsOwor
ICAgICAgICBlbGVtID0gZWxlbS0+bmV4dDsKKyAgICB9CisKKyAgICBpZiAoIWVsZW0pIHsKKyAg
ICAgICAgaWYgKHJlcG9ydEVycm9ycykKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKFN0cmF5Q2xv
c2VUYWdFcnJvciwgJnRhZ05hbWUsIDAsIHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1heExldmVsID4gZWxlbS0+bGV2ZWwpIHsKKyAgICAgICAgLy8gV2UgZGlkbid0
IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwgZS5nLiwKKyAg
ICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgorICAg
ICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1lKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2Nr
cyhlbGVtKTsKKyAgICB9CisKKyAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3Rl
ZEJ5UmVzaWR1YWxTdHlsZShlbGVtLT50YWdOYW1lKTsKKyAgICBIVE1MU3RhY2tFbGVtKiByZXNp
ZHVhbFN0eWxlU3RhY2sgPSAwOworICAgIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsK
KyAgICAKKyAgICBlbGVtID0gbV9ibG9ja1N0YWNrOworICAgIHVuc2lnbmVkIHN0YWNrRGVwdGgg
PSAxOworICAgIHVuc2lnbmVkIHJlZHVuZGFudFN0eWxlQ291bnQgPSAwOworICAgIHdoaWxlIChl
bGVtKSB7CisgICAgICAgIGlmIChlbGVtLT50YWdOYW1lID09IHRhZ05hbWUpIHsKKyAgICAgICAg
ICAgIGludCBzdHJheVRhYmxlID0gbV9pblN0cmF5VGFibGVDb250ZW50OworICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKKyAgICAgICAgICAgIGVsZW0gPSAwOworCisgICAgICAgICAgICAvLyBU
aGlzIGVsZW1lbnQgd2FzIHRoZSByb290IG9mIHNvbWUgbWFsZm9ybWVkIGNvbnRlbnQganVzdCBp
bnNpZGUgYW4gaW1wbGljaXQgb3IKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0IDx0Ym9keT4gb3Ig
PHRyPi4KKyAgICAgICAgICAgIC8vIElmIHdlIGVuZCB1cCBuZWVkaW5nIHRvIHJlb3BlbiByZXNp
ZHVhbCBzdHlsZSB0YWdzLCB0aGUgcm9vdCBvZiB0aGUgcmVvcGVuZWQgY2hhaW4KKyAgICAgICAg
ICAgIC8vIG11c3QgYWxzbyBrbm93IHRoYXQgaXQgaXMgdGhlIHJvb3Qgb2YgbWFsZm9ybWVkIGNv
bnRlbnQgaW5zaWRlIGEgPHRib2R5Pi88dHI+LgorICAgICAgICAgICAgaWYgKHN0cmF5VGFibGUg
JiYgKG1faW5TdHJheVRhYmxlQ29udGVudCA8IHN0cmF5VGFibGUpICYmIHJlc2lkdWFsU3R5bGVT
dGFjaykgeworICAgICAgICAgICAgICAgIE5vZGUqIGN1cnIgPSBtX2N1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUodGFibGVUYWcpKQorICAg
ICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAg
ICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gY3VyciA/IGN1cnItPnBhcmVudE5vZGUoKSA6IDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAobV9jdXJyZW50Rm9ybUVsZW1lbnQgJiYgZWxlbS0+dGFnTmFtZSA9PSBmb3JtVGFnKQorICAg
ICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAoYW5k
IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4gYXR0
cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKKyAgICAgICAgICAgICAgICAvLyBi
b3R0b20gbWFyZ2luLgorICAgICAgICAgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50LT5zZXRN
YWxmb3JtZWQodHJ1ZSk7CisKKyAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdGFnIGZvciBy
ZW9wZW5pbmcKKyAgICAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0
aGlzIGVudGlyZSBibG9jay4KKyAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBp
c1Jlc2lkdWFsU3R5bGVUYWcoZWxlbS0+dGFnTmFtZSkgJiYgc3RhY2tEZXB0aCsrIDwgY1Jlc2lk
dWFsU3R5bGVNYXhEZXB0aCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQg
dGhlIHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRv
IHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCisgICAgICAgICAgICAgICAgLy8g
ZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRo
ZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCisgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3V0
ZXJtb3N0IHRvIHRoZSBpbm5lcm1vc3QsIGkuZS4sIHJlc2lkdWFsU3R5bGVTdGFjayB3aWxsIGVu
ZCB1cCBwb2ludGluZworICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFnIHdl
IG5lZWQgdG8gcmVvcGVuLgorICAgICAgICAgICAgICAgIC8vIFdlIGFsc28gc2V0IGVsZW0tPm5v
ZGUgdG8gYmUgdGhlIGFjdHVhbCBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIElEIHN0
b3JlZCBpbgorICAgICAgICAgICAgICAgIC8vIGVsZW0tPmlkIHJhdGhlciB0aGFuIHRoZSBub2Rl
IHRoYXQgeW91IHNob3VsZCBwb3AgdG8gd2hlbiB0aGUgZWxlbWVudCBnZXRzIHB1bGxlZCBvZmYK
KyAgICAgICAgICAgICAgICAvLyB0aGUgc3RhY2suCisgICAgICAgICAgICAgICAgaWYgKHJlc2lk
dWFsU3R5bGVTdGFjayAmJiBlbGVtLT50YWdOYW1lID09IHJlc2lkdWFsU3R5bGVTdGFjay0+dGFn
TmFtZSAmJiBlbGVtLT5ub2RlLT5hdHRyaWJ1dGVzKCktPm1hcHNFcXVpdmFsZW50KHJlc2lkdWFs
U3R5bGVTdGFjay0+bm9kZS0+YXR0cmlidXRlcygpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVk
dW5kYW50U3R5bGVDb3VudCsrOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcmVkdW5kYW50U3R5bGVDb3VudCA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAocmVk
dW5kYW50U3R5bGVDb3VudCA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0aCkKKyAgICAgICAgICAgICAg
ICAgICAgbW92ZU9uZUJsb2NrVG9TdGFjayhyZXNpZHVhbFN0eWxlU3RhY2spOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CisgICAgICAgICAgICBl
bGVtID0gbV9ibG9ja1N0YWNrOworICAgICAgICB9CisgICAgfQorCisgICAgcmVvcGVuUmVzaWR1
YWxTdHlsZVRhZ3MocmVzaWR1YWxTdHlsZVN0YWNrLCBtYWxmb3JtZWRUYWJsZVBhcmVudCk7Cit9
CisKK2lubGluZSBIVE1MU3RhY2tFbGVtKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BP
bmVCbG9ja0NvbW1vbigpCit7CisgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFj
azsKKworICAgIC8vIEZvcm0gZWxlbWVudHMgcmVzdG9yZSB0aGVpciBzdGF0ZSBkdXJpbmcgdGhl
IHBhcnNpbmcgcHJvY2Vzcy4KKyAgICAvLyBBbHNvLCBhIGZldyBlbGVtZW50cyAoPGFwcGxldD4s
IDxvYmplY3Q+KSBuZWVkIHRvIGtub3cgd2hlbiBhbGwgY2hpbGQgZWxlbWVudHMgKDxwYXJhbT5z
KSBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChtX2N1cnJlbnQgJiYgZWxlbS0+bm9kZSAhPSBtX2N1
cnJlbnQpCisgICAgICAgIG1fY3VycmVudC0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAg
ICBpZiAobV9ibG9ja1N0YWNrLT5sZXZlbCA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpIHsK
KyAgICAgICAgQVNTRVJUKG1fYmxvY2tzSW5TdGFjayA+IDApOworICAgICAgICBtX2Jsb2Nrc0lu
U3RhY2stLTsKKyAgICB9CisgICAgbV90cmVlRGVwdGgtLTsKKyAgICBtX2Jsb2NrU3RhY2sgPSBl
bGVtLT5uZXh0OworICAgIG1fY3VycmVudCA9IGVsZW0tPm5vZGU7CisgICAgbV9kaWRSZWZDdXJy
ZW50ID0gZWxlbS0+ZGlkUmVmTm9kZTsKKworICAgIGlmIChlbGVtLT5zdHJheVRhYmxlQ29udGVu
dCkKKyAgICAgICAgbV9pblN0cmF5VGFibGVDb250ZW50LS07CisKKyAgICBpZiAoZWxlbS0+dGFn
TmFtZSA9PSBwVGFnKQorICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IE5vdEluU2NvcGU7
CisgICAgZWxzZSBpZiAoaXNTY29waW5nVGFnKGVsZW0tPnRhZ05hbWUpKQorICAgICAgICBtX2hh
c1BFbGVtZW50SW5TY29wZSA9IFVua25vd247CisKKyAgICByZXR1cm4gZWxlbTsKK30KKwordm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BPbmVCbG9jaygpCit7CisgICAgLy8gU3Rv
cmUgdGhlIGN1cnJlbnQgbm9kZSBiZWZvcmUgcG9wT25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBp
dC4KKyAgICBOb2RlKiBsYXN0Q3VycmVudCA9IG1fY3VycmVudDsKKyAgICBib29sIGRpZFJlZkxh
c3RDdXJyZW50ID0gbV9kaWRSZWZDdXJyZW50OworCisgICAgZGVsZXRlIHBvcE9uZUJsb2NrQ29t
bW9uKCk7CisKKyAgICBpZiAoZGlkUmVmTGFzdEN1cnJlbnQpCisgICAgICAgIGxhc3RDdXJyZW50
LT5kZXJlZigpOworfQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om1vdmVPbmVC
bG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhlYWQpCit7CisgICAgLy8gV2UnbGwgYmUgdXNp
bmcgdGhlIHN0YWNrIGVsZW1lbnQgd2UncmUgcG9wcGluZywgYnV0IGZvciB0aGUgY3VycmVudCBu
b2RlLgorICAgIC8vIFNlZSB0aGUgdHdvIGNhbGxlcnMgZm9yIGRldGFpbHMuCisKKyAgICAvLyBT
dG9yZSB0aGUgY3VycmVudCBub2RlIGJlZm9yZSBwb3BPbmVCbG9ja0NvbW1vbiBvdmVyd3JpdGVz
IGl0LgorICAgIE5vZGUqIGxhc3RDdXJyZW50ID0gbV9jdXJyZW50OworICAgIGJvb2wgZGlkUmVm
TGFzdEN1cnJlbnQgPSBtX2RpZFJlZkN1cnJlbnQ7CisKKyAgICAvLyBQb3AgdGhlIGJsb2NrLCBi
dXQgZG9uJ3QgZGVyZWYgdGhlIGN1cnJlbnQgbm9kZSBhcyBwb3BPbmVCbG9jayBkb2VzIGJlY2F1
c2UKKyAgICAvLyB3ZSdsbCBiZSB1c2luZyB0aGUgcG9pbnRlciBpbiB0aGUgbmV3IHN0YWNrIGVs
ZW1lbnQuCisgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IHBvcE9uZUJsb2NrQ29tbW9uKCk7CisK
KyAgICAvLyBUcmFuc2ZlciB0aGUgY3VycmVudCBub2RlIGludG8gdGhlIHN0YWNrIGVsZW1lbnQu
CisgICAgLy8gTm8gbmVlZCB0byBkZXJlZiB0aGUgb2xkIGVsZW0tPm5vZGUgYmVjYXVzZSBwb3BP
bmVCbG9ja0NvbW1vbiB0cmFuc2ZlcnJlZAorICAgIC8vIGl0IGludG8gdGhlIG1fY3VycmVudC9t
X2RpZFJlZkN1cnJlbnQgZmllbGRzLgorICAgIGVsZW0tPm5vZGUgPSBsYXN0Q3VycmVudDsKKyAg
ICBlbGVtLT5kaWRSZWZOb2RlID0gZGlkUmVmTGFzdEN1cnJlbnQ7CisgICAgZWxlbS0+bmV4dCA9
IGhlYWQ7CisgICAgaGVhZCA9IGVsZW07Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6Y2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpCit7CisgICAgbV9oYXNQRWxlbWVudElu
U2NvcGUgPSBOb3RJblNjb3BlOworICAgIEhUTUxTdGFja0VsZW0qIGVsZW0gPSBtX2Jsb2NrU3Rh
Y2s7CisgICAgd2hpbGUgKGVsZW0pIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lID0gZWxlbS0+dGFnTmFtZTsKKyAgICAgICAgaWYgKHRhZ05hbWUgPT0gcFRhZykgeworICAg
ICAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBJblNjb3BlOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9IGVsc2UgaWYgKGlzU2NvcGluZ1RhZyh0YWdOYW1lKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZWxlbSA9IGVsZW0tPm5leHQ7CisgICAgfQorfQorCit2b2lk
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcElubGluZUJsb2NrcygpCit7CisgICAgd2hp
bGUgKG1fYmxvY2tTdGFjayAmJiBpc0lubGluZShtX2N1cnJlbnQpKQorICAgICAgICBwb3BPbmVC
bG9jaygpOworfQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyZWVCbG9jaygp
Cit7CisgICAgd2hpbGUgKG1fYmxvY2tTdGFjaykKKyAgICAgICAgcG9wT25lQmxvY2soKTsKKyAg
ICBBU1NFUlQoIW1fYmxvY2tzSW5TdGFjayk7CisgICAgQVNTRVJUKCFtX3RyZWVEZXB0aCk7Cit9
CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Y3JlYXRlSGVhZCgpCit7CisgICAg
aWYgKG1faGVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgeworICAgICAgICBpbnNlcnRO
b2RlKEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAgICAg
QVNTRVJUKG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpIHx8IG1faXNQYXJzaW5nRnJhZ21l
bnQpOworICAgIH0KKworICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9j
dW1lbnQpOworCisgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIEhUTUxFbGVtZW50KiBib2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLT5pbnNl
cnRCZWZvcmUobV9oZWFkLmdldCgpLCBib2R5LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICBt
X2hlYWQgPSAwOworICAgICAgICAKKyAgICAvLyBJZiB0aGUgYm9keSBkb2VzIG5vdCBleGlzdCB5
ZXQsIHRoZW4gdGhlIDxoZWFkPiBzaG91bGQgYmUgcHVzaGVkIGFzIHRoZSBjdXJyZW50IGJsb2Nr
LgorICAgIGlmIChtX2hlYWQgJiYgIWJvZHkpIHsKKyAgICAgICAgcHVzaEJsb2NrKG1faGVhZC0+
bG9jYWxOYW1lKCksIG1faGVhZC0+dGFnUHJpb3JpdHkoKSk7CisgICAgICAgIHNldEN1cnJlbnQo
bV9oZWFkLmdldCgpKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlSXNpbmRleChUb2tlbiogdCkKK3sKKyAgICBSZWZQdHI8Tm9k
ZT4gbiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisKKyAgICBOYW1lZE5v
ZGVNYXAqIGF0dHJzID0gdC0+YXR0cnMuZ2V0KCk7CisKKyAgICBSZWZQdHI8SFRNTElzSW5kZXhF
bGVtZW50PiBpc0luZGV4ID0gSFRNTElzSW5kZXhFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCwg
bV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOworICAgIGlzSW5kZXgtPnNldEF0dHJpYnV0ZU1h
cChhdHRycyk7CisgICAgaXNJbmRleC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCAia2h0bWxfaXNp
bmRleCIpOworCisgICAgU3RyaW5nIHRleHQgPSBzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24o
KTsKKyAgICBpZiAoYXR0cnMpIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYSA9IGF0dHJzLT5n
ZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpKQorICAgICAgICAgICAgdGV4dCA9IGEtPnZhbHVl
KCkuc3RyaW5nKCkgKyAiICI7CisgICAgICAgIHQtPmF0dHJzID0gMDsKKyAgICB9CisKKyAgICBu
LT5hZGRDaGlsZChIVE1MSFJFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkpOworICAgIG4tPmFk
ZENoaWxkKFRleHQ6OmNyZWF0ZShtX2RvY3VtZW50LCB0ZXh0KSk7CisgICAgbi0+YWRkQ2hpbGQo
aXNJbmRleC5yZWxlYXNlKCkpOworICAgIG4tPmFkZENoaWxkKEhUTUxIUkVsZW1lbnQ6OmNyZWF0
ZShtX2RvY3VtZW50KSk7CisKKyAgICByZXR1cm4gbi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6c3RhcnRCb2R5KCkKK3sKKyAgICBpZiAobV9pbkJvZHkp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faW5Cb2R5ID0gdHJ1ZTsKKworICAgIGlmIChtX2lz
aW5kZXhFbGVtZW50KSB7CisgICAgICAgIGluc2VydE5vZGUobV9pc2luZGV4RWxlbWVudC5nZXQo
KSwgdHJ1ZSAvKiBkb24ndCBkZXNjZW5kIGludG8gdGhpcyBub2RlICovKTsKKyAgICAgICAgbV9p
c2luZGV4RWxlbWVudCA9IDA7CisgICAgfQorfQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmZpbmlzaGVkKCkKK3sKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGNvbXBsZXRlbHkg
ZW1wdHkgZG9jdW1lbnQsIGhlcmUncyB0aGUgcGxhY2UgdG8gY3JlYXRlIHRoZSBIVE1MIGVsZW1l
bnQuCisgICAgaWYgKG1fY3VycmVudCAmJiBtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYg
IW1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBpbnNlcnROb2RlKEhUTUxI
dG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKKworICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGF0ICJjdXJyZW50IiBpcyBub3QgbGVmdCBwb2ludGluZyB0byBhIG5vZGUgd2hlbiB0
aGUgZG9jdW1lbnQgaXMgZGVzdHJveWVkLgorICAgIGZyZWVCbG9jaygpOworICAgIHNldEN1cnJl
bnQoMCk7CisKKyAgICAvLyBXYXJuaW5nLCB0aGlzIG1heSBkZWxldGUgdGhlIHBhcnNlciwgc28g
ZG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIGVsc2UgYWZ0ZXIgdGhpcy4KKyAgICBpZiAoIW1faXNQ
YXJzaW5nRnJhZ21lbnQpCisgICAgICAgIG1fZG9jdW1lbnQtPmZpbmlzaGVkUGFyc2luZygpOwor
fQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJlcG9ydEVycm9yVG9Db25zb2xl
KEhUTUxQYXJzZXJFcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05h
bWUxLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyLCBib29sIGNsb3NlVGFncykKK3sgICAg
CisgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBo
dG1sVG9rZW5pemVyID0gc3RhdGljX2Nhc3Q8TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKj4obV9k
b2N1bWVudC0+cGFyc2VyKCkpOworICAgIGludCBsaW5lTnVtYmVyID0gaHRtbFRva2VuaXplci0+
bGluZU51bWJlcigpICsgMTsKKworICAgIEF0b21pY1N0cmluZyB0YWcxOworICAgIEF0b21pY1N0
cmluZyB0YWcyOworICAgIGlmICh0YWdOYW1lMSkgeworICAgICAgICBpZiAoKnRhZ05hbWUxID09
ICIjdGV4dCIpCisgICAgICAgICAgICB0YWcxID0gIlRleHQiOworICAgICAgICBlbHNlIGlmICgq
dGFnTmFtZTEgPT0gIiNjb21tZW50IikKKyAgICAgICAgICAgIHRhZzEgPSAiPCEtLSBjb21tZW50
IC0tPiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRhZzEgPSAoY2xvc2VUYWdzID8gIjwv
IiA6ICI8IikgKyAqdGFnTmFtZTEgKyAiPiI7CisgICAgfQorICAgIGlmICh0YWdOYW1lMikgewor
ICAgICAgICBpZiAoKnRhZ05hbWUyID09ICIjdGV4dCIpCisgICAgICAgICAgICB0YWcyID0gIlRl
eHQiOworICAgICAgICBlbHNlIGlmICgqdGFnTmFtZTIgPT0gIiNjb21tZW50IikKKyAgICAgICAg
ICAgIHRhZzIgPSAiPCEtLSBjb21tZW50IC0tPiI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRhZzIgPSAoY2xvc2VUYWdzID8gIjwvIiA6ICI8IikgKyAqdGFnTmFtZTIgKyAiPiI7CisgICAg
fQorICAgICAgICAKKyAgICBjb25zdCBjaGFyKiBlcnJvck1zZyA9IGh0bWxQYXJzZXJFcnJvck1l
c3NhZ2VUZW1wbGF0ZShlcnJvckNvZGUpOworICAgIGlmICghZXJyb3JNc2cpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaWYgKGh0bWxUb2tlbml6
ZXItPnByb2Nlc3NpbmdDb250ZW50V3JpdHRlbkJ5U2NyaXB0KCkpCisgICAgICAgIG1lc3NhZ2Ug
Kz0gaHRtbFBhcnNlckRvY3VtZW50V3JpdGVNZXNzYWdlKCk7CisgICAgbWVzc2FnZSArPSBlcnJv
ck1zZzsKKyAgICBtZXNzYWdlLnJlcGxhY2UoIiV0YWcxIiwgdGFnMSk7CisgICAgbWVzc2FnZS5y
ZXBsYWNlKCIldGFnMiIsIHRhZzIpOworCisgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xl
KCktPmFkZE1lc3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCAKKyAgICAg
ICAgaXNXYXJuaW5nKGVycm9yQ29kZSkgPyBXYXJuaW5nTWVzc2FnZUxldmVsIDogRXJyb3JNZXNz
YWdlTGV2ZWwsCisgICAgICAgIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIG1fZG9jdW1lbnQtPnVybCgp
LnN0cmluZygpKTsKK30KKworI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKK2Jvb2wgc2hvdWxk
Q3JlYXRlSW1wbGljaXRIZWFkKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlQoZG9j
dW1lbnQpOworICAgIAorICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCkg
PyBkb2N1bWVudC0+cGFnZSgpLT5zZXR0aW5ncygpIDogMDsKKyAgICByZXR1cm4gc2V0dGluZ3Mg
PyAhc2V0dGluZ3MtPm5lZWRzTGVvcGFyZE1haWxRdWlya3MoKSA6IHRydWU7Cit9CisjZWxpZiBk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQo
RG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgCisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCkt
PnNldHRpbmdzKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncyA/ICFzZXR0aW5ncy0+bmVlZHNU
aWdlck1haWxRdWlya3MoKSA6IHRydWU7Cit9CisjZW5kaWYKKworCitTdHJpbmcgc2VyaWFsaXpl
Rm9yTnVtYmVyVHlwZShkb3VibGUgbnVtYmVyKQoreworICAgIC8vIEFjY29yZGluZyB0byBIVE1M
NSwgInRoZSBiZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgbiBhcyBhIGZsb2F0aW5n
CisgICAgLy8gcG9pbnQgbnVtYmVyIiBpcyBhIHN0cmluZyBwcm9kdWNlZCBieSBhcHBseWluZyBU
b1N0cmluZygpIHRvIG4uCisgICAgRHRvYUJ1ZmZlciBidWZmZXI7CisgICAgdW5zaWduZWQgbGVu
Z3RoOworICAgIGRvdWJsZVRvU3RyaW5nSW5KYXZhU2NyaXB0Rm9ybWF0KG51bWJlciwgYnVmZmVy
LCAmbGVuZ3RoKTsKKyAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlciwgbGVuZ3RoKTsKK30KKworYm9v
bCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJpbmcmIHNyYywgZG91YmxlKiBv
dXQpCit7CisgICAgLy8gU2VlIEhUTUw1IDIuNC40LjMgYFJlYWwgbnVtYmVycy4nCisKKyAgICBp
ZiAoc3JjLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFN0cmluZzo6
dG9Eb3VibGUoKSBhY2NlcHRzIGxlYWRpbmcgKyBcdCBcbiBcdiBcZiBcciBhbmQgU1BBQ0UsIHdo
aWNoIGFyZSBpbnZhbGlkIGluIEhUTUw1LgorICAgIC8vIFNvLCBjaGVjayB0aGUgZmlyc3QgY2hh
cmFjdGVyLgorICAgIGlmIChzcmNbMF0gIT0gJy0nICYmIChzcmNbMF0gPCAnMCcgfHwgc3JjWzBd
ID4gJzknKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCB2YWxpZCA9IGZhbHNl
OworICAgIGRvdWJsZSB2YWx1ZSA9IHNyYy50b0RvdWJsZSgmdmFsaWQpOworICAgIGlmICghdmFs
aWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBOYU4gYW5kIEluZmluaXR5IGFyZSBu
b3QgdmFsaWQgbnVtYmVycyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAgIGlmICghaXNm
aW5pdGUodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gLTAgLT4gMAorICAg
IGlmICghdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBpZiAob3V0KQorICAgICAgICAq
b3V0ID0gdmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogCiAjaW5j
bHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCkBA
IC0xNDAsNyArMTQwLDcgQEAgc3RydWN0IEhUTUxTdGFja0VsZW0gOiBOb25jb3B5YWJsZSB7CiAg
KgogICovCiAKLUxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3J0RXJyb3JzKQorTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wg
cmVwb3J0RXJyb3JzKQogICAgIDogbV9kb2N1bWVudChkb2MpCiAgICAgLCBtX2N1cnJlbnQoZG9j
KQogICAgICwgbV9kaWRSZWZDdXJyZW50KGZhbHNlKQpAQCAtMTYwLDcgKzE2MCw3IEBAIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OkxlZ2FjeUhUTUxUcmUKIHsKIH0KIAotTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50
KiBmcmFnLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikK
K0xlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyKERvY3VtZW50RnJh
Z21lbnQqIGZyYWcsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNz
aW9uKQogICAgIDogbV9kb2N1bWVudChmcmFnLT5kb2N1bWVudCgpKQogICAgICwgbV9jdXJyZW50
KGZyYWcpCiAgICAgLCBtX2RpZFJlZkN1cnJlbnQodHJ1ZSkKQEAgLTE4MiwxNCArMTgyLDE0IEBA
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OkxlZ2FjeUhUTUxUcmUKICAgICAgICAgZnJhZy0+
cmVmKCk7CiB9CiAKLUxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6On5MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yKCkKK0xlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6fkxlZ2FjeUhUTUxUcmVlQnVpbGRl
cigpCiB7CiAgICAgZnJlZUJsb2NrKCk7CiAgICAgaWYgKG1fZGlkUmVmQ3VycmVudCkKICAgICAg
ICAgbV9jdXJyZW50LT5kZXJlZigpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OnJlc2V0KCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpyZXNldCgpCiB7CiAgICAg
QVNTRVJUKCFtX2lzUGFyc2luZ0ZyYWdtZW50KTsKIApAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVzZXQoKQogICAgICAgICBtX3BhcnNlclF1aXJr
cy0+cmVzZXQoKTsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpzZXRDdXJy
ZW50KE5vZGUqIG5ld0N1cnJlbnQpIAordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnNldEN1
cnJlbnQoTm9kZSogbmV3Q3VycmVudCkgCiB7CiAgICAgYm9vbCBkaWRSZWZOZXdDdXJyZW50ID0g
bmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IG1fZG9jdW1lbnQ7CiAgICAgaWYgKGRpZFJlZk5l
d0N1cnJlbnQpIApAQCAtMjMwLDcgKzIzMCw3IEBAIGlubGluZSBzdGF0aWMgaW50IHRhZ1ByaW9y
aXR5T2ZOb2RlKE5vZGUKICAgICByZXR1cm4gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihuKS0+dGFnUHJpb3JpdHkoKSA6IDA7CiB9CiAKLWlubGluZSB2b2lk
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmxpbWl0RGVwdGgoaW50IHRhZ1ByaW9yaXR5KQor
aW5saW5lIHZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpsaW1pdERlcHRoKGludCB0YWdQcmlv
cml0eSkKIHsKICAgICB3aGlsZSAobV90cmVlRGVwdGggPj0gbWF4RE9NVHJlZURlcHRoKQogICAg
ICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUpOwpAQCAtMjQwLDEzICsyNDAsMTMg
QEAgaW5saW5lIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bAogICAgIH0KIH0KIAot
aW5saW5lIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5zZXJ0Tm9kZUFmdGVyTGlt
aXREZXB0aChOb2RlKiBuLCBib29sIGZsYXQpCitpbmxpbmUgYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6Omluc2VydE5vZGVBZnRlckxpbWl0RGVwdGgoTm9kZSogbiwgYm9vbCBmbGF0KQogewog
ICAgIGxpbWl0RGVwdGgodGFnUHJpb3JpdHlPZk5vZGUobikpOwogICAgIHJldHVybiBpbnNlcnRO
b2RlKG4sIGZsYXQpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OnBhcnNlVG9rZW4oVG9rZW4qIHQpCitQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxU
cmVlQnVpbGRlcjo6cGFyc2VUb2tlbihUb2tlbiogdCkKIHsKICAgICBpZiAoIW1fc2tpcE1vZGVU
YWcuaXNOdWxsKCkpIHsKICAgICAgICAgaWYgKCF0LT5iZWdpblRhZyAmJiB0LT50YWdOYW1lID09
IG1fc2tpcE1vZGVUYWcpCkBAIC0zMzcsNyArMzM3LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdAogICAgIHJldHVybiBuOwogfQogCi12b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKK3ZvaWQg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwYXJzZURvY3R5cGVUb2tlbihEb2N0eXBlVG9rZW4qIHQp
CiB7CiAgICAgLy8gSWdub3JlIGFueSBkb2N0eXBlIGFmdGVyIHRoZSBmaXJzdC4gIElnbm9yZSBk
b2N0eXBlcyBpbiBmcmFnbWVudHMuCiAgICAgaWYgKG1fZG9jdW1lbnQtPmRvY3R5cGUoKSB8fCBt
X2lzUGFyc2luZ0ZyYWdtZW50IHx8IG1fY3VycmVudCAhPSBtX2RvY3VtZW50KQpAQCAtMzcyLDcg
KzM3Miw3IEBAIHN0YXRpYyBib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNTdHIKICAgICAg
ICAgfHwgdGFnTmFtZSA9PSBvYmplY3RUYWcgfHwgdGFnTmFtZSA9PSB0YWJsZVRhZyB8fCB0YWdO
YW1lID09IGh0bWxUYWc7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5z
ZXJ0Tm9kZShOb2RlKiBuLCBib29sIGZsYXQpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
aW5zZXJ0Tm9kZShOb2RlKiBuLCBib29sIGZsYXQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IHByb3Rl
Y3ROb2RlKG4pOwogCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjppbnNlcnRObwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSkKK2Jvb2wgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpCiB7CiAgICAgLy8gRXJyb3IgaGFuZGxp
bmcgY29kZS4gIFRoaXMgaXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50
L2NoaWxkIGNvbWJpbmF0aW9ucy4KICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKQEAgLTcyNCwy
MiArNzI0LDIyIEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlRXIKICAg
ICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKIH0KIAotdHlwZWRlZiBib29sIChMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjoqQ3JlYXRlRXJyb3JDaGVja0Z1bmMpKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mKTsKK3R5cGVkZWYgYm9vbCAoTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjoqQ3JlYXRlRXJyb3JD
aGVja0Z1bmMpKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mKTsKIHR5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmdJbXBsKiwgQ3JlYXRlRXJyb3JDaGVja0Z1bmM+IEZ1bmN0aW9uTWFwOwogCi1ib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0
LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0ZXh0
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAg
cmVzdWx0ID0gVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjb21tZW50
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIExl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAgIHJlc3VsdCA9IENvbW1lbnQ6OmNyZWF0ZShtX2Rv
Y3VtZW50LCB0LT50ZXh0LmdldCgpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoZWFkQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAgIGlmICghbV9o
ZWFkIHx8IG1fY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICBtX2hl
YWQgPSBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKQEAgLTc0OSw3ICs3NDks
NyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhlYWRDcmVhCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAg
Ly8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKICAgICBpZiAo
bV9oYXZlRnJhbWVTZXQpCkBAIC03NjUsNyArNzY1LDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpib2R5Q3JlYQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJhbWVzZXRDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayhoZWFkVGFnKTsK
ICAgICBpZiAobV9pbkJvZHkgJiYgIW1faGF2ZUZyYW1lU2V0ICYmICFtX2hhdmVDb250ZW50KSB7
CkBAIC03ODUsNyArNzg1LDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmFt
ZXNldAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiog
dCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgLy8gT25seSBjcmVhdGUgYSBuZXcgZm9y
bSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbnNpZGUgb25lLgogICAgIC8vIFRoaXMgaXMgY29uc2lz
dGVudCB3aXRoIG90aGVyIGJyb3dzZXJzJyBiZWhhdmlvci4KQEAgLTc5Nyw3ICs3OTcsNyBAQCBi
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZvcm1DcmVhCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzaW5kZXhDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+
JiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJc2luZGV4KHQpOwogICAg
IGlmICghbV9pbkJvZHkpCkBAIC04MDksMTIgKzgwOSwxMiBAQCBib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmlzaW5kZXhDCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiog
dCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZGRD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICBw
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayh0LCByZXN1bHQpOwogICAgIHBvcEJsb2NrKGR0VGFnKTsK
QEAgLTgyMiw3ICs4MjIsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmRkQ3Jl
YXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6ZHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJl
c3VsdCk7CiAgICAgcG9wQmxvY2soZGRUYWcpOwpAQCAtODMwLDQ2ICs4MzAsNDYgQEAgYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpkdENyZWF0ZQogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJwQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biosIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cnBDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayhycFRhZyk7
CiAgICAgcG9wQmxvY2socnRUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cnRDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayhycFRhZyk7CiAgICAgcG9wQmxv
Y2socnRUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYp
Citib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biogdCwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQ
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiti
b29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2so
VG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAgIHBDbG9zZXJDcmVhdGVFcnJv
ckNoZWNrKHQsIHJlc3VsdCk7CiAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkU3R5bGVD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRy
PE5vZGU+JikKIHsKICAgICByZXR1cm4gYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFt
ZSk7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7
CiAgICAgcG9wQmxvY2sodGRUYWcpOwogICAgIHBvcEJsb2NrKHRoVGFnKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25D
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+JikKIHsKICAgICBwb3BCbG9jayh0aGVhZFRhZyk7CiAgICAgcG9wQmxvY2sodGJvZHlUYWcp
OwpAQCAtODc3LDE5ICs4NzcsMTkgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0
YWJsZVNlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgc2V0U2tpcE1vZGUobm9lbWJlZFRhZyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXND
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KQogewogICAgIHNldFNraXBNb2RlKG5vZnJhbWVzVGFnKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5v
c2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgaWYg
KCFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1l
bnQtPmZyYW1lKCk7CkBAIC04OTksMTQgKzg5OSwxNCBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6Om5vc2NyaXB0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBDbG9zZXJDcmVhdGVFcnJvckNo
ZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBpZiAoaGFzUEVsZW1lbnRJblNjb3Bl
KCkpCiAgICAgICAgIHBvcEJsb2NrKHBUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwQ2xv
c2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAg
aWYgKG1fZG9jdW1lbnQtPmluQ29tcGF0TW9kZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTkxNSw3ICs5MTUsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJT
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
bWFwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mIHJlc3VsdCkKIHsKICAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gSFRNTE1hcEVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKICAgICByZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50
OwpAQCAtOTM2LDQ4ICs5MzYsNDggQEAgc3RhdGljIHZvaWQgbWFwVGFnc1RvRnVuYyhGdW5jdGlv
bk1hcCYgbQogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpnZXROb2RlKFRva2VuKiB0KQorUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OmdldE5vZGUoVG9rZW4qIHQpCiB7CiAgICAgLy8gSW5pdCBvdXIgZXJyb3IgaGFu
ZGxpbmcgdGFibGUuCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgZ0Z1bmN0
aW9uTWFwLCAoKSk7CiAgICAgaWYgKGdGdW5jdGlvbk1hcC5pc0VtcHR5KCkpIHsKICAgICAgICAg
UXVhbGlmaWVkTmFtZSBuZXN0ZWRDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYVRhZywgYnV0dG9uVGFn
LCBub2JyVGFnLCB0clRhZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwg
bmVzdGVkQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVk
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBu
ZXN0ZWRDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5lc3RlZENyZWF0
ZUVycm9yQ2hlY2spOwogCiAgICAgICAgIFF1YWxpZmllZE5hbWUgbmVzdGVkU3R5bGVDcmVhdGVF
cnJvclRhZ3NbXSA9IHsgYlRhZywgYmlnVGFnLCBpVGFnLCBzVGFnLCBzbWFsbFRhZywgc3RyaWtl
VGFnLCB0dFRhZywgdVRhZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwg
bmVzdGVkU3R5bGVDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpu
ZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5j
dGlvbk1hcCwgbmVzdGVkU3R5bGVDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CiAKICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBwQ2xvc2VyQ3JlYXRlRXJyb3JUYWdzW10gPSB7IGFkZHJlc3NUYWcsIGFydGljbGVUYWcsCiAg
ICAgICAgICAgICBhc2lkZVRhZywgYmxvY2txdW90ZVRhZywgY2VudGVyVGFnLCBkaXJUYWcsIGRp
dlRhZywgZGxUYWcsCiAgICAgICAgICAgICBmaWVsZHNldFRhZywgZm9vdGVyVGFnLCBoMVRhZywg
aDJUYWcsIGgzVGFnLCBoNFRhZywgaDVUYWcsIGg2VGFnLAogICAgICAgICAgICAgaGVhZGVyVGFn
LCBoZ3JvdXBUYWcsIGhyVGFnLCBsaXN0aW5nVGFnLCBtZW51VGFnLCBuYXZUYWcsIG9sVGFnLAog
ICAgICAgICAgICAgcFRhZywgcGxhaW50ZXh0VGFnLCBwcmVUYWcsIHNlY3Rpb25UYWcsIHVsVGFn
IH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBwQ2xvc2VyQ3JlYXRlRXJy
b3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hl
Y2spOworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgcENsb3NlckNyZWF0ZUVy
cm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2sp
OwogCi0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGJvZHlUYWcsICZMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpib2R5Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRh
Z1RvRnVuYyhnRnVuY3Rpb25NYXAsIGRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
ZGRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwg
ZHRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpkdENyZWF0ZUVycm9yQ2hlY2spOwot
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBmb3JtVGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1
bmMoZ0Z1bmN0aW9uTWFwLCBmcmFtZXNldFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rp
b25NYXAsIGhlYWRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGlzaW5kZXhUYWcs
ICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk7Ci0g
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG1hcFRhZywgJkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6Om1hcENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMo
Z0Z1bmN0aW9uTWFwLCBsaVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBD
bG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgbm9lbWJlZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZW1iZWRDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9mcmFtZXNU
YWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2sp
OwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub3NjcmlwdFRhZywgJkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRhYmxlVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCBycFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJw
Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJ0
VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnRDcmVhdGVFcnJvckNoZWNrKTsKLSAg
ICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgc2VsZWN0VGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIHRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFi
bGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIHRoVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRib2R5VGFnLCAm
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRmb290VGFnLCAmTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIGJvZHlUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlD
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZGRU
YWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmRkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGR0VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVy
OjpkdENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBmb3JtVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7
CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZyYW1lc2V0VGFnLCAmTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBU
YWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpo
ZWFkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAs
IGlzaW5kZXhUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbWFwVGFnLCAmTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjptYXBDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9G
dW5jKGdGdW5jdGlvbk1hcCwgbGlUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5lc3RlZFBD
bG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgbm9lbWJlZFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9lbWJlZENyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub2ZyYW1lc1RhZywg
JkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9zY3JpcHRUYWcsICZMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIHRhYmxlVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwQ2xvc2Vy
U3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIHJwVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBydFRhZywgJkxlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6cnRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5j
dGlvbk1hcCwgc2VsZWN0VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzZWxlY3RDcmVhdGVF
cnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGRUYWcsICZM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRl
cjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIHRib2R5VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZVNlY3Rpb25D
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGZv
b3RUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hl
Y2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aGVhZFRhZywgJkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7CiAKLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLnNldChjb21tZW50QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1h
cC5zZXQodGV4dEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KGNvbW1lbnRBdG9tLmlt
cGwoKSwgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHRleHRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2spOwogICAgIH0KIAogICAgIGJvb2wgcHJvY2Vl
ZCA9IHRydWU7CkBAIC05ODksNyArOTg5LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdAogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1ib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjphbGxvd05l
c3RlZFJlZHVuZGFudFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7CiAgICAgLy8g
d3d3LmxpY2VvLmVkdS5teCBpcyBhbiBleGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEg
bGV2ZWwgb2YgbmVzdGluZyBvZgogICAgIC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBi
dW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBvbmx5IGFsbG93IGF0IG1vc3QgMjAKQEAgLTEwMDEsNyAr
MTAwMSw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6YWxsb3dOZXMKICAgICBy
ZXR1cm4gaSAhPSBjTWF4UmVkdW5kYW50VGFnRGVwdGg7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuKiB0KQordm9pZCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiogdCkKIHsKICAgICAvLyBTdXBwb3J0
IGZvciByZWFsbHkgYnJva2VuIGh0bWwuCiAgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkg
dGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1
YWwgZW5kIG9mIHRoZSBkb2MuCkBAIC0xMDMxLDcgKzEwMzEsNyBAQCB2b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnByb2Nlc3NDCiAgICAgfQogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmlzSGVhZGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiti
b29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aXNIZWFkaW5nVGFnKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRhZ05hbWVTZXQsIGhlYWRp
bmdUYWdzLCAoKSk7CiAgICAgaWYgKGhlYWRpbmdUYWdzLmlzRW1wdHkoKSkgewpAQCAtMTA0MSw3
ICsxMDQxLDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0hlYWRpbgogICAg
IHJldHVybiBoZWFkaW5nVGFncy5jb250YWlucyh0YWdOYW1lLmltcGwoKSk7CiB9CiAKLWJvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNJbmxpbmUoTm9kZSogbm9kZSkgY29uc3QKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0lubGluZShOb2RlKiBub2RlKSBjb25zdAogewog
ICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA3
MSw3ICsxMDcxLDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpp
c1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQorYm9vbCBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiwgcmVzaWR1YWxTdHlsZVRhZ3MsICgpKTsKICAgICBpZiAocmVzaWR1YWxTdHlsZVRh
Z3MuaXNFbXB0eSgpKSB7CkBAIC0xMDgzLDcgKzEwODMsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmlzUmVzaWR1CiAgICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRh
aW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
Ojppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkK
K2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCB1bmFmZmVjdGVkVGFncywgKCkpOwogICAgIGlmICh1
bmFmZmVjdGVkVGFncy5pc0VtcHR5KCkpIHsKQEAgLTEwOTUsNyArMTA5NSw3IEBAIGJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNBZmZlY3QKICAgICByZXR1cm4gIXVuYWZmZWN0ZWRU
YWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0
YWNrRWxlbSogZWxlbSkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVSZXNpZHVh
bFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSkKIHsKICAgICBI
VE1MU3RhY2tFbGVtKiBtYXhFbGVtID0gMDsKICAgICBib29sIGZpbmlzaGVkID0gZmFsc2U7CkBA
IC0xMzI2LDcgKzEzMjYsNyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRs
ZVJlCiAgICAgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MgPSBmYWxzZTsKIH0K
IAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFn
cyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKK3ZvaWQg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tF
bGVtKiBlbGVtLCBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKIHsKICAgICAvLyBMb29wIGZv
ciBlYWNoIHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgogICAgIHdoaWxlIChlbGVtKSB7
CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJl
b3BlblJlCiAgICAgfQogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnB1c2hC
bG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBsZXZlbCkKK3ZvaWQgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBp
bnQgbGV2ZWwpCiB7CiAgICAgbV9ibG9ja1N0YWNrID0gbmV3IEhUTUxTdGFja0VsZW0odGFnTmFt
ZSwgbGV2ZWwsIG1fY3VycmVudCwgbV9kaWRSZWZDdXJyZW50LCBtX2Jsb2NrU3RhY2spOwogICAg
IGlmIChsZXZlbCA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpCkBAIC0xMzgwLDcgKzEzODAs
NyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnB1c2hCbG9jCiAgICAgICAgIG1f
aGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wg
cmVwb3J0RXJyb3JzKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcEJsb2NrKGNvbnN0
IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMpCiB7CiAgICAgSFRNTFN0
YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFjazsKIApAQCAtMTQ2OSw3ICsxNDY5LDcgQEAgdm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BCbG9jawogICAgIHJlb3BlblJlc2lkdWFs
U3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQpOwogfQog
Ci1pbmxpbmUgSFRNTFN0YWNrRWxlbSogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cG9wT25l
QmxvY2tDb21tb24oKQoraW5saW5lIEhUTUxTdGFja0VsZW0qIExlZ2FjeUhUTUxUcmVlQnVpbGRl
cjo6cG9wT25lQmxvY2tDb21tb24oKQogewogICAgIEhUTUxTdGFja0VsZW0qIGVsZW0gPSBtX2Js
b2NrU3RhY2s7CiAKQEAgLTE0OTgsNyArMTQ5OCw3IEBAIGlubGluZSBIVE1MU3RhY2tFbGVtKiBM
ZWdhY3lIVE1MVHJlZUNvbnMKICAgICByZXR1cm4gZWxlbTsKIH0KIAotdm9pZCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpwb3BPbmVCbG9jaygpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRl
cjo6cG9wT25lQmxvY2soKQogewogICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IG5vZGUgYmVmb3Jl
IHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCiAgICAgTm9kZSogbGFzdEN1cnJlbnQg
PSBtX2N1cnJlbnQ7CkBAIC0xNTEwLDcgKzE1MTAsNyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnBvcE9uZUJsCiAgICAgICAgIGxhc3RDdXJyZW50LT5kZXJlZigpOwogfQogCi12
b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om1vdmVPbmVCbG9ja1RvU3RhY2soSFRNTFN0
YWNrRWxlbSomIGhlYWQpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bW92ZU9uZUJsb2Nr
VG9TdGFjayhIVE1MU3RhY2tFbGVtKiYgaGVhZCkKIHsKICAgICAvLyBXZSdsbCBiZSB1c2luZyB0
aGUgc3RhY2sgZWxlbWVudCB3ZSdyZSBwb3BwaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50IG5vZGUu
CiAgICAgLy8gU2VlIHRoZSB0d28gY2FsbGVycyBmb3IgZGV0YWlscy4KQEAgLTE1MzIsNyArMTUz
Miw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9uZUIKICAgICBoZWFk
ID0gZWxlbTsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjaGVja0lmSGFz
UEVsZW1lbnRJblNjb3BlKCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjaGVja0lmSGFz
UEVsZW1lbnRJblNjb3BlKCkKIHsKICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IE5vdEluU2Nv
cGU7CiAgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFjazsKQEAgLTE1NDcsMTMg
KzE1NDcsMTMgQEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjaGVja0lmSAogICAg
IH0KIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BJbmxpbmVCbG9ja3Mo
KQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcElubGluZUJsb2NrcygpCiB7CiAgICAg
d2hpbGUgKG1fYmxvY2tTdGFjayAmJiBpc0lubGluZShtX2N1cnJlbnQpKQogICAgICAgICBwb3BP
bmVCbG9jaygpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyZWVCbG9j
aygpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJlZUJsb2NrKCkKIHsKICAgICB3aGls
ZSAobV9ibG9ja1N0YWNrKQogICAgICAgICBwb3BPbmVCbG9jaygpOwpAQCAtMTU2MSw3ICsxNTYx
LDcgQEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmVlQmxvYwogICAgIEFTU0VS
VCghbV90cmVlRGVwdGgpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNy
ZWF0ZUhlYWQoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZUhlYWQoKQogewog
ICAgIGlmIChtX2hlYWQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1ODksNyArMTU4OSw3IEBAIHZv
aWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Y3JlYXRlSGUKICAgICB9CiB9CiAKLVBhc3NS
ZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlSXNpbmRleChUb2tl
biogdCkKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVJc2lu
ZGV4KFRva2VuKiB0KQogewogICAgIFJlZlB0cjxOb2RlPiBuID0gSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50KTsKIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAgUGFzc1JlZlB0cjxOb2Rl
PiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdAogICAgIHJldHVybiBuLnJlbGVhc2UoKTsKIH0KIAot
dm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpzdGFydEJvZHkoKQordm9pZCBMZWdhY3lI
VE1MVHJlZUJ1aWxkZXI6OnN0YXJ0Qm9keSgpCiB7CiAgICAgaWYgKG1faW5Cb2R5KQogICAgICAg
ICByZXR1cm47CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OnN0YXJ0Qm9kCiAgICAgfQogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OmZpbmlzaGVkKCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCgpCiB7
CiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJl
J3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChtX2N1cnJl
bnQgJiYgbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2RvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKSkKQEAgLTE2NDIsNyArMTY0Miw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6ZmluaXNoZWQKICAgICAgICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5nKCk7
CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXJyb3JUb0NvbnNv
bGUoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFn
TmFtZTEsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQordm9p
ZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlcG9ydEVycm9yVG9Db25zb2xlKEhUTUxQYXJzZXJF
cnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUxLCBjb25zdCBB
dG9taWNTdHJpbmcqIHRhZ05hbWUyLCBib29sIGNsb3NlVGFncykKIHsgICAgCiAgICAgRnJhbWUq
IGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQpJbmRleDogV2Vi
Q29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAkocmV2aXNpb24gNjE2NzIpCShmcm9tIFdlYkNv
cmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmg6NjE2NzIpCisrKyBXZWJDb3JlL2h0
bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTQg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5v
cmcpCisgICAgICAgICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCisg
ICAgICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKKyAg
ICAgICAgICAgICAgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cl9oCisjZGVmaW5lIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAiRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlckVycm9yQ29k
ZXMuaCIKKyNpbmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3R5cGVUb2tlbjsKK2NsYXNzIERvY3VtZW50
OworY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKK2NsYXNzIEhUTUxEb2N1bWVudDsKK2NsYXNzIEhU
TUxGb3JtRWxlbWVudDsKK2NsYXNzIEhUTUxIZWFkRWxlbWVudDsKK2NsYXNzIEhUTUxNYXBFbGVt
ZW50OworY2xhc3MgSFRNTFBhcnNlclF1aXJrczsKK2NsYXNzIE5vZGU7CisKK3N0cnVjdCBIVE1M
U3RhY2tFbGVtOworc3RydWN0IFRva2VuOworCisvKioKKyAqIFRoZSBwYXJzZXIgZm9yIEhUTUwu
IEl0IHJlY2VpdmVzIGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIsIGFuZAorICogYnVpbGRzIHVwIHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZnJvbSBp
dC4KKyAqLworY2xhc3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciA6IHB1YmxpYyBOb25jb3B5
YWJsZSB7CitwdWJsaWM6CisgICAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihIVE1MRG9jdW1l
bnQqLCBib29sIHJlcG9ydEVycm9ycyk7CisgICAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihE
b2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRT
Y3JpcHRpbmdBbGxvd2VkKTsKKyAgICB2aXJ0dWFsIH5MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
KCk7CisKKyAgICAvKioKKyAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBieSB0aGUg
dG9rZW5pemVyCisgICAgICovCisgICAgUGFzc1JlZlB0cjxOb2RlPiBwYXJzZVRva2VuKFRva2Vu
Kik7CisgICAgCisgICAgLy8gUGFyc2VzIGEgZG9jdHlwZSB0b2tlbi4KKyAgICB2b2lkIHBhcnNl
RG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiopOworCisgICAgLyoqCisgICAgICogdG9rZW5pemVy
IHNheXMgaXQncyBub3QgZ29pbmcgdG8gYmUgc2VuZGluZyB1cyBhbnkgbW9yZSB0b2tlbnMKKyAg
ICAgKi8KKyAgICB2b2lkIGZpbmlzaGVkKCk7CisKKyAgICAvKioKKyAgICAgKiByZXNldHMgdGhl
IHBhcnNlcgorICAgICAqLworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgc2tpcE1vZGUo
KSBjb25zdCB7IHJldHVybiAhbV9za2lwTW9kZVRhZy5pc051bGwoKTsgfQorICAgIGJvb2wgaXNI
YW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoKSBjb25zdCB7IHJldHVybiBtX2hhbmRs
aW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgc2V0
Q3VycmVudChOb2RlKik7CisgICAgdm9pZCBkZXJlZkN1cnJlbnQoKTsKKyAgICB2b2lkIHNldFNr
aXBNb2RlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IG1fc2tpcE1vZGVUYWcgPSBxTmFt
ZS5sb2NhbE5hbWUoKTsgfQorCisgICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2RlKFRva2VuKik7
CisgICAgYm9vbCBib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwor
ICAgIGJvb2wgY2FudmFzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwor
ICAgIGJvb2wgY29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsK
KyAgICBib29sIGRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAg
IGJvb2wgZHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBmb3JtQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wg
ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wg
aWZyYW1lQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wg
aXNpbmRleENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29s
IG1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29sIG5l
c3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29sIG5l
c3RlZFBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAg
Ym9vbCBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsK
KyAgICBib29sIG5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7
CisgICAgYm9vbCBub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KTsKKyAgICBib29sIG5vbGF5ZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
Jik7CisgICAgYm9vbCBub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKKyAgICBib29sIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+Jik7CisgICAgYm9vbCBwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJl
ZlB0cjxOb2RlPiYpOworICAgIGJvb2wgcnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRy
PE5vZGU+Jik7CisgICAgYm9vbCBydENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKKyAgICBib29sIHNlbGVjdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKKyAgICBib29sIHRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKTsKKyAgICBib29sIHRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKTsKKyAgICBib29sIHRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVm
UHRyPE5vZGU+Jik7CisKKyAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhUb2tlbiopOworCisgICAg
dm9pZCBsaW1pdERlcHRoKGludCB0YWdQcmlvcml0eSk7CisgICAgYm9vbCBpbnNlcnROb2RlQWZ0
ZXJMaW1pdERlcHRoKE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7CisgICAgYm9vbCBpbnNlcnRO
b2RlKE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7CisgICAgYm9vbCBoYW5kbGVFcnJvcihOb2Rl
KiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9y
aXR5KTsKKyAgICAKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGludCBsZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2UpOworICAgIHZvaWQgcG9wQmxvY2soY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2UpIHsgcmV0
dXJuIHBvcEJsb2NrKHFOYW1lLmxvY2FsTmFtZSgpLCByZXBvcnRFcnJvcnMpOyB9IC8vIENvbnZl
bmllbmNlIGZ1bmN0aW9uIGZvciByZWFkYWJpbGl0eS4KKyAgICB2b2lkIHBvcE9uZUJsb2NrKCk7
CisgICAgdm9pZCBtb3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKTsKKyAg
ICBpbmxpbmUgSFRNTFN0YWNrRWxlbSogcG9wT25lQmxvY2tDb21tb24oKTsKKyAgICB2b2lkIHBv
cElubGluZUJsb2NrcygpOworCisgICAgdm9pZCBmcmVlQmxvY2soKTsKKworICAgIHZvaWQgY3Jl
YXRlSGVhZCgpOworCisgICAgc3RhdGljIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgc3RhdGljIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1
YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIHZvaWQgaGFuZGxlUmVz
aWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qKTsKKyAgICB2b2lk
IHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qLCBOb2RlKiBtYWxmb3JtZWRU
YWJsZVBhcmVudCk7CisKKyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNIZWFkaW5nVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisKKyAgICBib29sIGlzSW5saW5lKE5vZGUq
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHN0YXJ0Qm9keSgpOyAvLyBpbnNlcnRzIHRoZSBpc2lu
ZGV4IGVsZW1lbnQKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGhhbmRsZUlzaW5kZXgoVG9rZW4qKTsK
KworICAgIHZvaWQgY2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpOworICAgIGJvb2wgaGFzUEVs
ZW1lbnRJblNjb3BlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2hhc1BFbGVtZW50SW5TY29wZSA9
PSBVbmtub3duKQorICAgICAgICAgICAgY2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpOworICAg
ICAgICByZXR1cm4gbV9oYXNQRWxlbWVudEluU2NvcGUgPT0gSW5TY29wZTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlcG9ydEVycm9yKEhUTUxQYXJzZXJFcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBB
dG9taWNTdHJpbmcqIHRhZ05hbWUxID0gMCwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiA9
IDAsIGJvb2wgY2xvc2VUYWdzID0gZmFsc2UpCisgICAgeyBpZiAoIW1fcmVwb3J0RXJyb3JzKSBy
ZXR1cm47IHJlcG9ydEVycm9yVG9Db25zb2xlKGVycm9yQ29kZSwgdGFnTmFtZTEsIHRhZ05hbWUy
LCBjbG9zZVRhZ3MpOyB9CisKKyAgICB2b2lkIHJlcG9ydEVycm9yVG9Db25zb2xlKEhUTUxQYXJz
ZXJFcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0IEF0b21pY1N0
cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKTsKKyAgICAKKyAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKKworICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRoZSBvbmUg
bmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pLiBDYW4gYmUgYSBkb2N1bWVudCBmcmFnbWVu
dCwgYSBkb2N1bWVudCBvciBhbiBlbGVtZW50LgorICAgIE5vZGUqIG1fY3VycmVudDsKKyAgICAv
LyBXZSBjYW4ndCByZWYgYSBkb2N1bWVudCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gY29uc3RhbnRs
eSBjaGVjayBpZiBhIG5vZGUgaXMgYSBkb2N1bWVudCBqdXN0IHRvIGRlY2lkZSB3aGV0aGVyIHRv
IGRlcmVmLgorICAgIGJvb2wgbV9kaWRSZWZDdXJyZW50OworCisgICAgSFRNTFN0YWNrRWxlbSog
bV9ibG9ja1N0YWNrOworCisgICAgLy8gVGhlIG51bWJlciBvZiB0YWdzIHdpdGggcHJpb3JpdHkg
bWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5IG9yIGhpZ2hlcgorICAgIC8vIGN1cnJlbnRseSBpbiBt
X2Jsb2NrU3RhY2suIFRoZSBwYXJzZXIgZW5mb3JjZXMgYSBjYXAgb24gdGhpcyB2YWx1ZSBieQor
ICAgIC8vIGFkZGluZyBzdWNoIG5ldyBlbGVtZW50cyBhcyBzaWJsaW5ncyBpbnN0ZWFkIG9mIGNo
aWxkcmVuIG9uY2UgaXQgaXMgcmVhY2hlZC4KKyAgICBzaXplX3QgbV9ibG9ja3NJblN0YWNrOwor
ICAgIC8vIERlcHRoIG9mIHRoZSB0cmVlLgorICAgIHVuc2lnbmVkIG1fdHJlZURlcHRoOworCisg
ICAgZW51bSBFbGVtZW50SW5TY29wZVN0YXRlIHsgTm90SW5TY29wZSwgSW5TY29wZSwgVW5rbm93
biB9OyAKKyAgICBFbGVtZW50SW5TY29wZVN0YXRlIG1faGFzUEVsZW1lbnRJblNjb3BlOworCisg
ICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7IC8vIGN1cnJl
bnRseSBhY3RpdmUgZm9ybQorICAgIFJlZlB0cjxIVE1MTWFwRWxlbWVudD4gbV9jdXJyZW50TWFw
RWxlbWVudDsgLy8gY3VycmVudCBtYXAKKyAgICBSZWZQdHI8SFRNTEhlYWRFbGVtZW50PiBtX2hl
YWQ7IC8vIGhlYWQgZWxlbWVudDsgbmVlZGVkIGZvciBIVE1MIHdoaWNoIGRlZmluZXMgPGJhc2U+
IGFmdGVyIDwvaGVhZD4KKyAgICBSZWZQdHI8Tm9kZT4gbV9pc2luZGV4RWxlbWVudDsgLy8gYSBw
b3NzaWJsZSA8aXNpbmRleD4gZWxlbWVudCBpbiB0aGUgaGVhZAorCisgICAgYm9vbCBtX2luQm9k
eTsKKyAgICBib29sIG1faGF2ZUNvbnRlbnQ7CisgICAgYm9vbCBtX2hhdmVGcmFtZVNldDsKKwor
ICAgIEF0b21pY1N0cmluZyBtX3NraXBNb2RlVGFnOyAvLyB0ZWxscyB0aGUgcGFyc2VyIHRvIGRp
c2NhcmQgYWxsIHRhZ3MgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAorCisgICAg
Ym9vbCBtX2lzUGFyc2luZ0ZyYWdtZW50OworICAgIGJvb2wgbV9yZXBvcnRFcnJvcnM7CisgICAg
Ym9vbCBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrczsKKyAgICBpbnQgbV9pblN0
cmF5VGFibGVDb250ZW50OworICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3Njcmlw
dGluZ1Blcm1pc3Npb247CisKKyAgICBPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gbV9wYXJzZXJR
dWlya3M7Cit9OworCisjaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKQorYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1l
bnQqKTsKKyNlbHNlCitpbmxpbmUgYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1l
bnQqKSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKworLy8gQ29udmVydHMgdGhlIHNwZWNpZmll
ZCBzdHJpbmcgdG8gYSBmbG9hdGluZyBudW1iZXIuCisvLyBJZiB0aGUgY29udmVyc2lvbiBmYWls
cywgdGhlIHJldHVybiB2YWx1ZSBpcyBmYWxzZS4gVGFrZSBjYXJlIHRoYXQgbGVhZGluZyBvciB0
cmFpbGluZyB1bm5lY2Vzc2FyeSBjaGFyYWN0ZXJzIG1ha2UgZmFpbHVyZXMuICBUaGlzIHJldHVy
bnMgZmFsc2UgZm9yIGFuIGVtcHR5IHN0cmluZyBpbnB1dC4KKy8vIFRoZSBkb3VibGUqIHBhcmFt
ZXRlciBtYXkgYmUgMC4KK2Jvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3Ry
aW5nJiwgZG91YmxlKik7CisvLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIG51bWJlciB0byBhIHN0
cmluZy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZgorLy8gSFRNTDUncyAiYWxnb3JpdGht
IHRvIGNvbnZlcnQgYSBudW1iZXIgdG8gYSBzdHJpbmciIGZvciBOVU1CRVIvUkFOR0UgdHlwZXMu
CitTdHJpbmcgc2VyaWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUpOworCit9CisgICAgCisjZW5k
aWYgLy8gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvTGVn
YWN5SFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhU
TUxUcmVlQnVpbGRlci5oCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9MZWdhY3lI
VE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDExIEBAIHN0cnVj
dCBUb2tlbjsKICAqIFRoZSBwYXJzZXIgZm9yIEhUTUwuIEl0IHJlY2VpdmVzIGEgc3RyZWFtIG9m
IHRva2VucyBmcm9tIHRoZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIsIGFuZAogICogYnVpbGRz
IHVwIHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZnJvbSBpdC4KICAqLwotY2xhc3MgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3RvciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitjbGFzcyBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3IoSFRNTERvY3VtZW50KiwgYm9vbCByZXBvcnRFcnJvcnMpOwotICAg
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbiA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0gICAgdmlydHVh
bCB+TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcigpOworICAgIExlZ2FjeUhUTUxUcmVlQnVpbGRl
cihIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycyk7CisgICAgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyKERvY3VtZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpOworICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcigpOwogCiAgICAgLyoqCiAgICAgICogcGFyc2VzIG9uZSB0b2tlbiBkZWxpdmVyZWQgYnkg
dGhlIHRva2VuaXplcgpJbmRleDogV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTc0NCArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3JnKQotICAgICAg
ICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQotICAgICAgICAgICAg
ICAoQykgMTk5OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gICAgICAgICAgICAg
IChDKSAyMDAwLDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
ci5oIgotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9t
ZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNvbW1lbnQuaCIKLSNp
bmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZy
YW1lLmgiCi0jaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRExpc3RF
bGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSFRN
TEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTEhSRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVudC5oIgotI2luY2x1ZGUg
IkhUTUxJc0luZGV4RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlclF1aXJrcy5oIgotI2luY2x1
ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHQu
aCIKLSNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvZHRvYS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjTWF4UmVk
dW5kYW50VGFnRGVwdGggPSAyMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjUmVzaWR1YWxTdHls
ZU1heERlcHRoID0gMjAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNSZXNpZHVhbFN0eWxlSXRl
cmF0aW9uTGltaXQgPSA1OwotCi0KLXN0YXRpYyBjb25zdCBpbnQgbWluQmxvY2tMZXZlbFRhZ1By
aW9yaXR5ID0gMzsKLQotLy8gQSBjYXAgb24gdGhlIG51bWJlciBvZiB0YWdzIHdpdGggcHJpb3Jp
dHkgbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5IG9yIGhpZ2hlcgotLy8gYWxsb3dlZCBpbiBtX2Js
b2NrU3RhY2suIFRoZSBjYXAgaXMgZW5mb3JjZWQgYnkgYWRkaW5nIHN1Y2ggbmV3IGVsZW1lbnRz
IGFzCi0vLyBzaWJsaW5ncyBpbnN0ZWFkIG9mIGNoaWxkcmVuIG9uY2UgaXQgaXMgcmVhY2hlZC4K
LXN0YXRpYyBjb25zdCBzaXplX3QgY01heEJsb2NrRGVwdGggPSA0MDk2OwotCi0KLXR5cGVkZWYg
SGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gVGFnTmFtZVNldDsKLQotdGVtcGxhdGU8IHNpemVf
dCBBcnJheVNpemUgPgotc3RhdGljIHZvaWQgYWRkVGFncyhUYWdOYW1lU2V0JiBzZXQsIFF1YWxp
ZmllZE5hbWUgKCZuYW1lcylbQXJyYXlTaXplXSkKLXsKLSAgICBmb3IgKHNpemVfdCB4ID0gMDsg
eCA8IEFycmF5U2l6ZTsgeCsrKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUg
PSBuYW1lc1t4XTsKLSAgICAgICAgc2V0LmFkZChuYW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0g
ICAgfQotfQotCi1zdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5vbmNvcHlhYmxlIHsKLSAgICBIVE1M
U3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgdCwgaW50IGx2bCwgTm9kZSogbiwgYm9vbCBy
LCBIVE1MU3RhY2tFbGVtKiBueCkKLSAgICAgICAgOiB0YWdOYW1lKHQpCi0gICAgICAgICwgbGV2
ZWwobHZsKQotICAgICAgICAsIHN0cmF5VGFibGVDb250ZW50KGZhbHNlKQotICAgICAgICAsIG5v
ZGUobikKLSAgICAgICAgLCBkaWRSZWZOb2RlKHIpCi0gICAgICAgICwgbmV4dChueCkKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBkZXJlZk5vZGUoKQotICAgIHsKLSAgICAgICAgaWYgKGRpZFJl
Zk5vZGUpCi0gICAgICAgICAgICBub2RlLT5kZXJlZigpOwotICAgIH0KLQotICAgIEF0b21pY1N0
cmluZyB0YWdOYW1lOwotICAgIGludCBsZXZlbDsKLSAgICBib29sIHN0cmF5VGFibGVDb250ZW50
OwotICAgIE5vZGUqIG5vZGU7Ci0gICAgYm9vbCBkaWRSZWZOb2RlOwotICAgIEhUTUxTdGFja0Vs
ZW0qIG5leHQ7Ci19OwotCi0vKioKLSAqIFRoZSBwYXJzZXIgcGFyc2VzIHRva2VuaXplZCBpbnB1
dCBpbnRvIHRoZSBkb2N1bWVudCwgYnVpbGRpbmcgdXAgdGhlCi0gKiBkb2N1bWVudCB0cmVlLiBJ
ZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQsIHBhcnNpbmcgaXQgaXMgc3RyYWlnaHRmb3J3
YXJkLgotICoKLSAqIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgdG8gaGFuZGxlIG1hbnkgSFRNTCBk
b2N1bWVudHMgdGhhdCBhcmUgbm90IHdlbGwtZm9ybWVkLAotICogc28gdGhlIHBhcnNlciBoYXMg
dG8gYmUgdG9sZXJhbnQgYWJvdXQgZXJyb3JzLgotICoKLSAqIFdlIGhhdmUgdG8gdGFrZSBjYXJl
IG9mIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXJyb3IgY29uZGl0aW9uczoKLSAqCi0gKiAxLiBU
aGUgZWxlbWVudCBiZWluZyBhZGRlZCBpcyBleHBsaWNpdGx5IGZvcmJpZGRlbiBpbnNpZGUgc29t
ZSBvdXRlciB0YWcuCi0gKiAgICBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGNsb3NlIGFsbCB0YWdz
IHVwIHRvIHRoZSBvbmUsIHdoaWNoIGZvcmJpZHMKLSAqICAgIHRoZSBlbGVtZW50LCBhbmQgYWRk
IGl0IGFmdGVyd2FyZHMuCi0gKgotICogMi4gV2UgYXJlIG5vdCBhbGxvd2VkIHRvIGFkZCB0aGUg
ZWxlbWVudCBkaXJlY3RseS4gSXQgY291bGQgYmUgdGhhdAotICogICAgdGhlIHBlcnNvbiB3cml0
aW5nIHRoZSBkb2N1bWVudCBmb3Jnb3Qgc29tZSB0YWcgaW4gYmV0d2VlbiAob3IgdGhhdCB0aGUK
LSAqICAgIHRhZyBpbiBiZXR3ZWVuIGlzIG9wdGlvbmFsKS4gVGhpcyBjb3VsZCBiZSB0aGUgY2Fz
ZSB3aXRoIHRoZSBmb2xsb3dpbmcKLSAqICAgIHRhZ3M6IEhUTUwgSEVBRCBCT0RZIFRCT0RZIFRS
IFREIExJIChkaWQgSSBmb3JnZXQgYW55PykuCi0gKgotICogMy4gV2Ugd2FudCB0byBhZGQgYSBi
bG9jayBlbGVtZW50IGluc2lkZSB0byBhbiBpbmxpbmUgZWxlbWVudC4gQ2xvc2UgYWxsCi0gKiAg
ICBpbmxpbmUgZWxlbWVudHMgdXAgdG8gdGhlIG5leHQgaGlnaGVyIGJsb2NrIGVsZW1lbnQuCi0g
KgotICogNC4gSWYgdGhpcyBkb2Vzbid0IGhlbHAsIGNsb3NlIGVsZW1lbnRzIHVudGlsIHdlIGFy
ZSBhbGxvd2VkIHRvIGFkZCB0aGUKLSAqICAgIGVsZW1lbnQgb3IgaWdub3JlIHRoZSB0YWcuCi0g
KgotICovCi0KLUxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3J0RXJyb3JzKQotICAgIDogbV9kb2N1
bWVudChkb2MpCi0gICAgLCBtX2N1cnJlbnQoZG9jKQotICAgICwgbV9kaWRSZWZDdXJyZW50KGZh
bHNlKQotICAgICwgbV9ibG9ja1N0YWNrKDApCi0gICAgLCBtX2Jsb2Nrc0luU3RhY2soMCkKLSAg
ICAsIG1fdHJlZURlcHRoKDApCi0gICAgLCBtX2hhc1BFbGVtZW50SW5TY29wZShOb3RJblNjb3Bl
KQotICAgICwgbV9pbkJvZHkoZmFsc2UpCi0gICAgLCBtX2hhdmVDb250ZW50KGZhbHNlKQotICAg
ICwgbV9oYXZlRnJhbWVTZXQoZmFsc2UpCi0gICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KGZhbHNl
KQotICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQotICAgICwgbV9oYW5kbGluZ1Jl
c2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoZmFsc2UpCi0gICAgLCBtX2luU3RyYXlUYWJsZUNvbnRl
bnQoMCkKLSAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93
ZWQpCi0gICAgLCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50LT5wYWdlKCkgPyBtX2RvY3VtZW50
LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIDog
MCkKLXsKLX0KLQotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50KiBmcmFnLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Np
b24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IG1fZG9jdW1lbnQoZnJhZy0+ZG9jdW1lbnQo
KSkKLSAgICAsIG1fY3VycmVudChmcmFnKQotICAgICwgbV9kaWRSZWZDdXJyZW50KHRydWUpCi0g
ICAgLCBtX2Jsb2NrU3RhY2soMCkKLSAgICAsIG1fYmxvY2tzSW5TdGFjaygwKQotICAgICwgbV90
cmVlRGVwdGgoMCkKLSAgICAsIG1faGFzUEVsZW1lbnRJblNjb3BlKE5vdEluU2NvcGUpCi0gICAg
LCBtX2luQm9keSh0cnVlKQotICAgICwgbV9oYXZlQ29udGVudChmYWxzZSkKLSAgICAsIG1faGF2
ZUZyYW1lU2V0KGZhbHNlKQotICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0cnVlKQotICAgICwg
bV9yZXBvcnRFcnJvcnMoZmFsc2UpCi0gICAgLCBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9z
c0Jsb2NrcyhmYWxzZSkKLSAgICAsIG1faW5TdHJheVRhYmxlQ29udGVudCgwKQotICAgICwgbV9z
Y3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAgLCBtX3BhcnNlclF1
aXJrcyhtX2RvY3VtZW50LT5wYWdlKCkgPyBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5j
bGllbnQoKS0+Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIDogMCkKLXsKLSAgICBpZiAoZnJhZykK
LSAgICAgICAgZnJhZy0+cmVmKCk7Ci19Ci0KLUxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6On5M
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCkKLXsKLSAgICBmcmVlQmxvY2soKTsKLSAgICBpZiAo
bV9kaWRSZWZDdXJyZW50KQotICAgICAgICBtX2N1cnJlbnQtPmRlcmVmKCk7Ci19Ci0KLXZvaWQg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVzZXQoKQotewotICAgIEFTU0VSVCghbV9pc1Bh
cnNpbmdGcmFnbWVudCk7Ci0KLSAgICBzZXRDdXJyZW50KG1fZG9jdW1lbnQpOwotCi0gICAgZnJl
ZUJsb2NrKCk7Ci0KLSAgICBtX3RyZWVEZXB0aCA9IDA7Ci0gICAgbV9pbkJvZHkgPSBmYWxzZTsK
LSAgICBtX2hhdmVGcmFtZVNldCA9IGZhbHNlOwotICAgIG1faGF2ZUNvbnRlbnQgPSBmYWxzZTsK
LSAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQgPSAwOwotCi0gICAgbV9jdXJyZW50Rm9ybUVsZW1l
bnQgPSAwOwotICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOwotICAgIG1faGVhZCA9IDA7Ci0g
ICAgbV9pc2luZGV4RWxlbWVudCA9IDA7Ci0KLSAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207
Ci0gICAgCi0gICAgaWYgKG1fcGFyc2VyUXVpcmtzKQotICAgICAgICBtX3BhcnNlclF1aXJrcy0+
cmVzZXQoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpzZXRDdXJyZW50
KE5vZGUqIG5ld0N1cnJlbnQpIAotewotICAgIGJvb2wgZGlkUmVmTmV3Q3VycmVudCA9IG5ld0N1
cnJlbnQgJiYgbmV3Q3VycmVudCAhPSBtX2RvY3VtZW50OwotICAgIGlmIChkaWRSZWZOZXdDdXJy
ZW50KSAKLSAgICAgICAgbmV3Q3VycmVudC0+cmVmKCk7IAotICAgIGlmIChtX2RpZFJlZkN1cnJl
bnQpIAotICAgICAgICBtX2N1cnJlbnQtPmRlcmVmKCk7Ci0gICAgbV9jdXJyZW50ID0gbmV3Q3Vy
cmVudDsKLSAgICBtX2RpZFJlZkN1cnJlbnQgPSBkaWRSZWZOZXdDdXJyZW50OwotfQotCi1pbmxp
bmUgc3RhdGljIGludCB0YWdQcmlvcml0eU9mTm9kZShOb2RlKiBuKQotewotICAgIHJldHVybiBu
LT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT50YWdQcmlv
cml0eSgpIDogMDsKLX0KLQotaW5saW5lIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
bGltaXREZXB0aChpbnQgdGFnUHJpb3JpdHkpCi17Ci0gICAgd2hpbGUgKG1fdHJlZURlcHRoID49
IG1heERPTVRyZWVEZXB0aCkKLSAgICAgICAgcG9wQmxvY2sobV9ibG9ja1N0YWNrLT50YWdOYW1l
KTsKLSAgICBpZiAodGFnUHJpb3JpdHkgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7Ci0g
ICAgICAgIHdoaWxlIChtX2Jsb2Nrc0luU3RhY2sgPj0gY01heEJsb2NrRGVwdGgpCi0gICAgICAg
ICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUpOwotICAgIH0KLX0KLQotaW5saW5l
IGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5zZXJ0Tm9kZUFmdGVyTGltaXREZXB0
aChOb2RlKiBuLCBib29sIGZsYXQpCi17Ci0gICAgbGltaXREZXB0aCh0YWdQcmlvcml0eU9mTm9k
ZShuKSk7Ci0gICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Ci19Ci0KLVBhc3NSZWZQdHI8
Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cGFyc2VUb2tlbihUb2tlbiogdCkKLXsK
LSAgICBpZiAoIW1fc2tpcE1vZGVUYWcuaXNOdWxsKCkpIHsKLSAgICAgICAgaWYgKCF0LT5iZWdp
blRhZyAmJiB0LT50YWdOYW1lID09IG1fc2tpcE1vZGVUYWcpCi0gICAgICAgICAgICAvLyBGb3Vu
ZCB0aGUgZW5kIHRhZyBmb3IgdGhlIGN1cnJlbnQgc2tpcCBtb2RlLCBzbyB3ZSdyZSBkb25lIHNr
aXBwaW5nLgotICAgICAgICAgICAgbV9za2lwTW9kZVRhZyA9IG51bGxBdG9tOwotICAgICAgICBl
bHNlIGlmIChtX2N1cnJlbnQtPmxvY2FsTmFtZSgpID09IHQtPnRhZ05hbWUpCi0gICAgICAgICAg
ICAvLyBEbyBub3Qgc2tpcCA8L2lmcmFtZT4uCi0gICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBk
b2VzIHRoYXQgY29tbWVudCBtZWFuPyBIb3cgY2FuIGl0IGJlIHJpZ2h0IHRvIHBhcnNlIGEgdG9r
ZW4gd2l0aG91dCBjbGVhcmluZyBtX3NraXBNb2RlVGFnPwotICAgICAgICAgICAgOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBBcHBhcmVudGx5
IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gQmUgY29tcGF0aWJsZSB3aXRo
IElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2UgPGJyPi4KLSAgICBpZiAodC0+aXND
bG9zZVRhZyhiclRhZykgJiYgbV9kb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpIHsKLSAgICAgICAg
cmVwb3J0RXJyb3IoTWFsZm9ybWVkQlJFcnJvcik7Ci0gICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXQtPmJlZ2luVGFnKSB7Ci0gICAgICAgIHByb2Nlc3NDbG9z
ZVRhZyh0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gSWdub3JlIHNwYWNl
cywgaWYgd2UncmUgbm90IGluc2lkZSBhIHBhcmFncmFwaCBvciBvdGhlciBpbmxpbmUgY29kZS4K
LSAgICAvLyBEbyBub3QgYWx0ZXIgdGhlIHRleHQgaWYgaXQgaXMgcGFydCBvZiBhIHNjcmlwdFRh
Zy4KLSAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0ICYmIG1fY3VycmVu
dC0+bG9jYWxOYW1lKCkgIT0gc2NyaXB0VGFnKSB7Ci0gICAgICAgIGlmIChtX2luQm9keSAmJiAh
c2tpcE1vZGUoKSAmJiBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHN0eWxlVGFnICYmCi0gICAg
ICAgICAgICBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHRpdGxlVGFnICYmICF0LT50ZXh0LT5j
b250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICBtX2hhdmVDb250ZW50ID0gdHJ1
ZTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxOb2RlPiBuOwotICAgICAgICBTdHJpbmcgdGV4
dCA9IHQtPnRleHQuZ2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXJzTGVmdCA9IHRleHQubGVu
Z3RoKCk7Ci0gICAgICAgIHdoaWxlIChjaGFyc0xlZnQpIHsKLSAgICAgICAgICAgIC8vIHNwbGl0
IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5vZGVzIG9mIG1hbmFnZWFibGUgc2l6ZQotICAgICAg
ICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChtX2RvY3VtZW50LCB0ZXh0LCBj
aGFyc0xlZnQpOwotICAgICAgICAgICAgaWYgKCFpbnNlcnROb2RlQWZ0ZXJMaW1pdERlcHRoKG4u
Z2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbiA9
IGdldE5vZGUodCk7Ci0gICAgLy8ganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY2F0Y2ggY3VycmVu
dGx5IHVuaW1wbGVtZW50ZWQgc3R1ZmYKLSAgICBpZiAoIW4pCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7Ci0g
ICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuLmdldCgp
KTsKLSAgICAgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGlu
Z0FsbG93ZWQgfHwgdC0+dGFnTmFtZSAhPSBzY3JpcHRUYWcpCi0gICAgICAgICAgICBlLT5zZXRB
dHRyaWJ1dGVNYXAodC0+YXR0cnMuZ2V0KCksIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7Ci0KLSAg
ICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAgICAgaWYgKGUt
PmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzT3B0aW9uYWwpCi0gICAgICAgICAgICBw
b3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBJZiB0aGUgbm9k
ZSBkb2VzIG5vdCBoYXZlIGEgZm9yYmlkZGVuIGVuZCB0YWcgcmVxdWlyZW1lbnQsIGFuZCBpZiB0
aGUgYnJva2VuIFhNTCBzZWxmLWNsb3NpbmcKLSAgICAgICAgLy8gc3ludGF4IHdhcyB1c2VkLCBy
ZXBvcnQgYW4gZXJyb3IuCi0gICAgICAgIGlmICh0LT5icm9rZW5YTUxTdHlsZSAmJiBlLT5lbmRU
YWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikgewotICAgICAgICAgICAgaWYg
KHQtPnRhZ05hbWUgPT0gc2NyaXB0VGFnKQotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKElu
Y29ycmVjdFhNTENsb3NlU2NyaXB0V2FybmluZyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoSW5jb3JyZWN0WE1MU2VsZkNsb3NlRXJyb3IsICZ0LT50YWdO
YW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZUFmdGVyTGltaXRE
ZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpIHsKLSAgICAgICAgLy8gd2UgY291bGRu
J3QgaW5zZXJ0IHRoZSBub2RlCi0KLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewot
ICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuLmdldCgpKTsK
LSAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtX2N1cnJlbnRNYXBFbGVtZW50ID09IG4pCi0gICAgICAgICAgICBtX2N1cnJlbnRNYXBF
bGVtZW50ID0gMDsKLQotICAgICAgICBpZiAobV9jdXJyZW50Rm9ybUVsZW1lbnQgPT0gbikKLSAg
ICAgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsKLQotICAgICAgICBpZiAobV9oZWFk
ID09IG4pCi0gICAgICAgICAgICBtX2hlYWQgPSAwOwotCi0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gbjsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpw
YXJzZURvY3R5cGVUb2tlbihEb2N0eXBlVG9rZW4qIHQpCi17Ci0gICAgLy8gSWdub3JlIGFueSBk
b2N0eXBlIGFmdGVyIHRoZSBmaXJzdC4gIElnbm9yZSBkb2N0eXBlcyBpbiBmcmFnbWVudHMuCi0g
ICAgaWYgKG1fZG9jdW1lbnQtPmRvY3R5cGUoKSB8fCBtX2lzUGFyc2luZ0ZyYWdtZW50IHx8IG1f
Y3VycmVudCAhPSBtX2RvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIGEg
bmV3IGRvY3R5cGUgbm9kZSBhbmQgc2V0IGl0IGFzIG91ciBkb2N0eXBlLgotICAgIG1fZG9jdW1l
bnQtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1lbnQsIFN0cmluZzo6YWRv
cHQodC0+bV9uYW1lKSwgU3RyaW5nOjphZG9wdCh0LT5tX3B1YmxpY0lEKSwgU3RyaW5nOjphZG9w
dCh0LT5tX3N5c3RlbUlEKSkpOwotICAgIGlmICh0LT5tX2ZvcmNlUXVpcmtzKQotICAgICAgICBt
X2RvY3VtZW50LT5zZXRQYXJzZU1vZGUoRG9jdW1lbnQ6OkNvbXBhdCk7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzVGFibGVTZWN0aW9uKGNvbnN0IE5vZGUqIG4pCi17Ci0gICAgcmV0dXJuIG4tPmhhc1Rh
Z05hbWUodGJvZHlUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGZvb3RUYWcpIHx8IG4tPmhhc1RhZ05h
bWUodGhlYWRUYWcpOwotfQotCi1zdGF0aWMgYm9vbCBpc1RhYmxlUGFydChjb25zdCBOb2RlKiBu
KQotewotICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRyVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRk
VGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRoVGFnKQotICAgICAgICB8fCBpc1RhYmxlU2VjdGlvbihu
KTsKLX0KLQotc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQoY29uc3QgTm9kZSogbikKLXsKLSAg
ICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwgaXNUYWJsZVBhcnQobik7Ci19Ci0K
LXN0YXRpYyBib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCi17
Ci0gICAgcmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnIHx8IHRhZ05hbWUgPT0gY2FwdGlvblRh
ZyB8fCB0YWdOYW1lID09IHRkVGFnCi0gICAgICAgIHx8IHRhZ05hbWUgPT0gdGhUYWcgfHwgdGFn
TmFtZSA9PSBidXR0b25UYWcgfHwgdGFnTmFtZSA9PSBtYXJxdWVlVGFnCi0gICAgICAgIHx8IHRh
Z05hbWUgPT0gb2JqZWN0VGFnIHx8IHRhZ05hbWUgPT0gdGFibGVUYWcgfHwgdGFnTmFtZSA9PSBo
dG1sVGFnOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Omluc2VydE5vZGUo
Tm9kZSogbiwgYm9vbCBmbGF0KQotewotICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0Tm9kZShuKTsK
LQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbi0+bG9jYWxOYW1lKCk7Ci0g
ICAgCi0gICAgLy8gPHRhYmxlPiBpcyBuZXZlciBhbGxvd2VkIGluc2lkZSBzdHJheSB0YWJsZSBj
b250ZW50LiAgQWx3YXlzIHBvcCBvdXQgb2YgdGhlIHN0cmF5IHRhYmxlIGNvbnRlbnQKLSAgICAv
LyBhbmQgY2xvc2UgdXAgdGhlIGZpcnN0IHRhYmxlLCBhbmQgdGhlbiBzdGFydCB0aGUgc2Vjb25k
IHRhYmxlIGFzIGEgc2libGluZy4KLSAgICBpZiAobV9pblN0cmF5VGFibGVDb250ZW50ICYmIGxv
Y2FsTmFtZSA9PSB0YWJsZVRhZykKLSAgICAgICAgcG9wQmxvY2sodGFibGVUYWcpOwotCi0gICAg
aWYgKG1fcGFyc2VyUXVpcmtzICYmICFtX3BhcnNlclF1aXJrcy0+c2hvdWxkSW5zZXJ0Tm9kZSht
X2N1cnJlbnQsIG4pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgdGFnUHJpb3Jp
dHkgPSB0YWdQcmlvcml0eU9mTm9kZShuKTsKLQotICAgIC8vIGxldCdzIGJlIHN0dXBpZCBhbmQg
anVzdCB0cnkgdG8gaW5zZXJ0IGl0LgotICAgIC8vIHRoaXMgc2hvdWxkIHdvcmsgaWYgdGhlIGRv
Y3VtZW50IGlzIHdlbGwtZm9ybWVkCi0gICAgTm9kZSogbmV3Tm9kZSA9IG1fY3VycmVudC0+YWRk
Q2hpbGQobik7Ci0gICAgaWYgKCFuZXdOb2RlKQotICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3Io
biwgZmxhdCwgbG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7IC8vIFRyeSB0byBoYW5kbGUgdGhlIGVy
cm9yLgotCi0gICAgLy8gZG9uJ3QgcHVzaCBlbGVtZW50cyB3aXRob3V0IGVuZCB0YWdzIChlLmcu
LCA8aW1nPikgb24gdGhlIHN0YWNrCi0gICAgYm9vbCBwYXJlbnRBdHRhY2hlZCA9IG1fY3VycmVu
dC0+YXR0YWNoZWQoKTsKLSAgICBpZiAodGFnUHJpb3JpdHkgPiAwICYmICFmbGF0KSB7Ci0gICAg
ICAgIGlmIChuZXdOb2RlID09IG1fY3VycmVudCkgewotICAgICAgICAgICAgLy8gVGhpcyBjYXNl
IHNob3VsZCBvbmx5IGJlIGhpdCB3aGVuIGEgZGVtb3RlZCA8Zm9ybT4gaXMgcGxhY2VkIGluc2lk
ZSBhIHRhYmxlLgotICAgICAgICAgICAgQVNTRVJUKGxvY2FsTmFtZSA9PSBmb3JtVGFnKTsKLSAg
ICAgICAgICAgIHJlcG9ydEVycm9yKEZvcm1JbnNpZGVUYWJsZVBhcnRFcnJvciwgJm1fY3VycmVu
dC0+bG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBmb3JtLT5zZXREZW1v
dGVkKHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIHB1c2hCbG9j
ayBmdW5jdGlvbiB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIGN1cnJlbnQgdG8gdGhlIGJsb2NrIHN0
YWNrCi0gICAgICAgICAgICAvLyBzbyB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgbV9kaWRSZWZDdXJy
ZW50IGlzIGZhbHNlLiBUaGUgY29kZSBiZWxvdyBpcyBhbgotICAgICAgICAgICAgLy8gb3B0aW1p
emVkIHZlcnNpb24gb2Ygc2V0Q3VycmVudCB0aGF0IHRha2VzIGFkdmFudGFnZSBvZiB0aGF0IGZh
Y3QgYW5kIGFsc28KLSAgICAgICAgICAgIC8vIGFzc3VtZXMgdGhhdCBuZXdOb2RlIGlzIG5laXRo
ZXIgMCBub3IgYSBwb2ludGVyIHRvIHRoZSBkb2N1bWVudC4KLSAgICAgICAgICAgIHB1c2hCbG9j
ayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKLSAgICAgICAgICAgIG5ld05vZGUtPmJlZ2luUGFy
c2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZGlkUmVmQ3VycmVudCk7Ci0g
ICAgICAgICAgICBuZXdOb2RlLT5yZWYoKTsgCi0gICAgICAgICAgICBtX2N1cnJlbnQgPSBuZXdO
b2RlOwotICAgICAgICAgICAgbV9kaWRSZWZDdXJyZW50ID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5n
RnJhZ21lbnQpCi0gICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJh
Z21lbnQpCi0gICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgbi0+ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvY2FsTmFtZSA9PSBodG1sVGFnICYmIG1f
ZG9jdW1lbnQtPmZyYW1lKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgIG1fZG9j
dW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50RWxlbWVudEF2YWlsYWJs
ZSgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQotewotICAgIC8vIEVycm9yIGhhbmRsaW5nIGNv
ZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVudC9jaGls
ZCBjb21iaW5hdGlvbnMuCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICAvLyAxLiBD
aGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBkZWNpZGUgaG93IHRvIGRlYWwgd2l0
aCBlcnJvcnMuCi0gICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRWxl
bWVudCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obik7Ci0gICAgICAgIGlmIChoLT5o
YXNMb2NhbE5hbWUodHJUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0aFRhZykgfHwgaC0+aGFzTG9j
YWxOYW1lKHRkVGFnKSkgewotICAgICAgICAgICAgaWYgKG1faW5TdHJheVRhYmxlQ29udGVudCAm
JiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVy
cm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50LT5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcG9wIG91dCB0byB0aGUgbmVhcmVzdCBlbmNs
b3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCi0gICAgICAgICAgICAgICAgd2hpbGUgKG1fYmxvY2tT
dGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkKLSAgICAgICAgICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaGVhZFRhZykp
IHsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2N1
cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJv
cihNaXNwbGFjZWRIZWFkRXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUobWV0YVRhZykg
fHwgaC0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShiYXNlVGFnKSkg
ewotICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYg
KCFtX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICAg
ICAgY3JlYXRlZEhlYWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1f
aGVhZCkgewotICAgICAgICAgICAgICAgIGlmICghY3JlYXRlZEhlYWQpCi0gICAgICAgICAgICAg
ICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUs
ICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobV9oZWFkLT5h
ZGRDaGlsZChuKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYg
IW1faXNQYXJzaW5nRnJhZ21lbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2go
KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaHRtbFRhZykpIHsKLSAgICAgICAgICAg
IGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkgewotICAgICAgICAgICAgICAgIGlm
IChtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSAmJiBtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgewot
ICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihSZWR1bmRhbnRIVE1MQm9keUVycm9yLCAm
bG9jYWxOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxIVE1M
PiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQotICAgICAgICAg
ICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3Rp
bmcgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIG1hcCA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgRWxlbWVudCogZXhpc3RpbmdIVE1MID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1fZG9j
dW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTmFtZWROb2Rl
TWFwKiBibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1dGVzKGZhbHNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyAr
K2wpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJp
YnV0ZUl0ZW0obCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJtYXAtPmdldEF0dHJp
YnV0ZUl0ZW0oaXQtPm5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3Rp
bmdIVE1MLT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwgaXQtPnZhbHVlKCkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
dGl0bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1l
KHNjcmlwdFRhZykpIHsKLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZEhlYWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwot
ICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChtX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBuZXdOb2RlID0gbV9o
ZWFkLT5hZGRDaGlsZChuKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkSGVhZCkKLSAgICAgICAgICAgICAgICAgICAg
cmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJm1fY3Vy
cmVudC0+bG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHB1
c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICBuZXdOb2Rl
LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3
Tm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2lu
Z0ZyYWdtZW50KQotICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2luQm9k
eSkgewotICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKGgtPnRhZ1FOYW1lKCkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIGlmIChtX2luQm9keSAm
JiBtX2RvY3VtZW50LT5ib2R5KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAg
ICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJp
YnV0ZXMgdG8gZXhpc3Rpbmcgb25lCi0gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRv
bid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAg
ICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4uPGJvZHkgYmdj
b2xvcj13cm9uZ2NvbG9yPgotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlZHVuZGFudEhU
TUxCb2R5RXJyb3IsICZsb2NhbE5hbWUpOwotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCog
bWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAg
ICAgICAgICAgIEVsZW1lbnQqIGV4aXN0aW5nQm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKLSAg
ICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGJtYXAgPSBleGlzdGluZ0JvZHktPmF0dHJpYnV0
ZXMoZmFsc2UpOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbCA9IDA7IG1hcCAmJiBs
IDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSog
aXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYm1h
cC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+bmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGV4aXN0aW5nQm9keS0+c2V0QXR0cmlidXRlKGl0LT5uYW1lKCksIGl0LT52YWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYXJl
YVRhZykpIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkQXJlYUVycm9yLCAmbV9jdXJyZW50LT5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50TWFwRWxlbWVudC0+YWRkQ2hpbGQo
bik7Ci0gICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0Zy
YWdtZW50KQotICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShjYXB0aW9uVGFnKSkg
ewotICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkKG1fY3VycmVudCkpIHsKLSAgICAgICAg
ICAgICAgICB3aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0KG1fY3VycmVudCkpCi0g
ICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGluc2VydE5vZGUobik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KG4tPmlzQ29tbWVudE5vZGUoKSAmJiAhbV9oZWFkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyAyLiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB0
byBkbyBzb21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgaWYgKG1fY3VycmVudC0+aXNI
VE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBoID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihtX2N1cnJlbnQpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJl
bnRUYWdOYW1lID0gaC0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUo
aHRtbFRhZykpIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbHQgPSBuLT5pc0hUTUxFbGVt
ZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pIDogMDsKLSAgICAgICAgICAgIGlm
IChlbHQgJiYgKGVsdC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykgfHwgZWx0LT5oYXNMb2NhbE5h
bWUoc3R5bGVUYWcpIHx8Ci0gICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUobWV0YVRh
ZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwKLSAgICAgICAgICAgICAgICBlbHQt
Pmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKGVtYmVkVGFnKSB8
fAotICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSB8fCBlbHQtPmhh
c0xvY2FsTmFtZShpc2luZGV4VGFnKSB8fAotICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxO
YW1lKGJhc2VUYWcpKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQp
OwotICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKG1faGVhZC5nZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOwotICAgICAg
ICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAoIW1faGF2ZUZyYW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVu
c3VyZSB0aGF0IGhlYWQgZXhpc3RzLgotICAgICAgICAgICAgICAgICAgICAvLyBCdXQgbm90IGZv
ciBvbGRlciB2ZXJzaW9ucyBvZiBNYWlsLCB3aGVyZSB0aGUgaW1wbGljaXQgPGhlYWQ+IGlzbid0
IGV4cGVjdGVkIC0gPHJkYXI6Ly9wcm9ibGVtLzY4NjM3OTU+Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCAmJiBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQobV9k
b2N1bWVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgcG9wQmxvY2soaGVhZFRhZyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXJ0Qm9keSgpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKEhUTUxCb2R5RWxlbWVu
dDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJl
cG9ydEVycm9yKE1pc3BsYWNlZEZyYW1lc2V0Q29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaGVhZFRhZykp
IHsKLSAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGh0bWxUYWcpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhlIGJvZHkgc3RhcnRzIGhlcmUuLi4KLSAgICAgICAgICAgICAgICBpZiAo
IW1faGF2ZUZyYW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjdXJyZW50VGFn
TmFtZSA9PSBoZWFkVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRh
Z05hbWUpOwotICAgICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZShIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRGcmFtZXNl
dENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGFkZHJlc3NUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShmb250
VGFnKQotICAgICAgICAgICAgICAgICAgIHx8IGgtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwg
aC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlz
cGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50VGFnTmFtZSk7Ci0g
ICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoY2FwdGlvblRhZykp
IHsKLSAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3NlIHRo
ZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFj
ZWRDYXB0aW9uQ29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsKLSAgICAgICAgICAgIHBvcEJsb2Nr
KGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChuKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKLSAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0clRhZykgfHwg
aXNUYWJsZVNlY3Rpb24oaCkpIHsKLSAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHRhYmxl
VGFnKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlRXJyb3Is
ICZjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1faXNQYXJzaW5nRnJhZ21l
bnQgJiYgIWgtPmhhc0xvY2FsTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIC8v
IGZyYWdtZW50IG1heSBjb250YWluIHRhYmxlIHBhcnRzIHdpdGhvdXQgPHRhYmxlPiBhbmNlc3Rv
ciwgcG9wIHRoZW0gb25lIGJ5IG9uZQotICAgICAgICAgICAgICAgICAgICBwb3BCbG9jayhoLT5s
b2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsgLy8gZW5k
IHRoZSB0YWJsZQotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOyAgICAgIC8vIC4uLmFu
ZCBzdGFydCBhIG5ldyBvbmUKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3Vy
cmVudDsKLSAgICAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7
Ci0gICAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgbWF5IGhhdmUgcmVtb3ZlZCB0aGUgY3VycmVu
dCBub2RlJ3MgcGFyZW50IGZyb20gdGhlIERPTQotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzcKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGRvIHJlYWwgcmVjb3ZlcnkgaGVyZSBhbmQgcmUtcGFyZW50IHdpdGgg
dGhlIGNvcnJlY3Qgbm9kZS4KLSAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIE5vZGUqIGdyYW5kcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobi0+aXNU
ZXh0Tm9kZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChoLT5oYXNMb2NhbE5hbWUodHJUYWcp
ICYmCi0gICAgICAgICAgICAgICAgICAgICBpc1RhYmxlU2VjdGlvbihwYXJlbnQpICYmIGdyYW5k
cGFyZW50ICYmIGdyYW5kcGFyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgfHwKLSAgICAgICAg
ICAgICAgICAgICAgICgoIW4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFuLT5oYXNUYWdOYW1lKHRo
VGFnKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFzVGFnTmFtZShmb3JtVGFnKSAm
JiAhbi0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKSAmJiBpc1RhYmxlU2VjdGlvbihub2RlKSAmJgot
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgPyBu
b2RlIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUtPmhhc1RhZ05hbWUodHJU
YWcpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBjYW4gaGFwcGVuIHdpdGggZnJhZ21lbnRzCi0gICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBhcmVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobiwgbm9kZSwgZWMpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWVjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXBvcnRFcnJvcihTdHJheVRhYmxlQ29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmY3VycmVudFRh
Z05hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAm
JiB0YWdQcmlvcml0eSA+IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZsYXQg
JiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBU
YWdTdGF0dXNGb3JiaWRkZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQrKzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKCFlYykgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50LT5oYXNUYWdO
YW1lKHRyVGFnKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoVGFibGVQ
YXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRkVGFnLmxvY2FsTmFtZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmNyZWF0
ZSh0ZFRhZywgbV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fY3VycmVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIERvbid0IHJlcG9ydCBhbiBlcnJvciBpbiB0aGlzIGNhc2UsIHNpbmNlIG1ha2lu
ZyBhIDx0Ym9keT4gaGFwcGVucyBhbGwgdGhlIHRpbWUgd2hlbiB5b3UgaGF2ZSA8dGFibGU+PHRy
PiwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpdCBpc24ndCByZWFsbHkgYSBwYXJz
ZSBlcnJvciBwZXIgc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUodGJvZHlUYWcsIG1fZG9jdW1lbnQpLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
cG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZsb2NhbE5hbWUsICZ0clRhZy5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKEhUTUxUYWJsZVJv
d0VsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShvYmpl
Y3RUYWcpKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRDb250ZW50UmV0cnlF
cnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgIHBvcEJsb2Nr
KG9iamVjdFRhZyk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IGlmIChoLT5oYXNMb2NhbE5hbWUocFRhZykgfHwgaXNIZWFkaW5nVGFnKGN1cnJlbnRUYWdOYW1l
KSkgewotICAgICAgICAgICAgaWYgKCFpc0lubGluZShuKSkgewotICAgICAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUob3B0aW9u
VGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUob3B0Z3JvdXBUYWcpKSB7Ci0gICAgICAgICAgICBpZiAo
bG9jYWxOYW1lID09IG9wdGdyb3VwVGFnKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc2VsZWN0VGFnKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRoZSBz
YW1lCi0gICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoc2VsZWN0VGFnKSkgewotICAgICAg
ICAgICAgaWYgKGxvY2FsTmFtZSA9PSBpbnB1dFRhZyB8fCBsb2NhbE5hbWUgPT0gdGV4dGFyZWFU
YWcpIHsKLSAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRDb250ZW50UmV0cnlF
cnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBwb3BC
bG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGNvbGdyb3Vw
VGFnKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwotICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWgtPmhhc0xvY2FsTmFtZShi
b2R5VGFnKSkgewotICAgICAgICAgICAgaWYgKGlzSW5saW5lKG1fY3VycmVudCkpIHsKLSAgICAg
ICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
LT5pc0RvY3VtZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKLSAg
ICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7Ci0gICAgICAgICAgICBp
ZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUo
bV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyAzLiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBq
dXN0IHJldHVybiBmYWxzZSBhbmQgYXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgotICAg
IGlmICghaGFuZGxlZCkgewotICAgICAgICByZXBvcnRFcnJvcihJZ25vcmVkQ29udGVudEVycm9y
LCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc2VydE5vZGUobik7Ci19Ci0KLXR5cGVkZWYgYm9v
bCAoTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6KkNyZWF0ZUVycm9yQ2hlY2tGdW5jKShUb2tl
biogdCwgUmVmUHRyPE5vZGU+Jik7Ci10eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCos
IENyZWF0ZUVycm9yQ2hlY2tGdW5jPiBGdW5jdGlvbk1hcDsKLQotYm9vbCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+
JiByZXN1bHQpCi17Ci0gICAgcmVzdWx0ID0gVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHQtPnRl
eHQuZ2V0KCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+
JiByZXN1bHQpCi17Ci0gICAgcmVzdWx0ID0gQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHQt
PnRleHQuZ2V0KCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYg
cmVzdWx0KQotewotICAgIGlmICghbV9oZWFkIHx8IG1fY3VycmVudC0+bG9jYWxOYW1lKCkgPT0g
aHRtbFRhZykgewotICAgICAgICBtX2hlYWQgPSBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShtX2Rv
Y3VtZW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9oZWFkOwotICAgIH0gZWxzZQotICAgICAgICBy
ZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tl
biosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3
ZSBoYXZlIGEgZnJhbWVzZXQKLSAgICBpZiAobV9oYXZlRnJhbWVTZXQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBFbnN1cmUgdGhhdCBoZWFkIGV4aXN0cyAodW5sZXNzIHBh
cnNpbmcgYSBmcmFnbWVudCkuCi0gICAgLy8gQnV0IG5vdCBmb3Igb2xkZXIgdmVyc2lvbnMgb2Yg
TWFpbCwgd2hlcmUgdGhlIGltcGxpY2l0IDxoZWFkPiBpc24ndCBleHBlY3RlZCAtIDxyZGFyOi8v
cHJvYmxlbS82ODYzNzk1PgotICAgIGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCAmJiBzaG91bGRD
cmVhdGVJbXBsaWNpdEhlYWQobV9kb2N1bWVudCkpCi0gICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAg
ICAKLSAgICBwb3BCbG9jayhoZWFkVGFnKTsKLSAgICBzdGFydEJvZHkoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmFtZXNldENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQotewotICAgIHBvcEJsb2NrKGhlYWRU
YWcpOwotICAgIGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJhbWVTZXQgJiYgIW1faGF2ZUNvbnRl
bnQpIHsKLSAgICAgICAgcG9wQmxvY2soYm9keVRhZyk7Ci0gICAgICAgIC8vICMjIyBhY3R1YWxs
eSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBub3cgaGlkZGVuICJib2R5IiBlbGVt
ZW50Ci0gICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVj
YXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQotICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQg
dGhlIGhlYWRhY2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMK
LSAgICAgICAgLy8gbm8gc2l0ZSBhY3R1YWxseSByZWx5aW5nIG9uIHRoYXQgZGV0YWlsIChEaXJr
KQotICAgICAgICBpZiAobV9kb2N1bWVudC0+Ym9keSgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50
KQotICAgICAgICAgICAgbV9kb2N1bWVudC0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoc3R5bGVBdHRy
LCAiZGlzcGxheTpub25lIik7Ci0gICAgICAgIG1faW5Cb2R5ID0gZmFsc2U7Ci0gICAgfQotICAg
IGlmICgobV9oYXZlQ29udGVudCB8fCBtX2hhdmVGcmFtZVNldCkgJiYgbV9jdXJyZW50LT5sb2Nh
bE5hbWUoKSA9PSBodG1sVGFnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9oYXZlRnJh
bWVTZXQgPSB0cnVlOwotICAgIHN0YXJ0Qm9keSgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBm
b3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCi0gICAgLy8gVGhpcyBpcyBjb25z
aXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgIGlmICghbV9jdXJyZW50
Rm9ybUVsZW1lbnQpIHsKLSAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSBIVE1MRm9ybUVs
ZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50Rm9y
bUVsZW1lbnQ7Ci0gICAgICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1
bHQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJc2luZGV4KHQpOwotICAgIGlmICgh
bV9pbkJvZHkpCi0gICAgICAgIG1faXNpbmRleEVsZW1lbnQgPSBuLnJlbGVhc2UoKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgdC0+c2VsZkNsb3NpbmdUYWcgPSB0cnVlOwotICAgICAgICByZXN1bHQg
PSBuLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiBy
ZXN1bHQpCi17Ci0gICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKLSAgICBw
b3BCbG9jayhkdFRhZyk7Ci0gICAgcG9wQmxvY2soZGRUYWcpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCi17Ci0gICAgcENsb3NlckNyZWF0ZUVycm9y
Q2hlY2sodCwgcmVzdWx0KTsKLSAgICBwb3BCbG9jayhkZFRhZyk7Ci0gICAgcG9wQmxvY2soZHRU
YWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OnJwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9w
QmxvY2socnBUYWcpOwotICAgIHBvcEJsb2NrKHJ0VGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpydENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mKQotewotICAgIHBvcEJsb2NrKHJwVGFnKTsKLSAgICBwb3BCbG9j
ayhydFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JikK
LXsKLSAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCi17Ci0gICAgcENsb3NlckNyZWF0ZUVy
cm9yQ2hlY2sodCwgcmVzdWx0KTsKLSAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRTdHls
ZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcmV0dXJu
IGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOwotfQotCi1ib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKQotewotICAgIHBvcEJsb2NrKHRkVGFnKTsKLSAgICBwb3BCbG9jayh0aFRhZyk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0g
ICAgcG9wQmxvY2sodGhlYWRUYWcpOwotICAgIHBvcEJsb2NrKHRib2R5VGFnKTsKLSAgICBwb3BC
bG9jayh0Zm9vdFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKQotewotICAgIHNldFNraXBNb2RlKG5vZW1iZWRUYWcpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZnJhbWVzQ3JlYXRlRXJyb3JD
aGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgc2V0U2tpcE1vZGUobm9mcmFtZXNU
YWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0g
ICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCkt
PmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAg
IHNldFNraXBNb2RlKG5vc2NyaXB0VGFnKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2so
VG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQotewotICAgIGlmIChoYXNQRWxlbWVudEluU2NvcGUoKSkK
LSAgICAgICAgcG9wQmxvY2socFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mKQotewotICAgIGlmIChtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgpKQot
ICAgICAgICBwb3BCbG9jayhwVGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptYXBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRy
PE5vZGU+JiByZXN1bHQpCi17Ci0gICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IEhUTUxNYXBFbGVt
ZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0gICAgcmVzdWx0ID0gbV9jdXJyZW50TWFwRWxlbWVu
dDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hcFRhZ1RvRnVuYyhGdW5j
dGlvbk1hcCYgbWFwLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIENyZWF0ZUVycm9yQ2hlY2tG
dW5jIGZ1bmMpCi17Ci0gICAgbWFwLnNldCh0YWcubG9jYWxOYW1lKCkuaW1wbCgpLCBmdW5jKTsK
LX0KLQotdGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUgPgotc3RhdGljIHZvaWQgbWFwVGFnc1Rv
RnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBRdWFsaWZpZWROYW1lICgmbmFtZXMpW0FycmF5U2l6ZV0s
IENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCi17Ci0gICAgZm9yIChzaXplX3QgeCA9IDA7IHgg
PCBBcnJheVNpemU7IHgrKykgewotICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0g
bmFtZXNbeF07Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhtYXAsIG5hbWUsIGZ1bmMpOwotICAgIH0K
LX0KLQotUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpnZXROb2Rl
KFRva2VuKiB0KQotewotICAgIC8vIEluaXQgb3VyIGVycm9yIGhhbmRsaW5nIHRhYmxlLgotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRnVuY3Rpb25NYXAsIGdGdW5jdGlvbk1hcCwgKCkpOwotICAg
IGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFF1YWxpZmllZE5hbWUgbmVz
dGVkQ3JlYXRlRXJyb3JUYWdzW10gPSB7IGFUYWcsIGJ1dHRvblRhZywgbm9iclRhZywgdHJUYWcg
fTsKLSAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5lc3RlZENyZWF0ZUVycm9y
VGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2sp
OwotCi0gICAgICAgIFF1YWxpZmllZE5hbWUgbmVzdGVkU3R5bGVDcmVhdGVFcnJvclRhZ3NbXSA9
IHsgYlRhZywgYmlnVGFnLCBpVGFnLCBzVGFnLCBzbWFsbFRhZywgc3RyaWtlVGFnLCB0dFRhZywg
dVRhZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgbmVzdGVkU3R5bGVD
cmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRTdHlsZUNy
ZWF0ZUVycm9yQ2hlY2spOwotCi0gICAgICAgIFF1YWxpZmllZE5hbWUgcENsb3NlckNyZWF0ZUVy
cm9yVGFnc1tdID0geyBhZGRyZXNzVGFnLCBhcnRpY2xlVGFnLAotICAgICAgICAgICAgYXNpZGVU
YWcsIGJsb2NrcXVvdGVUYWcsIGNlbnRlclRhZywgZGlyVGFnLCBkaXZUYWcsIGRsVGFnLAotICAg
ICAgICAgICAgZmllbGRzZXRUYWcsIGZvb3RlclRhZywgaDFUYWcsIGgyVGFnLCBoM1RhZywgaDRU
YWcsIGg1VGFnLCBoNlRhZywKLSAgICAgICAgICAgIGhlYWRlclRhZywgaGdyb3VwVGFnLCBoclRh
ZywgbGlzdGluZ1RhZywgbWVudVRhZywgbmF2VGFnLCBvbFRhZywKLSAgICAgICAgICAgIHBUYWcs
IHBsYWludGV4dFRhZywgcHJlVGFnLCBzZWN0aW9uVGFnLCB1bFRhZyB9OwotICAgICAgICBtYXBU
YWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgcENsb3NlckNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKLQotICAgICAgICBt
YXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBib2R5VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0
aW9uTWFwLCBkZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmRkQ3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGR0VGFnLCAmTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgZm9ybVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmZvcm1DcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgZnJhbWVzZXRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmFtZXNldENyZWF0
ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBoZWFkVGFn
LCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2spOwotICAg
ICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBpc2luZGV4VGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCBtYXBUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpt
YXBDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwg
bGlUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vZW1iZWRUYWcs
ICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayk7Ci0g
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vZnJhbWVzVGFnLCAmTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9zY3JpcHRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMo
Z0Z1bmN0aW9uTWFwLCB0YWJsZVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9z
ZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlv
bk1hcCwgcnBUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpycENyZWF0ZUVycm9yQ2hl
Y2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBydFRhZywgJkxlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIHNlbGVjdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCB0ZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVy
cm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aFRhZywgJkxl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOwotICAg
ICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Ym9keVRhZywgJkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBU
YWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Zm9vdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMo
Z0Z1bmN0aW9uTWFwLCB0aGVhZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxl
U2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOwotCi0gICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoY29t
bWVudEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Y29tbWVudENyZWF0
ZUVycm9yQ2hlY2spOwotICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHRleHRBdG9tLmltcGwoKSwg
JkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICB9
Ci0KLSAgICBib29sIHByb2NlZWQgPSB0cnVlOwotICAgIFJlZlB0cjxOb2RlPiByZXN1bHQ7Ci0g
ICAgaWYgKENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hlY2tGdW5jID0gZ0Z1bmN0aW9uTWFw
LmdldCh0LT50YWdOYW1lLmltcGwoKSkpCi0gICAgICAgIHByb2NlZWQgPSAodGhpcy0+KmVycm9y
Q2hlY2tGdW5jKSh0LCByZXN1bHQpOwotICAgIGlmIChwcm9jZWVkKQotICAgICAgICByZXN1bHQg
PSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIHQtPnRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgbV9kb2N1bWVudCwgbV9jdXJy
ZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOwotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQot
Ci1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKLXsKLSAgICAvLyB3d3cubGljZW8uZWR1Lm14
IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMgYSBsZXZlbCBvZiBuZXN0aW5n
IG9mCi0gICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBhIGJ1bmNoIG9mIDxiPnMuICBX
ZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMAotICAgIC8vIG5lc3RlZCB0YWdzIG9mIHRoZSBz
YW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3JpbmcgdGhlbSBhbGwgdG9nZXRoZXIuCi0gICAgdW5z
aWduZWQgaSA9IDA7Ci0gICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gbV9ibG9ja1N0YWNr
OwotICAgICAgICAgaSA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0aCAmJiBjdXJyICYmIGN1cnItPnRh
Z05hbWUgPT0gdGFnTmFtZTsKLSAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0LCBpKyspIHsgfQot
ICAgIHJldHVybiBpICE9IGNNYXhSZWR1bmRhbnRUYWdEZXB0aDsKLX0KLQotdm9pZCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4qIHQpCi17Ci0gICAgLy8g
U3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgotICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRo
ZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0
aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgotICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgp
IGNhbGwgdG8gY2xvc2UgdGhpbmdzLgotICAgIGlmICh0LT50YWdOYW1lID09IGh0bWxUYWcgfHwg
dC0+dGFnTmFtZSA9PSBib2R5VGFnIHx8IHQtPnRhZ05hbWUgPT0gY29tbWVudEF0b20pCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIGNoZWNrRm9yQ2xvc2VUYWdFcnJvcnMgPSB0cnVl
OwotICAgIGlmICh0LT50YWdOYW1lID09IGZvcm1UYWcgJiYgbV9jdXJyZW50Rm9ybUVsZW1lbnQp
IHsKLSAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAwOwotICAgICAgICBjaGVja0ZvckNs
b3NlVGFnRXJyb3JzID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IG1hcFRh
ZykKLSAgICAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7Ci0gICAgZWxzZSBpZiAodC0+dGFn
TmFtZSA9PSBwVGFnKQotICAgICAgICBjaGVja0ZvckNsb3NlVGFnRXJyb3JzID0gZmFsc2U7Ci0g
ICAgICAgIAotICAgIEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBtX2Jsb2NrU3RhY2s7Ci0gICAg
cG9wQmxvY2sodC0+dGFnTmFtZSwgY2hlY2tGb3JDbG9zZVRhZ0Vycm9ycyk7Ci0gICAgaWYgKG9s
ZEVsZW0gPT0gbV9ibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUgPT0gcFRhZykgewotICAgICAgICAv
LyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vja28sIFdpbklFLCBh
bmQgTWFjSUUgYWxsIHRyZWF0Ci0gICAgICAgIC8vIHRoaXMgYXMgYSB2YWxpZCBicmVhaywgaS5l
LiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQotICAgICAgICAvLyBw
YXJhZ3JhcGguCi0gICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKLSAgICAgICAgcGFyc2VUb2tl
bih0KTsKLSAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7Ci0gICAgICAgIHJlcG9ydEVycm9y
KFN0cmF5UGFyYWdyYXBoQ2xvc2VFcnJvcik7Ci0gICAgfQotfQotCi1ib29sIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OmlzSGVhZGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChUYWdOYW1lU2V0LCBoZWFkaW5nVGFncywgKCkp
OwotICAgIGlmIChoZWFkaW5nVGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVkTmFt
ZSB0YWdOYW1lc1tdID0geyBoMVRhZywgaDJUYWcsIGgzVGFnLCBoNFRhZywgaDVUYWcsIGg2VGFn
IH07Ci0gICAgICAgIGFkZFRhZ3MoaGVhZGluZ1RhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKLX0KLQotYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZShOb2RlKiBub2RlKSBjb25zdAotewot
ICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBIVE1MRWxlbWVudCogZSA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGZvbnRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZSh0
dFRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZSh1VGFnKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoYlRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGlUYWcpIHx8Ci0gICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHN0cmlrZVRhZykgfHwgZS0+aGFz
TG9jYWxOYW1lKGJpZ1RhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzbWFsbFRh
ZykgfHwgZS0+aGFzTG9jYWxOYW1lKGVtVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3Ryb25nVGFn
KSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGRmblRhZykgfHwgZS0+aGFzTG9jYWxO
YW1lKGNvZGVUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzYW1wVGFnKSB8fAotICAgICAgICAgICAg
ZS0+aGFzTG9jYWxOYW1lKGtiZFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHZhclRhZykgfHwgZS0+
aGFzTG9jYWxOYW1lKGNpdGVUYWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYWJi
clRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFjcm9ueW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShz
dWJUYWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc3VwVGFnKSB8fCBlLT5oYXNM
b2NhbE5hbWUoc3BhblRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5vYnJUYWcpIHx8Ci0gICAgICAg
ICAgICBlLT5oYXNMb2NhbE5hbWUobm9mcmFtZXNUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShub2xh
eWVyVGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5vZW1iZWRUYWcpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYgIUVOQUJMRShYSFRNTE1QKQotICAgICAgICBpZiAo
ZS0+aGFzTG9jYWxOYW1lKG5vc2NyaXB0VGFnKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgewot
ICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAgICAgICAg
ICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFi
b3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxBdG9t
aWNTdHJpbmdJbXBsKj4sIHJlc2lkdWFsU3R5bGVUYWdzLCAoKSk7Ci0gICAgaWYgKHJlc2lkdWFs
U3R5bGVUYWdzLmlzRW1wdHkoKSkgewotICAgICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWVzW10g
PSB7IGFUYWcsIGZvbnRUYWcsIHR0VGFnLCB1VGFnLCBiVGFnLCBpVGFnLAotICAgICAgICAgICAg
c1RhZywgc3RyaWtlVGFnLCBiaWdUYWcsIHNtYWxsVGFnLCBlbVRhZywgc3Ryb25nVGFnLCBkZm5U
YWcsCi0gICAgICAgICAgICBjb2RlVGFnLCBzYW1wVGFnLCBrYmRUYWcsIHZhclRhZywgbm9iclRh
ZyB9OwotICAgICAgICBhZGRUYWdzKHJlc2lkdWFsU3R5bGVUYWdzLCB0YWdOYW1lcyk7Ci0gICAg
fQotICAgIHJldHVybiByZXNpZHVhbFN0eWxlVGFncy5jb250YWlucyh0YWdOYW1lLmltcGwoKSk7
Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNBZmZlY3RlZEJ5UmVzaWR1
YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCi17Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiwgdW5hZmZlY3RlZFRhZ3MsICgpKTsK
LSAgICBpZiAodW5hZmZlY3RlZFRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFF1YWxpZmllZE5h
bWUgdGFnTmFtZXNbXSA9IHsgYm9keVRhZywgdGFibGVUYWcsIHRoZWFkVGFnLCB0Ym9keVRhZywK
LSAgICAgICAgICAgIHRmb290VGFnLCB0clRhZywgdGhUYWcsIHRkVGFnLCBjYXB0aW9uVGFnLCBj
b2xncm91cFRhZywgY29sVGFnLAotICAgICAgICAgICAgb3B0aW9uVGFnLCBvcHRncm91cFRhZywg
c2VsZWN0VGFnLCBvYmplY3RUYWcsIGRhdGFncmlkVGFnLCBkYXRhbGlzdFRhZyB9OwotICAgICAg
ICBhZGRUYWdzKHVuYWZmZWN0ZWRUYWdzLCB0YWdOYW1lcyk7Ci0gICAgfQotICAgIHJldHVybiAh
dW5hZmZlY3RlZFRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsKCkpOwotfQotCi12b2lkIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Js
b2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQotewotICAgIEhUTUxTdGFja0VsZW0qIG1heEVsZW0g
PSAwOwotICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKLSAgICBib29sIHN0cmF5VGFibGVDb250
ZW50ID0gZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQ7Ci0KLSAgICB1bnNpZ25lZCBpdGVyYXRpb25D
b3VudCA9IDA7Ci0KLSAgICBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyA9IHRy
dWU7Ci0gICAgd2hpbGUgKCFmaW5pc2hlZCAmJiAoaXRlcmF0aW9uQ291bnQrKyA8IGNSZXNpZHVh
bFN0eWxlSXRlcmF0aW9uTGltaXQpKSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIG91dGVybW9zdCBl
bGVtZW50IHRoYXQgY3Jvc3NlcyBvdmVyIHRvIGEgaGlnaGVyIGxldmVsLiBJZiB0aGVyZSBleGlz
dHMgYW5vdGhlciBoaWdoZXItbGV2ZWwKLSAgICAgICAgLy8gZWxlbWVudCwgd2Ugd2lsbCBkbyBh
bm90aGVyIHBhc3MsIHVudGlsIHdlIGhhdmUgY29ycmVjdGVkIHRoZSBpbm5lcm1vc3Qgb25lLgot
ICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgSFRNTFN0YWNrRWxlbSogY3Vy
ciA9IG1fYmxvY2tTdGFjazsKLSAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldiA9IDA7Ci0gICAg
ICAgIEhUTUxTdGFja0VsZW0qIHByZXZNYXhFbGVtID0gMDsKLSAgICAgICAgbWF4RWxlbSA9IDA7
Ci0gICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3VyciAh
PSBlbGVtKSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+bGV2ZWwgPiBlbGVtLT5sZXZlbCkgewot
ICAgICAgICAgICAgICAgIGlmICghaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjdXJyLT50YWdO
YW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmICht
YXhFbGVtKQotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG5lZWQgYW5vdGhlciBwYXNz
LgotICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
IG1heEVsZW0gPSBjdXJyOwotICAgICAgICAgICAgICAgIHByZXZNYXhFbGVtID0gcHJldjsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldiA9IGN1cnI7Ci0gICAgICAgICAgICBjdXJy
ID0gY3Vyci0+bmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY3VyciB8fCAhbWF4RWxl
bSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBOb2RlKiByZXNpZHVhbEVsZW0gPSBw
cmV2LT5ub2RlOwotICAgICAgICBOb2RlKiBibG9ja0VsZW0gPSBwcmV2TWF4RWxlbSA/IHByZXZN
YXhFbGVtLT5ub2RlIDogbV9jdXJyZW50OwotICAgICAgICBOb2RlKiBwYXJlbnRFbGVtID0gZWxl
bS0+bm9kZTsKLQotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHJlcGFyZW50aW5nIHRo
YXQgaXMgZ29pbmcgdG8gb2NjdXIgaXMgYWxsb3dlZCBhY2NvcmRpbmcgdG8gdGhlIERPTS4KLSAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlaXRoZXIgYWx3YXlzIGFsbG93IGl0IG9yIHBlcmZv
cm0gYW4gYWRkaXRpb25hbCBmaXh1cCBpbnN0ZWFkIG9mCi0gICAgICAgIC8vIGp1c3QgYmFpbGlu
ZyBoZXJlLgotICAgICAgICAvLyBFeGFtcGxlOiA8cD48Zm9udD48Y2VudGVyPmJsYWg8L2ZvbnQ+
PC9jZW50ZXI+PC9wPiBpc24ndCBkb2luZyBhIGZpeHVwIHJpZ2h0IG5vdy4KLSAgICAgICAgaWYg
KCFwYXJlbnRFbGVtLT5jaGlsZEFsbG93ZWQoYmxvY2tFbGVtKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IFVua25vd247Ci0KLSAgICAgICAg
aWYgKG1heEVsZW0tPm5vZGUtPnBhcmVudE5vZGUoKSAhPSBlbGVtLT5ub2RlKSB7Ci0gICAgICAg
ICAgICAvLyBXYWxrIHRoZSBzdGFjayBhbmQgcmVtb3ZlIGFueSBlbGVtZW50cyB0aGF0IGFyZW4n
dCByZXNpZHVhbCBzdHlsZSB0YWdzLiAgVGhlc2UKLSAgICAgICAgICAgIC8vIGFyZSBiYXNpY2Fs
bHkganVzdCBiZWluZyBjbG9zZWQgdXAuICBFeGFtcGxlOgotICAgICAgICAgICAgLy8gPGZvbnQ+
PHNwYW4+TW9vPHA+R29vPC9mb250PjwvcD4uCi0gICAgICAgICAgICAvLyBJbiB0aGUgYWJvdmUg
ZXhhbXBsZSwgdGhlIDxzcGFuPiBkb2Vzbid0IG5lZWQgdG8gYmUgcmVvcGVuZWQuICBJdCBjYW4g
anVzdCBjbG9zZS4KLSAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIGN1cnJFbGVtID0gbWF4RWxl
bS0+bmV4dDsKLSAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsK
LSAgICAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVtKSB7Ci0gICAgICAgICAgICAgICAg
SFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBjdXJyRWxlbS0+bmV4dDsKLSAgICAgICAgICAgICAg
ICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+dGFnTmFtZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKLSAgICAgICAgICAgICAgICAg
ICAgcHJldkVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+
bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwotICAgICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+ZGlk
UmVmTm9kZSA9IGN1cnJFbGVtLT5kaWRSZWZOb2RlOwotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgY3VyckVsZW07Ci0gICAgICAgICAgICAgICAgICAgIG1fdHJlZURlcHRoLS07Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZXZFbGVtID0gY3VyckVsZW07
Ci0gICAgICAgICAgICAgICAgY3VyckVsZW0gPSBuZXh0RWxlbTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZW9wZW4gcmVzaWR1YWwgdGFncyBpbiBiZXR3ZWVu
IG1heEVsZW0gYW5kIGVsZW0uICBBbiBleGFtcGxlIG9mIHRoaXMgY2FzZSBpczoKLSAgICAgICAg
ICAgIC8vIDxmb250PjxpPk1vbzxwPkZvbzwvZm9udD4uCi0gICAgICAgICAgICAvLyBJbiB0aGlz
IGNhc2UsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBwYXJ0IGJlZm9yZSB0aGUgPHA+IGludG86
Ci0gICAgICAgICAgICAvLyA8Zm9udD48aT5Nb288L2k+PC9mb250PjxpPgotICAgICAgICAgICAg
Ly8gc28gdGhhdCB0aGUgPGk+IHdpbGwgcmVtYWluIG9wZW4uICBUaGlzIGludm9sdmVzIHRoZSBt
b2RpZmljYXRpb24gb2YgZWxlbWVudHMKLSAgICAgICAgICAgIC8vIGluIHRoZSBibG9jayBzdGFj
ay4KLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHNvIGFmZmVjdCBob3cgd2UgdWx0aW1hdGVs
eSByZXBhcmVudCB0aGUgYmxvY2ssIHNpbmNlIHdlIHdhbnQgaXQgdG8gZW5kIHVwCi0gICAgICAg
ICAgICAvLyB1bmRlciB0aGUgcmVvcGVuZWQgcmVzaWR1YWwgdGFncyAoZS5nLiwgdGhlIDxpPiBp
biB0aGUgYWJvdmUgZXhhbXBsZS4pCi0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldk5vZGUg
PSAwOwotICAgICAgICAgICAgY3VyckVsZW0gPSBtYXhFbGVtOwotICAgICAgICAgICAgd2hpbGUg
KGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFsRWxlbSkgewotICAgICAgICAgICAgICAgIGlmIChp
c1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmxvY2FsTmFtZSgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGNhbGwgcmVsZWFzZVJlZiB0byBnZXQgYSByYXcgcG9pbnRlciBz
aW5jZSB3ZSBwbGFuIHRvIGhhbmQgb3ZlciBvd25lcnNoaXAgdG8gY3VyckVsZW0uCi0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGN1cnJOb2RlID0gY3VyckVsZW0tPm5vZGUtPmNsb25lTm9kZShm
YWxzZSkucmVsZWFzZVJlZigpOwotICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihSZXNp
ZHVhbFN0eWxlRXJyb3IsICZjdXJyTm9kZS0+bG9jYWxOYW1lKCkpOwotICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHN0YWNrIGVsZW1lbnQncyBub2RlIHRvIHBvaW50IHRv
IHRoZSBjbG9uZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0YWNrIGVsZW1lbnQgYWRv
cHRzIHRoZSByZWZlcmVuY2Ugd2Ugb2J0YWluZWQgYWJvdmUgYnkgY2FsbGluZyByZWxlYXNlKCku
Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5kZXJlZk5vZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY3VyckVsZW0tPm5vZGUgPSBjdXJyTm9kZTsKLSAgICAgICAgICAgICAgICAgICAg
Y3VyckVsZW0tPmRpZFJlZk5vZGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEF0
dGFjaCB0aGUgcHJldmlvdXMgbm9kZSBhcyBhIGNoaWxkIG9mIHRoaXMgbmV3IG5vZGUuCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1
cnJOb2RlLT5hcHBlbmRDaGlsZChwcmV2Tm9kZSwgZWMpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIC8vIFRoZSBuZXcgcGFyZW50IGZvciB0aGUgYmxvY2sgZWxlbWVudCBpcyBnb2luZyB0byBi
ZSB0aGUgaW5uZXJtb3N0IGNsb25lLgotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxl
bSA9IGN1cnJOb2RlOyAgLy8gRklYTUU6IFdlIHNoaWZ0ZWQgcGFyZW50RWxlbSB0byBiZSBhIHJl
c2lkdWFsIGlubGluZS4gIFdlIG5ldmVyIGNoZWNrZWQgdG8gc2VlIGlmIGJsb2NrRWxlbSBjb3Vs
ZCBiZSBsZWdhbGx5IHBsYWNlZCBpbnNpZGUgdGhlIGlubGluZSB0aG91Z2guCi0KLSAgICAgICAg
ICAgICAgICAgICAgcHJldk5vZGUgPSBjdXJyTm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBjaGFpbiBvZiBuZXcgcmVzaWR1YWwgc3R5
bGUgZWxlbWVudHMgaWYgb25lIGV4aXN0cy4KLSAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkKLSAg
ICAgICAgICAgICAgICBlbGVtLT5ub2RlLT5hcHBlbmRDaGlsZChwcmV2Tm9kZSwgZWMpOyAgLy8g
RklYTUU6IFRoaXMgYXBwZW5kIGNhbiByZXN1bHQgaW4gd2VpcmQgc3R1ZmYgaGFwcGVuaW5nLCBs
aWtlIGFuIGlubGluZSBjaGFpbiBiZWluZyBwdXQgaW50byBhIHRhYmxlIHNlY3Rpb24uCi0gICAg
ICAgIH0KLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgYmxvY2sgaXMgc3RpbGwgaW4gdGhlIHRy
ZWUuIElmIGl0IGlzbid0LCB0aGVuIHdlIGRvbid0Ci0gICAgICAgIC8vIHdhbnQgdG8gcmVtb3Zl
IGl0IGZyb20gaXRzIHBhcmVudCAodGhhdCB3b3VsZCBjcmFzaCkgb3IgaW5zZXJ0IGl0IGludG8K
LSAgICAgICAgLy8gYSBuZXcgcGFyZW50IGxhdGVyLiBTZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OAotICAgICAgICBib29sIGlzQmxvY2tTdGlsbEluVHJlZSA9
IGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBh
IGNsb25lIG9mIHxyZXNpZHVhbEVsZW18IGFuZCBwbGFjZSBpdCBqdXN0IGluc2lkZSB8YmxvY2tF
bGVtfC4KLSAgICAgICAgLy8gQWxsIGNvbnRlbnQgb2YgfGJsb2NrRWxlbXwgaXMgcmVwYXJlbnRl
ZCB0byBiZSB1bmRlciB0aGlzIGNsb25lLiAgV2UgdGhlbgotICAgICAgICAvLyByZXBhcmVudCB8
YmxvY2tFbGVtfCB1c2luZyByZWFsIERPTSBjYWxscyBzbyB0aGF0IGF0dGFjaG1lbnQvZGV0YWNo
bWVudCB3aWxsCi0gICAgICAgIC8vIGJlIHBlcmZvcm1lZCB0byBmaXggdXAgdGhlIHJlbmRlcmlu
ZyB0cmVlLgotICAgICAgICAvLyBTbyBmb3IgdGhpcyBleGFtcGxlOiA8Yj4uLi48cD5Gb288L2I+
R29vPC9wPgotICAgICAgICAvLyBUaGUgZW5kIHJlc3VsdCB3aWxsIGJlOiA8Yj4uLi48L2I+PHA+
PGI+Rm9vPC9iPkdvbzwvcD4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU3RlcCAxOiBSZW1vdmUg
fGJsb2NrRWxlbXwgZnJvbSBpdHMgcGFyZW50LCBkb2luZyBhIGJhdGNoIGRldGFjaCBvZiBhbGwg
dGhlIGtpZHMuCi0gICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRyZWUpCi0gICAgICAgICAgICBi
bG9ja0VsZW0tPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoYmxvY2tFbGVtLCBlYyk7Ci0KLSAg
ICAgICAgTm9kZSogbmV3Tm9kZVB0ciA9IDA7Ci0gICAgICAgIGlmIChibG9ja0VsZW0tPmZpcnN0
Q2hpbGQoKSkgewotICAgICAgICAgICAgLy8gU3RlcCAyOiBDbG9uZSB8cmVzaWR1YWxFbGVtfC4K
LSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gcmVzaWR1YWxFbGVtLT5jbG9uZU5v
ZGUoZmFsc2UpOyAvLyBTaGFsbG93IGNsb25lLiBXZSBkb24ndCBwaWNrIHVwIHRoZSBzYW1lIGtp
ZHMuCi0gICAgICAgICAgICBuZXdOb2RlUHRyID0gbmV3Tm9kZS5nZXQoKTsKLSAgICAgICAgICAg
IHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5ld05vZGUtPmxvY2FsTmFtZSgpKTsK
LQotICAgICAgICAgICAgLy8gU3RlcCAzOiBQbGFjZSB8YmxvY2tFbGVtfCdzIGNoaWxkcmVuIHVu
ZGVyIHxuZXdOb2RlfC4gIFJlbW92ZSBhbGwgb2YgdGhlIGNoaWxkcmVuIG9mIHxibG9ja0VsZW18
Ci0gICAgICAgICAgICAvLyBiZWZvcmUgd2UndmUgcHV0IHxuZXdFbGVtfCBpbnRvIHRoZSBkb2N1
bWVudC4gIFRoYXQgd2F5IHdlJ2xsIG9ubHkgZG8gb25lIGF0dGFjaG1lbnQgb2YgYWxsCi0gICAg
ICAgICAgICAvLyB0aGUgbmV3IGNvbnRlbnQgKGluc3RlYWQgb2YgYSBidW5jaCBvZiBpbmRpdmlk
dWFsIGF0dGFjaG1lbnRzKS4KLSAgICAgICAgICAgIE5vZGUqIGN1cnJOb2RlID0gYmxvY2tFbGVt
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY3Vyck5vZGUpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBuZXh0Tm9kZSA9IGN1cnJOb2RlLT5uZXh0U2libGluZygpOwotICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGN1cnJOb2RlLCBlYyk7Ci0gICAgICAgICAg
ICAgICAgY3Vyck5vZGUgPSBuZXh0Tm9kZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gU3RlcCA0OiBQbGFjZSB8bmV3Tm9kZXwgdW5kZXIgfGJsb2NrRWxlbXwuICB8YmxvY2tFbGVt
fCBpcyBzdGlsbCBvdXQgb2YgdGhlIGRvY3VtZW50LCBzbyBubwotICAgICAgICAgICAgLy8gYXR0
YWNobWVudCBjYW4gb2NjdXIgeWV0LgotICAgICAgICAgICAgYmxvY2tFbGVtLT5hcHBlbmRDaGls
ZChuZXdOb2RlLnJlbGVhc2UoKSwgZWMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZp
bmlzaGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBTdGVwIDU6IFJlcGFyZW50IHxibG9ja0VsZW18
LiAgTm93IHRoZSBmdWxsIGF0dGFjaG1lbnQgb2YgdGhlIGZpeGVkIHVwIHRyZWUgdGFrZXMgcGxh
Y2UuCi0gICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRyZWUpCi0gICAgICAgICAgICBwYXJlbnRF
bGVtLT5hcHBlbmRDaGlsZChibG9ja0VsZW0sIGVjKTsKLQotICAgICAgICAvLyBTdGVwIDY6IFB1
bGwgfGVsZW18IG91dCBvZiB0aGUgc3RhY2ssIHNpbmNlIGl0IGlzIG5vIGxvbmdlciBlbmNsb3Np
bmcgdXMuICBBbHNvIHVwZGF0ZQotICAgICAgICAvLyB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHByZXZpb3VzIHN0YWNrIGVsZW1lbnQgc28gdGhhdCB3aGVuIGl0IGdldHMgcG9wcGVkLAot
ICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2UgdGhlIHJlc2lkdWFsIGVsZW1lbnQgdGhlIG5leHQg
Y3VycmVudCBub2RlLgotICAgICAgICBIVE1MU3RhY2tFbGVtKiBjdXJyRWxlbSA9IG1heEVsZW07
Ci0gICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gMDsKLSAgICAgICAgd2hpbGUgKGN1
cnJFbGVtICE9IGVsZW0pIHsKLSAgICAgICAgICAgIHByZXZFbGVtID0gY3VyckVsZW07Ci0gICAg
ICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAgICB9Ci0gICAgICAgIHBy
ZXZFbGVtLT5uZXh0ID0gZWxlbS0+bmV4dDsKLSAgICAgICAgcHJldkVsZW0tPmRlcmVmTm9kZSgp
OwotICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGVsZW0tPm5vZGU7Ci0gICAgICAgIHByZXZFbGVt
LT5kaWRSZWZOb2RlID0gZWxlbS0+ZGlkUmVmTm9kZTsKLSAgICAgICAgbV90cmVlRGVwdGgtLTsK
LSAgICAgICAgaWYgKCFmaW5pc2hlZCkgewotICAgICAgICAgICAgLy8gUmVwdXJwb3NlIHxlbGVt
fCB0byByZXByZXNlbnQgfG5ld05vZGV8IGFuZCBpbnNlcnQgaXQgYXQgdGhlIGFwcHJvcHJpYXRl
IHBvc2l0aW9uCi0gICAgICAgICAgICAvLyBpbiB0aGUgc3RhY2suIFdlIGRvIG5vdCBkbyB0aGlz
IGZvciB0aGUgaW5uZXJtb3N0IGJsb2NrLCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgbmV3Ci0g
ICAgICAgICAgICAvLyBub2RlIGlzIGVmZmVjdGl2ZWx5IG5vIGxvbmdlciBvcGVuLgotICAgICAg
ICAgICAgZWxlbS0+bmV4dCA9IG1heEVsZW07Ci0gICAgICAgICAgICBlbGVtLT5ub2RlID0gcHJl
dk1heEVsZW0tPm5vZGU7Ci0gICAgICAgICAgICBlbGVtLT5kaWRSZWZOb2RlID0gcHJldk1heEVs
ZW0tPmRpZFJlZk5vZGU7Ci0gICAgICAgICAgICBlbGVtLT5zdHJheVRhYmxlQ29udGVudCA9IGZh
bHNlOwotICAgICAgICAgICAgcHJldk1heEVsZW0tPm5leHQgPSBlbGVtOwotICAgICAgICAgICAg
QVNTRVJUKG5ld05vZGVQdHIpOwotICAgICAgICAgICAgcHJldk1heEVsZW0tPm5vZGUgPSBuZXdO
b2RlUHRyOwotICAgICAgICAgICAgbmV3Tm9kZVB0ci0+cmVmKCk7Ci0gICAgICAgICAgICBwcmV2
TWF4RWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7Ci0gICAgICAgICAgICBtX3RyZWVEZXB0aCsrOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZSBlbGVtOwotICAgIH0KLQotICAgIC8v
IEZJWE1FOiBJZiB3ZSBldmVyIG1ha2UgYSBjYXNlIGxpa2UgdGhpcyB3b3JrOgotICAgIC8vIDx0
YWJsZT48Yj48aT48Zm9ybT48L2I+PC9mb3JtPjwvaT48L3RhYmxlPgotICAgIC8vIFRoZW4gdGhp
cyBjaGVjayB3aWxsIGJlIHRvbyBzaW1wbGlzdGljLiAgUmlnaHQgbm93IHRoZSA8aT48Zm9ybT4g
Y2hhaW4gd2lsbCBlbmQgdXAgaW5zaWRlIHRoZSA8dGJvZHk+LCB3aGljaCBpcyBwcmV0dHkgY3Jh
enkuCi0gICAgaWYgKHN0cmF5VGFibGVDb250ZW50KQotICAgICAgICBtX2luU3RyYXlUYWJsZUNv
bnRlbnQtLTsKLQotICAgIC8vIFN0ZXAgNzogUmVvcGVuIGludGVybWVkaWF0ZSBpbmxpbmVzLCBl
LmcuLCA8Yj48cD48aT5Gb288L2I+R29vPC9wPi4KLSAgICAvLyBJbiB0aGUgYWJvdmUgZXhhbXBs
ZSwgR29vIHNob3VsZCBzdGF5IGl0YWxpYy4KLSAgICAvLyBXZSBjYXAgdGhlIG51bWJlciBvZiB0
YWdzIHdlJ3JlIHdpbGxpbmcgdG8gcmVvcGVuIGJhc2VkIG9mZiBjUmVzaWR1YWxTdHlsZU1heERl
cHRoLgotICAgIAotICAgIEhUTUxTdGFja0VsZW0qIGN1cnIgPSBtX2Jsb2NrU3RhY2s7Ci0gICAg
SFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0gMDsKLSAgICB1bnNpZ25lZCBzdGFj
a0RlcHRoID0gMTsKLSAgICB1bnNpZ25lZCByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKLSAgICB3
aGlsZSAoY3VyciAmJiBjdXJyICE9IG1heEVsZW0pIHsKLSAgICAgICAgLy8gV2Ugd2lsbCBhY3R1
YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCi0gICAgICAgIC8vIGFmdGVyIHdl
IGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KLSAgICAgICAgaWYgKGlz
UmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1lKSAmJiBzdGFja0RlcHRoKysgPCBjUmVzaWR1
YWxTdHlsZU1heERlcHRoKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1
c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCi0gICAgICAgICAg
ICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2YXJp
YWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCi0gICAgICAgICAgICAvLyBmcm9tIGlubmVybW9z
dCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVl
ZCB0byByZW9wZW4KLSAgICAgICAgICAgIC8vIGZyb20gdGhlIG91dGVybW9zdCB0byB0aGUgaW5u
ZXJtb3N0LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sgd2lsbCBlbmQgdXAgcG9pbnRpbmcKLSAg
ICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFnIHdlIG5lZWQgdG8gcmVvcGVuLgotICAg
ICAgICAgICAgLy8gV2UgYWxzbyBzZXQgY3Vyci0+bm9kZSB0byBiZSB0aGUgYWN0dWFsIGVsZW1l
bnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVkIGluCi0gICAgICAgICAgICAvLyBj
dXJyLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91bGQgcG9wIHRvIHdoZW4g
dGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCi0gICAgICAgICAgICAvLyB0aGUgc3RhY2suCi0g
ICAgICAgICAgICBpZiAocmVzaWR1YWxTdHlsZVN0YWNrICYmIGN1cnItPnRhZ05hbWUgPT0gcmVz
aWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYmIGN1cnItPm5vZGUtPmF0dHJpYnV0ZXMoKS0+bWFw
c0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0YWNrLT5ub2RlLT5hdHRyaWJ1dGVzKCkpKQotICAg
ICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQrKzsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKLQotICAgICAgICAgICAgaWYg
KHJlZHVuZGFudFN0eWxlQ291bnQgPCBjTWF4UmVkdW5kYW50VGFnRGVwdGgpCi0gICAgICAgICAg
ICAgICAgbW92ZU9uZUJsb2NrVG9TdGFjayhyZXNpZHVhbFN0eWxlU3RhY2spOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLQotICAgICAgICBjdXJyID0gbV9ibG9ja1N0YWNr
OwotICAgIH0KLQotICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFj
aywgMCk7IC8vIFN0cmF5IHRhYmxlIGNvbnRlbnQgY2FuJ3QgYmUgYW4gaXNzdWUgaGVyZSwgc2lu
Y2Ugc29tZSBlbGVtZW50IGFib3ZlIHdpbGwgYWx3YXlzIGJlY29tZSB0aGUgcm9vdCBvZiBuZXcg
c3RyYXkgdGFibGUgY29udGVudC4KLQotICAgIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3Nz
QmxvY2tzID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVv
cGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgTm9kZSogbWFsZm9ybWVk
VGFibGVQYXJlbnQpCi17Ci0gICAgLy8gTG9vcCBmb3IgZWFjaCB0YWcgdGhhdCBuZWVkcyB0byBi
ZSByZW9wZW5lZC4KLSAgICB3aGlsZSAoZWxlbSkgewotICAgICAgICAvLyBDcmVhdGUgYSBzaGFs
bG93IGNsb25lIG9mIHRoZSBET00gbm9kZSBmb3IgdGhpcyBlbGVtZW50LgotICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV3Tm9kZSA9IGVsZW0tPm5vZGUtPmNsb25lTm9kZShmYWxzZSk7IAotICAgICAg
ICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZuZXdOb2RlLT5sb2NhbE5hbWUoKSk7
Ci0KLSAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgbm9kZS4gSW4gdGhlIG1hbGZvcm1lZCB0YWJs
ZSBjYXNlLCB3ZSBuZWVkIHRvIGluc2VydCBiZWZvcmUgdGhlIHRhYmxlLAotICAgICAgICAvLyB3
aGljaCB3aWxsIGJlIHRoZSBsYXN0IGNoaWxkLgotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICAgICAgaWYgKG1hbGZvcm1lZFRhYmxlUGFyZW50KQotICAgICAgICAgICAgbWFsZm9y
bWVkVGFibGVQYXJlbnQtPmluc2VydEJlZm9yZShuZXdOb2RlLCBtYWxmb3JtZWRUYWJsZVBhcmVu
dC0+bGFzdENoaWxkKCksIGVjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jdXJyZW50
LT5hcHBlbmRDaGlsZChuZXdOb2RlLCBlYyk7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyBpdCByZWFs
bHkgT0sgdG8gaWdub3JlIHRoZSBleGNlcHRpb25zIGhlcmU/Ci0KLSAgICAgICAgLy8gTm93IHB1
c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBmb3IgdGhpcyBub2RlIHdlIGp1c3QgY3JlYXRlZC4KLSAg
ICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVsKTsKLSAgICAgICAgbmV3
Tm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBTZXQgb3VyIHN0cmF5
VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcg
YWxzbyBrbm93cwotICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJs
ZS4KLSAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IG1hbGZvcm1lZFRh
YmxlUGFyZW50ICE9IDA7Ci0gICAgICAgIGlmIChtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250
ZW50KQotICAgICAgICAgICAgbV9pblN0cmF5VGFibGVDb250ZW50Kys7Ci0KLSAgICAgICAgLy8g
Q2xlYXIgb3VyIG1hbGZvcm1lZCB0YWJsZSBwYXJlbnQgdmFyaWFibGUuCi0gICAgICAgIG1hbGZv
cm1lZFRhYmxlUGFyZW50ID0gMDsKLQotICAgICAgICAvLyBVcGRhdGUgfGN1cnJlbnR8IG1hbnVh
bGx5IHRvIHBvaW50IHRvIHRoZSBuZXcgbm9kZS4KLSAgICAgICAgc2V0Q3VycmVudChuZXdOb2Rl
LmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEFkdmFuY2UgdG8gdGhlIG5leHQgdGFnIHRo
YXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCi0gICAgICAgIEhUTUxTdGFja0VsZW0qIG5leHQgPSBl
bGVtLT5uZXh0OwotICAgICAgICBlbGVtLT5kZXJlZk5vZGUoKTsKLSAgICAgICAgZGVsZXRlIGVs
ZW07Ci0gICAgICAgIGVsZW0gPSBuZXh0OwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQg
bGV2ZWwpCi17Ci0gICAgbV9ibG9ja1N0YWNrID0gbmV3IEhUTUxTdGFja0VsZW0odGFnTmFtZSwg
bGV2ZWwsIG1fY3VycmVudCwgbV9kaWRSZWZDdXJyZW50LCBtX2Jsb2NrU3RhY2spOwotICAgIGlm
IChsZXZlbCA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpCi0gICAgICAgIG1fYmxvY2tzSW5T
dGFjaysrOwotICAgIG1fdHJlZURlcHRoKys7Ci0gICAgbV9kaWRSZWZDdXJyZW50ID0gZmFsc2U7
Ci0gICAgaWYgKHRhZ05hbWUgPT0gcFRhZykKLSAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUg
PSBJblNjb3BlOwotICAgIGVsc2UgaWYgKGlzU2NvcGluZ1RhZyh0YWdOYW1lKSkKLSAgICAgICAg
bV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwotfQotCi12b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9v
bCByZXBvcnRFcnJvcnMpCi17Ci0gICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFj
azsKLQotICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiBlbGVtICYmICFtX3BhcnNlclF1aXJrcy0+
c2hvdWxkUG9wQmxvY2soZWxlbS0+dGFnTmFtZSwgdGFnTmFtZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGludCBtYXhMZXZlbCA9IDA7Ci0KLSAgICB3aGlsZSAoZWxlbSAmJiAoZWxlbS0+dGFn
TmFtZSAhPSB0YWdOYW1lKSkgewotICAgICAgICBpZiAobWF4TGV2ZWwgPCBlbGVtLT5sZXZlbCkK
LSAgICAgICAgICAgIG1heExldmVsID0gZWxlbS0+bGV2ZWw7Ci0gICAgICAgIGVsZW0gPSBlbGVt
LT5uZXh0OwotICAgIH0KLQotICAgIGlmICghZWxlbSkgewotICAgICAgICBpZiAocmVwb3J0RXJy
b3JzKQotICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlDbG9zZVRhZ0Vycm9yLCAmdGFnTmFt
ZSwgMCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobWF4TGV2ZWwg
PiBlbGVtLT5sZXZlbCkgewotICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0Y2ggYmVjYXVzZSB0aGUg
dGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAotICAgICAgICAvLyA8Yj48cD5Gb288
L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCi0gICAgICAgIGlmICghaXNSZXNpZHVh
bFN0eWxlVGFnKHRhZ05hbWUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICByZXR1cm4g
aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKGVsZW0pOwotICAgIH0KLQot
ICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGVs
ZW0tPnRhZ05hbWUpOwotICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVTdGFjayA9IDA7
Ci0gICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwotICAgIAotICAgIGVsZW0gPSBt
X2Jsb2NrU3RhY2s7Ci0gICAgdW5zaWduZWQgc3RhY2tEZXB0aCA9IDE7Ci0gICAgdW5zaWduZWQg
cmVkdW5kYW50U3R5bGVDb3VudCA9IDA7Ci0gICAgd2hpbGUgKGVsZW0pIHsKLSAgICAgICAgaWYg
KGVsZW0tPnRhZ05hbWUgPT0gdGFnTmFtZSkgewotICAgICAgICAgICAgaW50IHN0cmF5VGFibGUg
PSBtX2luU3RyYXlUYWJsZUNvbnRlbnQ7Ci0gICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotICAg
ICAgICAgICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgdGhl
IHJvb3Qgb2Ygc29tZSBtYWxmb3JtZWQgY29udGVudCBqdXN0IGluc2lkZSBhbiBpbXBsaWNpdCBv
cgotICAgICAgICAgICAgLy8gZXhwbGljaXQgPHRib2R5PiBvciA8dHI+LgotICAgICAgICAgICAg
Ly8gSWYgd2UgZW5kIHVwIG5lZWRpbmcgdG8gcmVvcGVuIHJlc2lkdWFsIHN0eWxlIHRhZ3MsIHRo
ZSByb290IG9mIHRoZSByZW9wZW5lZCBjaGFpbgotICAgICAgICAgICAgLy8gbXVzdCBhbHNvIGtu
b3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVudCBpbnNpZGUgYSA8dGJv
ZHk+Lzx0cj4uCi0gICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAobV9pblN0cmF5VGFibGVD
b250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7Ci0gICAgICAgICAg
ICAgICAgTm9kZSogY3VyciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3Vy
ciAmJiAhY3Vyci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgbWFsZm9ybWVkVGFibGVQ
YXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2N1cnJlbnRGb3JtRWxl
bWVudCAmJiBlbGVtLT50YWdOYW1lID09IGZvcm1UYWcpCi0gICAgICAgICAgICAgICAgLy8gQSA8
Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChhbmQgdGhpcyBpcwotICAgICAgICAg
ICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBhdHRyaWJ1dGUgb24gdGhlIGZvcm0g
dG8gY2xlYXIgb3V0IGl0cwotICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBtYXJnaW4uCi0gICAg
ICAgICAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQtPnNldE1hbGZvcm1lZCh0cnVlKTsKLQot
ICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3BlbmluZwotICAgICAgICAg
ICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgot
ICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1YWxTdHlsZVRhZyhl
bGVtLT50YWdOYW1lKSAmJiBzdGFja0RlcHRoKysgPCBjUmVzaWR1YWxTdHlsZU1heERlcHRoKSB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVs
ZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQotICAgICAgICAgICAgICAgIC8vIHN0cnVj
dCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIElu
c3RlYWQgb2YgY2hhaW5pbmcKLSAgICAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBv
dXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byBy
ZW9wZW4KLSAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvdXRlcm1vc3QgdG8gdGhlIGlubmVy
bW9zdCwgaS5lLiwgcmVzaWR1YWxTdHlsZVN0YWNrIHdpbGwgZW5kIHVwIHBvaW50aW5nCi0gICAg
ICAgICAgICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcgd2UgbmVlZCB0byByZW9wZW4uCi0g
ICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgZWxlbS0+bm9kZSB0byBiZSB0aGUgYWN0dWFs
IGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVkIGluCi0gICAgICAgICAg
ICAgICAgLy8gZWxlbS0+aWQgcmF0aGVyIHRoYW4gdGhlIG5vZGUgdGhhdCB5b3Ugc2hvdWxkIHBv
cCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9mZgotICAgICAgICAgICAgICAgIC8v
IHRoZSBzdGFjay4KLSAgICAgICAgICAgICAgICBpZiAocmVzaWR1YWxTdHlsZVN0YWNrICYmIGVs
ZW0tPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYmIGVsZW0tPm5vZGUt
PmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0YWNrLT5ub2RlLT5h
dHRyaWJ1dGVzKCkpKQotICAgICAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50Kys7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHls
ZUNvdW50ID0gMDsKLQotICAgICAgICAgICAgICAgIGlmIChyZWR1bmRhbnRTdHlsZUNvdW50IDwg
Y01heFJlZHVuZGFudFRhZ0RlcHRoKQotICAgICAgICAgICAgICAgICAgICBtb3ZlT25lQmxvY2tU
b1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgIGVsZW0gPSBtX2Jsb2NrU3RhY2s7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhyZXNpZHVh
bFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKLX0KLQotaW5saW5lIEhUTUxTdGFj
a0VsZW0qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcE9uZUJsb2NrQ29tbW9uKCkKLXsK
LSAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwotCi0gICAgLy8gRm9ybSBl
bGVtZW50cyByZXN0b3JlIHRoZWlyIHN0YXRlIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzLgot
ICAgIC8vIEFsc28sIGEgZmV3IGVsZW1lbnRzICg8YXBwbGV0PiwgPG9iamVjdD4pIG5lZWQgdG8g
a25vdyB3aGVuIGFsbCBjaGlsZCBlbGVtZW50cyAoPHBhcmFtPnMpIGFyZSBhdmFpbGFibGUuCi0g
ICAgaWYgKG1fY3VycmVudCAmJiBlbGVtLT5ub2RlICE9IG1fY3VycmVudCkKLSAgICAgICAgbV9j
dXJyZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKLQotICAgIGlmIChtX2Jsb2NrU3RhY2st
PmxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkgewotICAgICAgICBBU1NFUlQobV9i
bG9ja3NJblN0YWNrID4gMCk7Ci0gICAgICAgIG1fYmxvY2tzSW5TdGFjay0tOwotICAgIH0KLSAg
ICBtX3RyZWVEZXB0aC0tOwotICAgIG1fYmxvY2tTdGFjayA9IGVsZW0tPm5leHQ7Ci0gICAgbV9j
dXJyZW50ID0gZWxlbS0+bm9kZTsKLSAgICBtX2RpZFJlZkN1cnJlbnQgPSBlbGVtLT5kaWRSZWZO
b2RlOwotCi0gICAgaWYgKGVsZW0tPnN0cmF5VGFibGVDb250ZW50KQotICAgICAgICBtX2luU3Ry
YXlUYWJsZUNvbnRlbnQtLTsKLQotICAgIGlmIChlbGVtLT50YWdOYW1lID09IHBUYWcpCi0gICAg
ICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKLSAgICBlbHNlIGlmIChpc1Nj
b3BpbmdUYWcoZWxlbS0+dGFnTmFtZSkpCi0gICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0g
VW5rbm93bjsKLQotICAgIHJldHVybiBlbGVtOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnBvcE9uZUJsb2NrKCkKLXsKLSAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBub2Rl
IGJlZm9yZSBwb3BPbmVCbG9ja0NvbW1vbiBvdmVyd3JpdGVzIGl0LgotICAgIE5vZGUqIGxhc3RD
dXJyZW50ID0gbV9jdXJyZW50OwotICAgIGJvb2wgZGlkUmVmTGFzdEN1cnJlbnQgPSBtX2RpZFJl
ZkN1cnJlbnQ7Ci0KLSAgICBkZWxldGUgcG9wT25lQmxvY2tDb21tb24oKTsKLQotICAgIGlmIChk
aWRSZWZMYXN0Q3VycmVudCkKLSAgICAgICAgbGFzdEN1cnJlbnQtPmRlcmVmKCk7Ci19Ci0KLXZv
aWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9uZUJsb2NrVG9TdGFjayhIVE1MU3Rh
Y2tFbGVtKiYgaGVhZCkKLXsKLSAgICAvLyBXZSdsbCBiZSB1c2luZyB0aGUgc3RhY2sgZWxlbWVu
dCB3ZSdyZSBwb3BwaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgLy8gU2VlIHRo
ZSB0d28gY2FsbGVycyBmb3IgZGV0YWlscy4KLQotICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IG5v
ZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCi0gICAgTm9kZSogbGFz
dEN1cnJlbnQgPSBtX2N1cnJlbnQ7Ci0gICAgYm9vbCBkaWRSZWZMYXN0Q3VycmVudCA9IG1fZGlk
UmVmQ3VycmVudDsKLQotICAgIC8vIFBvcCB0aGUgYmxvY2ssIGJ1dCBkb24ndCBkZXJlZiB0aGUg
Y3VycmVudCBub2RlIGFzIHBvcE9uZUJsb2NrIGRvZXMgYmVjYXVzZQotICAgIC8vIHdlJ2xsIGJl
IHVzaW5nIHRoZSBwb2ludGVyIGluIHRoZSBuZXcgc3RhY2sgZWxlbWVudC4KLSAgICBIVE1MU3Rh
Y2tFbGVtKiBlbGVtID0gcG9wT25lQmxvY2tDb21tb24oKTsKLQotICAgIC8vIFRyYW5zZmVyIHRo
ZSBjdXJyZW50IG5vZGUgaW50byB0aGUgc3RhY2sgZWxlbWVudC4KLSAgICAvLyBObyBuZWVkIHRv
IGRlcmVmIHRoZSBvbGQgZWxlbS0+bm9kZSBiZWNhdXNlIHBvcE9uZUJsb2NrQ29tbW9uIHRyYW5z
ZmVycmVkCi0gICAgLy8gaXQgaW50byB0aGUgbV9jdXJyZW50L21fZGlkUmVmQ3VycmVudCBmaWVs
ZHMuCi0gICAgZWxlbS0+bm9kZSA9IGxhc3RDdXJyZW50OwotICAgIGVsZW0tPmRpZFJlZk5vZGUg
PSBkaWRSZWZMYXN0Q3VycmVudDsKLSAgICBlbGVtLT5uZXh0ID0gaGVhZDsKLSAgICBoZWFkID0g
ZWxlbTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjaGVja0lmSGFzUEVs
ZW1lbnRJblNjb3BlKCkKLXsKLSAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IE5vdEluU2NvcGU7
Ci0gICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoZWxl
bSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUgPSBlbGVtLT50YWdOYW1l
OwotICAgICAgICBpZiAodGFnTmFtZSA9PSBwVGFnKSB7Ci0gICAgICAgICAgICBtX2hhc1BFbGVt
ZW50SW5TY29wZSA9IEluU2NvcGU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBlbGVtID0gZWxlbS0+bmV4dDsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6cG9wSW5saW5lQmxvY2tzKCkKLXsKLSAgICB3aGlsZSAobV9ibG9ja1N0YWNrICYm
IGlzSW5saW5lKG1fY3VycmVudCkpCi0gICAgICAgIHBvcE9uZUJsb2NrKCk7Ci19Ci0KLXZvaWQg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJlZUJsb2NrKCkKLXsKLSAgICB3aGlsZSAobV9i
bG9ja1N0YWNrKQotICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIEFTU0VSVCghbV9ibG9ja3NJ
blN0YWNrKTsKLSAgICBBU1NFUlQoIW1fdHJlZURlcHRoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpjcmVhdGVIZWFkKCkKLXsKLSAgICBpZiAobV9oZWFkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIW1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpICYmICFt
X2lzUGFyc2luZ0ZyYWdtZW50KSB7Ci0gICAgICAgIGluc2VydE5vZGUoSFRNTEh0bWxFbGVtZW50
OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICBBU1NFUlQobV9kb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCkgfHwgbV9pc1BhcnNpbmdGcmFnbWVudCk7Ci0gICAgfQotCi0gICAg
bV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0KLSAgICBpZiAo
bV9pc1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFRNTEVsZW1lbnQq
IGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPmluc2VydEJlZm9yZShtX2hlYWQuZ2V0
KCksIGJvZHksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIG1faGVhZCA9IDA7Ci0gICAgICAg
IAotICAgIC8vIElmIHRoZSBib2R5IGRvZXMgbm90IGV4aXN0IHlldCwgdGhlbiB0aGUgPGhlYWQ+
IHNob3VsZCBiZSBwdXNoZWQgYXMgdGhlIGN1cnJlbnQgYmxvY2suCi0gICAgaWYgKG1faGVhZCAm
JiAhYm9keSkgewotICAgICAgICBwdXNoQmxvY2sobV9oZWFkLT5sb2NhbE5hbWUoKSwgbV9oZWFk
LT50YWdQcmlvcml0eSgpKTsKLSAgICAgICAgc2V0Q3VycmVudChtX2hlYWQuZ2V0KCkpOwotICAg
IH0KLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5k
bGVJc2luZGV4KFRva2VuKiB0KQotewotICAgIFJlZlB0cjxOb2RlPiBuID0gSFRNTERpdkVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLQotICAgIE5hbWVkTm9kZU1hcCogYXR0cnMgPSB0LT5h
dHRycy5nZXQoKTsKLQotICAgIFJlZlB0cjxIVE1MSXNJbmRleEVsZW1lbnQ+IGlzSW5kZXggPSBI
VE1MSXNJbmRleEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCBtX2N1cnJlbnRGb3JtRWxlbWVu
dC5nZXQoKSk7Ci0gICAgaXNJbmRleC0+c2V0QXR0cmlidXRlTWFwKGF0dHJzKTsKLSAgICBpc0lu
ZGV4LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsICJraHRtbF9pc2luZGV4Iik7Ci0KLSAgICBTdHJp
bmcgdGV4dCA9IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpOwotICAgIGlmIChhdHRycykg
ewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0ocHJv
bXB0QXR0cikpCi0gICAgICAgICAgICB0ZXh0ID0gYS0+dmFsdWUoKS5zdHJpbmcoKSArICIgIjsK
LSAgICAgICAgdC0+YXR0cnMgPSAwOwotICAgIH0KLQotICAgIG4tPmFkZENoaWxkKEhUTUxIUkVs
ZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KSk7Ci0gICAgbi0+YWRkQ2hpbGQoVGV4dDo6Y3JlYXRl
KG1fZG9jdW1lbnQsIHRleHQpKTsKLSAgICBuLT5hZGRDaGlsZChpc0luZGV4LnJlbGVhc2UoKSk7
Ci0gICAgbi0+YWRkQ2hpbGQoSFRNTEhSRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpKTsKLQot
ICAgIHJldHVybiBuLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpzdGFydEJvZHkoKQotewotICAgIGlmIChtX2luQm9keSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbkJvZHkgPSB0cnVlOwotCi0gICAgaWYgKG1faXNpbmRleEVsZW1lbnQpIHsKLSAg
ICAgICAgaW5zZXJ0Tm9kZShtX2lzaW5kZXhFbGVtZW50LmdldCgpLCB0cnVlIC8qIGRvbid0IGRl
c2NlbmQgaW50byB0aGlzIG5vZGUgKi8pOwotICAgICAgICBtX2lzaW5kZXhFbGVtZW50ID0gMDsK
LSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZmluaXNoZWQoKQot
ewotICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgY29tcGxldGVseSBlbXB0eSBkb2N1bWVudCwgaGVy
ZSdzIHRoZSBwbGFjZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxlbWVudC4KLSAgICBpZiAobV9jdXJy
ZW50ICYmIG1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiAhbV9kb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCkpCi0gICAgICAgIGluc2VydE5vZGUoSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUo
bV9kb2N1bWVudCkuZ2V0KCkpOwotCi0gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgImN1cnJlbnQi
IGlzIG5vdCBsZWZ0IHBvaW50aW5nIHRvIGEgbm9kZSB3aGVuIHRoZSBkb2N1bWVudCBpcyBkZXN0
cm95ZWQuCi0gICAgZnJlZUJsb2NrKCk7Ci0gICAgc2V0Q3VycmVudCgwKTsKLQotICAgIC8vIFdh
cm5pbmcsIHRoaXMgbWF5IGRlbGV0ZSB0aGUgcGFyc2VyLCBzbyBkb24ndCB0cnkgdG8gZG8gYW55
dGhpbmcgZWxzZSBhZnRlciB0aGlzLgotICAgIGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCkKLSAg
ICAgICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5nKCk7Ci19Ci0KLXZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNlckVycm9yQ29k
ZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0IEF0b21pY1N0
cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQoteyAgICAKLSAgICBGcmFtZSogZnJhbWUg
PSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqIGh0bWxUb2tlbml6ZXIgPSBzdGF0
aWNfY2FzdDxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqPihtX2RvY3VtZW50LT5wYXJzZXIoKSk7
Ci0gICAgaW50IGxpbmVOdW1iZXIgPSBodG1sVG9rZW5pemVyLT5saW5lTnVtYmVyKCkgKyAxOwot
Ci0gICAgQXRvbWljU3RyaW5nIHRhZzE7Ci0gICAgQXRvbWljU3RyaW5nIHRhZzI7Ci0gICAgaWYg
KHRhZ05hbWUxKSB7Ci0gICAgICAgIGlmICgqdGFnTmFtZTEgPT0gIiN0ZXh0IikKLSAgICAgICAg
ICAgIHRhZzEgPSAiVGV4dCI7Ci0gICAgICAgIGVsc2UgaWYgKCp0YWdOYW1lMSA9PSAiI2NvbW1l
bnQiKQotICAgICAgICAgICAgdGFnMSA9ICI8IS0tIGNvbW1lbnQgLS0+IjsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGFnMSA9IChjbG9zZVRhZ3MgPyAiPC8iIDogIjwiKSArICp0YWdOYW1l
MSArICI+IjsKLSAgICB9Ci0gICAgaWYgKHRhZ05hbWUyKSB7Ci0gICAgICAgIGlmICgqdGFnTmFt
ZTIgPT0gIiN0ZXh0IikKLSAgICAgICAgICAgIHRhZzIgPSAiVGV4dCI7Ci0gICAgICAgIGVsc2Ug
aWYgKCp0YWdOYW1lMiA9PSAiI2NvbW1lbnQiKQotICAgICAgICAgICAgdGFnMiA9ICI8IS0tIGNv
bW1lbnQgLS0+IjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFnMiA9IChjbG9zZVRhZ3Mg
PyAiPC8iIDogIjwiKSArICp0YWdOYW1lMiArICI+IjsKLSAgICB9Ci0gICAgICAgIAotICAgIGNv
bnN0IGNoYXIqIGVycm9yTXNnID0gaHRtbFBhcnNlckVycm9yTWVzc2FnZVRlbXBsYXRlKGVycm9y
Q29kZSk7Ci0gICAgaWYgKCFlcnJvck1zZykKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAg
ICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAoaHRtbFRva2VuaXplci0+cHJvY2Vzc2luZ0NvbnRl
bnRXcml0dGVuQnlTY3JpcHQoKSkKLSAgICAgICAgbWVzc2FnZSArPSBodG1sUGFyc2VyRG9jdW1l
bnRXcml0ZU1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlICs9IGVycm9yTXNnOwotICAgIG1lc3NhZ2Uu
cmVwbGFjZSgiJXRhZzEiLCB0YWcxKTsKLSAgICBtZXNzYWdlLnJlcGxhY2UoIiV0YWcyIiwgdGFn
Mik7Ci0KLSAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2FnZShIVE1M
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIAotICAgICAgICBpc1dhcm5pbmcoZXJyb3JD
b2RlKSA/IFdhcm5pbmdNZXNzYWdlTGV2ZWwgOiBFcnJvck1lc3NhZ2VMZXZlbCwKLSAgICAgICAg
bWVzc2FnZSwgbGluZU51bWJlciwgbV9kb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkpOwotfQotCi0j
aWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAotYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQo
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgCi0gICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCkt
PnNldHRpbmdzKCkgOiAwOwotICAgIHJldHVybiBzZXR0aW5ncyA/ICFzZXR0aW5ncy0+bmVlZHNM
ZW9wYXJkTWFpbFF1aXJrcygpIDogdHJ1ZTsKLX0KLSNlbGlmIGRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpCi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCogZG9jdW1lbnQp
Ci17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAKLSAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+c2V0dGluZ3MoKSA6IDA7Ci0g
ICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVkc1RpZ2VyTWFpbFF1aXJrcygpIDog
dHJ1ZTsKLX0KLSNlbmRpZgotCi0KLVN0cmluZyBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKGRvdWJs
ZSBudW1iZXIpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIEhUTUw1LCAidGhlIGJlc3QgcmVwcmVz
ZW50YXRpb24gb2YgdGhlIG51bWJlciBuIGFzIGEgZmxvYXRpbmcKLSAgICAvLyBwb2ludCBudW1i
ZXIiIGlzIGEgc3RyaW5nIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIFRvU3RyaW5nKCkgdG8gbi4KLSAg
ICBEdG9hQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgZG91YmxlVG9T
dHJpbmdJbkphdmFTY3JpcHRGb3JtYXQobnVtYmVyLCBidWZmZXIsICZsZW5ndGgpOwotICAgIHJl
dHVybiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOwotfQotCi1ib29sIHBhcnNlVG9Eb3VibGVGb3JO
dW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUqIG91dCkKLXsKLSAgICAvLyBTZWUg
SFRNTDUgMi40LjQuMyBgUmVhbCBudW1iZXJzLicKLQotICAgIGlmIChzcmMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gU3RyaW5nOjp0b0RvdWJsZSgpIGFjY2VwdHMg
bGVhZGluZyArIFx0IFxuIFx2IFxmIFxyIGFuZCBTUEFDRSwgd2hpY2ggYXJlIGludmFsaWQgaW4g
SFRNTDUuCi0gICAgLy8gU28sIGNoZWNrIHRoZSBmaXJzdCBjaGFyYWN0ZXIuCi0gICAgaWYgKHNy
Y1swXSAhPSAnLScgJiYgKHNyY1swXSA8ICcwJyB8fCBzcmNbMF0gPiAnOScpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHZhbGlkID0gZmFsc2U7Ci0gICAgZG91YmxlIHZhbHVl
ID0gc3JjLnRvRG91YmxlKCZ2YWxpZCk7Ci0gICAgaWYgKCF2YWxpZCkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIC8vIE5hTiBhbmQgSW5maW5pdHkgYXJlIG5vdCB2YWxpZCBudW1iZXJzIGFj
Y29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAtMCAtPiAwCi0gICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgdmFsdWUgPSAwOwotICAgIGlmIChvdXQpCi0gICAgICAgICpvdXQgPSB2YWx1ZTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gICAg
Q29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAgICAg
ICAgICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAgICAg
IChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSAgICAgICAgICAgICAg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5l
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3JfaAotCi0jaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlckVycm9yQ29kZXMuaCIKLSNpbmNs
dWRlICJRdWFsaWZpZWROYW1lLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIERvY3R5cGVUb2tlbjsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRG9j
dW1lbnRGcmFnbWVudDsKLWNsYXNzIEhUTUxEb2N1bWVudDsKLWNsYXNzIEhUTUxGb3JtRWxlbWVu
dDsKLWNsYXNzIEhUTUxIZWFkRWxlbWVudDsKLWNsYXNzIEhUTUxNYXBFbGVtZW50OwotY2xhc3Mg
SFRNTFBhcnNlclF1aXJrczsKLWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBIVE1MU3RhY2tFbGVtOwot
c3RydWN0IFRva2VuOwotCi0vKioKLSAqIFRoZSBwYXJzZXIgZm9yIEhUTUwuIEl0IHJlY2VpdmVz
IGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIsIGFu
ZAotICogYnVpbGRzIHVwIHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZnJvbSBpdC4KLSAqLwotY2xh
c3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJs
aWM6Ci0gICAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihIVE1MRG9jdW1lbnQqLCBib29sIHJl
cG9ydEVycm9ycyk7Ci0gICAgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdt
ZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxv
d2VkKTsKLSAgICB2aXJ0dWFsIH5MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCk7Ci0KLSAgICAv
KioKLSAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBieSB0aGUgdG9rZW5pemVyCi0g
ICAgICovCi0gICAgUGFzc1JlZlB0cjxOb2RlPiBwYXJzZVRva2VuKFRva2VuKik7Ci0gICAgCi0g
ICAgLy8gUGFyc2VzIGEgZG9jdHlwZSB0b2tlbi4KLSAgICB2b2lkIHBhcnNlRG9jdHlwZVRva2Vu
KERvY3R5cGVUb2tlbiopOwotCi0gICAgLyoqCi0gICAgICogdG9rZW5pemVyIHNheXMgaXQncyBu
b3QgZ29pbmcgdG8gYmUgc2VuZGluZyB1cyBhbnkgbW9yZSB0b2tlbnMKLSAgICAgKi8KLSAgICB2
b2lkIGZpbmlzaGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiByZXNldHMgdGhlIHBhcnNlcgotICAg
ICAqLwotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJl
dHVybiAhbV9za2lwTW9kZVRhZy5pc051bGwoKTsgfQotICAgIGJvb2wgaXNIYW5kbGluZ1Jlc2lk
dWFsU3R5bGVBY3Jvc3NCbG9ja3MoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsaW5nUmVzaWR1YWxT
dHlsZUFjcm9zc0Jsb2NrczsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgc2V0Q3VycmVudChOb2Rl
Kik7Ci0gICAgdm9pZCBkZXJlZkN1cnJlbnQoKTsKLSAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IG1fc2tpcE1vZGVUYWcgPSBxTmFtZS5sb2NhbE5hbWUo
KTsgfQotCi0gICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2RlKFRva2VuKik7Ci0gICAgYm9vbCBi
b2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgY2Fu
dmFzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgY29t
bWVudENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIGRk
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgZHRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBmb3JtQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgZnJhbWVzZXRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBoZWFkQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgaWZyYW1lQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgaXNpbmRleENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG1hcENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5lc3RlZENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5lc3RlZFBDbG9zZXJD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5v
ZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBu
b2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29s
IG5vbGF5ZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9v
bCBub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAg
Ym9vbCBwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OwotICAgIGJvb2wgcnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0g
ICAgYm9vbCBydENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIHNlbGVjdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIHRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAg
ICBib29sIHRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KTsKLSAgICBib29sIHRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7
Ci0KLSAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhUb2tlbiopOwotCi0gICAgdm9pZCBsaW1pdERl
cHRoKGludCB0YWdQcmlvcml0eSk7Ci0gICAgYm9vbCBpbnNlcnROb2RlQWZ0ZXJMaW1pdERlcHRo
KE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBpbnNlcnROb2RlKE5vZGUqLCBi
b29sIGZsYXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBoYW5kbGVFcnJvcihOb2RlKiwgYm9vbCBmbGF0
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKLSAgICAK
LSAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBsZXZl
bCk7Ci0gICAgdm9pZCBwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wg
cmVwb3J0RXJyb3JzID0gZmFsc2UpOwotICAgIHZvaWQgcG9wQmxvY2soY29uc3QgUXVhbGlmaWVk
TmFtZSYgcU5hbWUsIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2UpIHsgcmV0dXJuIHBvcEJsb2Nr
KHFOYW1lLmxvY2FsTmFtZSgpLCByZXBvcnRFcnJvcnMpOyB9IC8vIENvbnZlbmllbmNlIGZ1bmN0
aW9uIGZvciByZWFkYWJpbGl0eS4KLSAgICB2b2lkIHBvcE9uZUJsb2NrKCk7Ci0gICAgdm9pZCBt
b3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKTsKLSAgICBpbmxpbmUgSFRN
TFN0YWNrRWxlbSogcG9wT25lQmxvY2tDb21tb24oKTsKLSAgICB2b2lkIHBvcElubGluZUJsb2Nr
cygpOwotCi0gICAgdm9pZCBmcmVlQmxvY2soKTsKLQotICAgIHZvaWQgY3JlYXRlSGVhZCgpOwot
Ci0gICAgc3RhdGljIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwotICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNs
b3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qKTsKLSAgICB2b2lkIHJlb3BlblJlc2lk
dWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qLCBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCk7
Ci0KLSAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSk7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNIZWFkaW5nVGFnKGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSk7Ci0KLSAgICBib29sIGlzSW5saW5lKE5vZGUqKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIHN0YXJ0Qm9keSgpOyAvLyBpbnNlcnRzIHRoZSBpc2luZGV4IGVsZW1lbnQK
LSAgICBQYXNzUmVmUHRyPE5vZGU+IGhhbmRsZUlzaW5kZXgoVG9rZW4qKTsKLQotICAgIHZvaWQg
Y2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpOwotICAgIGJvb2wgaGFzUEVsZW1lbnRJblNjb3Bl
KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2hhc1BFbGVtZW50SW5TY29wZSA9PSBVbmtub3duKQot
ICAgICAgICAgICAgY2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpOwotICAgICAgICByZXR1cm4g
bV9oYXNQRWxlbWVudEluU2NvcGUgPT0gSW5TY29wZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlcG9y
dEVycm9yKEhUTUxQYXJzZXJFcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBBdG9taWNTdHJpbmcq
IHRhZ05hbWUxID0gMCwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiA9IDAsIGJvb2wgY2xv
c2VUYWdzID0gZmFsc2UpCi0gICAgeyBpZiAoIW1fcmVwb3J0RXJyb3JzKSByZXR1cm47IHJlcG9y
dEVycm9yVG9Db25zb2xlKGVycm9yQ29kZSwgdGFnTmFtZTEsIHRhZ05hbWUyLCBjbG9zZVRhZ3Mp
OyB9Ci0KLSAgICB2b2lkIHJlcG9ydEVycm9yVG9Db25zb2xlKEhUTUxQYXJzZXJFcnJvckNvZGUs
IGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFt
ZTIsIGJvb2wgY2xvc2VUYWdzKTsKLSAgICAKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLQot
ICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRoZSBvbmUgbmV3IGVsZW1lbnRz
IHdpbGwgYmUgYWRkZWQgdG8pLiBDYW4gYmUgYSBkb2N1bWVudCBmcmFnbWVudCwgYSBkb2N1bWVu
dCBvciBhbiBlbGVtZW50LgotICAgIE5vZGUqIG1fY3VycmVudDsKLSAgICAvLyBXZSBjYW4ndCBy
ZWYgYSBkb2N1bWVudCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gY29uc3RhbnRseSBjaGVjayBpZiBh
IG5vZGUgaXMgYSBkb2N1bWVudCBqdXN0IHRvIGRlY2lkZSB3aGV0aGVyIHRvIGRlcmVmLgotICAg
IGJvb2wgbV9kaWRSZWZDdXJyZW50OwotCi0gICAgSFRNTFN0YWNrRWxlbSogbV9ibG9ja1N0YWNr
OwotCi0gICAgLy8gVGhlIG51bWJlciBvZiB0YWdzIHdpdGggcHJpb3JpdHkgbWluQmxvY2tMZXZl
bFRhZ1ByaW9yaXR5IG9yIGhpZ2hlcgotICAgIC8vIGN1cnJlbnRseSBpbiBtX2Jsb2NrU3RhY2su
IFRoZSBwYXJzZXIgZW5mb3JjZXMgYSBjYXAgb24gdGhpcyB2YWx1ZSBieQotICAgIC8vIGFkZGlu
ZyBzdWNoIG5ldyBlbGVtZW50cyBhcyBzaWJsaW5ncyBpbnN0ZWFkIG9mIGNoaWxkcmVuIG9uY2Ug
aXQgaXMgcmVhY2hlZC4KLSAgICBzaXplX3QgbV9ibG9ja3NJblN0YWNrOwotICAgIC8vIERlcHRo
IG9mIHRoZSB0cmVlLgotICAgIHVuc2lnbmVkIG1fdHJlZURlcHRoOwotCi0gICAgZW51bSBFbGVt
ZW50SW5TY29wZVN0YXRlIHsgTm90SW5TY29wZSwgSW5TY29wZSwgVW5rbm93biB9OyAKLSAgICBF
bGVtZW50SW5TY29wZVN0YXRlIG1faGFzUEVsZW1lbnRJblNjb3BlOwotCi0gICAgUmVmUHRyPEhU
TUxGb3JtRWxlbWVudD4gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7IC8vIGN1cnJlbnRseSBhY3RpdmUg
Zm9ybQotICAgIFJlZlB0cjxIVE1MTWFwRWxlbWVudD4gbV9jdXJyZW50TWFwRWxlbWVudDsgLy8g
Y3VycmVudCBtYXAKLSAgICBSZWZQdHI8SFRNTEhlYWRFbGVtZW50PiBtX2hlYWQ7IC8vIGhlYWQg
ZWxlbWVudDsgbmVlZGVkIGZvciBIVE1MIHdoaWNoIGRlZmluZXMgPGJhc2U+IGFmdGVyIDwvaGVh
ZD4KLSAgICBSZWZQdHI8Tm9kZT4gbV9pc2luZGV4RWxlbWVudDsgLy8gYSBwb3NzaWJsZSA8aXNp
bmRleD4gZWxlbWVudCBpbiB0aGUgaGVhZAotCi0gICAgYm9vbCBtX2luQm9keTsKLSAgICBib29s
IG1faGF2ZUNvbnRlbnQ7Ci0gICAgYm9vbCBtX2hhdmVGcmFtZVNldDsKLQotICAgIEF0b21pY1N0
cmluZyBtX3NraXBNb2RlVGFnOyAvLyB0ZWxscyB0aGUgcGFyc2VyIHRvIGRpc2NhcmQgYWxsIHRh
Z3MgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAotCi0gICAgYm9vbCBtX2lzUGFy
c2luZ0ZyYWdtZW50OwotICAgIGJvb2wgbV9yZXBvcnRFcnJvcnM7Ci0gICAgYm9vbCBtX2hhbmRs
aW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrczsKLSAgICBpbnQgbV9pblN0cmF5VGFibGVDb250
ZW50OwotICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Np
b247Ci0KLSAgICBPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gbV9wYXJzZXJRdWlya3M7Ci19Owot
Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKQotYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqKTsKLSNlbHNl
Ci1pbmxpbmUgYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqKSB7IHJldHVy
biB0cnVlOyB9Ci0jZW5kaWYKLQotLy8gQ29udmVydHMgdGhlIHNwZWNpZmllZCBzdHJpbmcgdG8g
YSBmbG9hdGluZyBudW1iZXIuCi0vLyBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgdGhlIHJldHVy
biB2YWx1ZSBpcyBmYWxzZS4gVGFrZSBjYXJlIHRoYXQgbGVhZGluZyBvciB0cmFpbGluZyB1bm5l
Y2Vzc2FyeSBjaGFyYWN0ZXJzIG1ha2UgZmFpbHVyZXMuICBUaGlzIHJldHVybnMgZmFsc2UgZm9y
IGFuIGVtcHR5IHN0cmluZyBpbnB1dC4KLS8vIFRoZSBkb3VibGUqIHBhcmFtZXRlciBtYXkgYmUg
MC4KLWJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3RyaW5nJiwgZG91Ymxl
Kik7Ci0vLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIG51bWJlciB0byBhIHN0cmluZy4gVGhpcyBp
cyBhbiBpbXBsZW1lbnRhdGlvbiBvZgotLy8gSFRNTDUncyAiYWxnb3JpdGhtIHRvIGNvbnZlcnQg
YSBudW1iZXIgdG8gYSBzdHJpbmciIGZvciBOVU1CRVIvUkFOR0UgdHlwZXMuCi1TdHJpbmcgc2Vy
aWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUpOwotCi19Ci0gICAgCi0jZW5kaWYgLy8gTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcAkocmV2aXNpb24gNjE2NzIp
CisrKyBXZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNyAr
MjMsNyBAQAogCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRl
ICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9WYWxpZGl0
eVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJ
KHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUg
IktVUkwuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiUmVndWxh
ckV4cHJlc3Npb24uaCIKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2aXNp
b24gNjE2NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRl
ci5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiTW91c2VF
dmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59493</attachid>
            <date>2010-06-23 01:56:17 -0700</date>
            <delta_ts>2010-06-23 01:57:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41053-20100623015616.patch</filename>
            <type>text/plain</type>
            <size>224382</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA2LTIzICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVu
YW1lIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IgdG8gTGVnYWN5SFRNTFRyZWVCdWlsZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTA1MworCisg
ICAgICAgIFRoZXJlIHdhcyBzb21lIGRlYmF0ZSBhYm91dCB3aGV0aGVyIHRvIGNhbGwgdGhpcyBj
bGFzcyAoYW5kIHRoZQorICAgICAgICBub24tbGVnYWN5IHZlcnNpb24pICJ0cmVlIGJ1aWxkZXIi
IG9yICJ0cmVlIGNvbnN0cnVjdG9yIi4gIE1hY2llagorICAgICAgICBwb2ludGVkIG91dCB0aGF0
IG90aGVyIGltcGxlbWVudGF0aW9ucyAoaW5jbHVkaW5nIE1vemlsbGEgYW5kIEhUTUw1TGliKQor
ICAgICAgICBjYWxsIGl0IGEgdHJlZSBidWlsZGVyLiAgVGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0
YW5jZSBzZWVtcyB0byBiZSBjYWxsCisgICAgICAgIGl0IHRoYXQgZm9yIG5vdy4KKworICAgICAg
ICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUu
cHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVlQ29uc3RydWN0b3IpOgorICAgICAgICAqIGh0bWwv
SFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBh
cnNlcjo6aHRtbFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToK
KyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TE1ldGVyRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgICogaHRtbC9IVE1M
VHJlZUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6bGVnYWN5
VHJlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6aHRt
bFRyZWVDb25zdHJ1Y3Rvcik6CisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OkxlZ2FjeUhUTUxU
cmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6On5M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OnNldEN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjps
aW1pdERlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aW5z
ZXJ0Tm9kZUFmdGVyTGltaXREZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnBhcnNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpwYXJzZURvY3R5cGVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Omluc2VydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRy
ZWVCdWlsZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJhbWVzZXRDcmVh
dGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
Zm9ybUNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkZENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAg
ICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkdENyZWF0ZUVycm9yQ2hlY2spOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9yQ2hl
Y2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpydENyZWF0ZUVy
cm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0
ZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVT
ZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0
ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpw
Q2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lI
VE1MVHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpnZXROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcpOgorICAgICAgICAoV2Vi
Q29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2xvc2VUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0hlYWRpbmdUYWcpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0lubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyk6CisgICAgICAg
IChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoYW5kbGVSZXNp
ZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnB1c2hCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wT25lQmxvY2tDb21tb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwb3BPbmVCbG9jayk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om1vdmVPbmVCbG9ja1RvU3RhY2spOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjaGVja0lmSGFzUEVsZW1lbnRJblNjb3Bl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wSW5saW5lQmxv
Y2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJlZUJsb2Nr
KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlSGVhZCk6
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZUlzaW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzdGFydEJvZHkpOgor
ICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmaW5pc2hlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlcG9ydEVycm9yVG9Db25zb2xl
KToKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oLgorICAgICAgICAqIGh0bWwv
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9M
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9TdGVw
UmFuZ2UuY3BwOgorICAgICAgICAqIGh0bWwvVmFsaWRpdHlTdGF0ZS5jcHA6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHA6CisKIDIwMTAtMDYtMjMgIEFkYW0gQmFydGggIDxh
YmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IFdlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJ
KHJldmlzaW9uIDYxNjc1KQorKysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjQsNyArMjY0LDcgQEAgTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBc
CiAJaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwIFwKIAlodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5j
cHAgXAogCWh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBcCi0JaHRtbC9MZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yLmNwcCBcCisJaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
IAlodG1sL0hUTUxQYXJzZXJFcnJvckNvZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1
bGVyLmNwcCBcCiAJaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgXApJbmRleDogV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTk3Miw3ICs5NzIsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9IVE1M
T3B0aW9uc0NvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5jcHAK
ICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCi0gICAgaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcAorICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAogICAgIGh0
bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwCiAgICAgaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVy
LmNwcAogICAgIGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkluZGV4OiBXZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDYxNjc1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMTIy
MSw4ICsxMjIxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBh
cmFncmFwaEVsZW1lbnQuaCBcCiAJV2ViQ29yZS9odG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwK
IAlXZWJDb3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKLQlXZWJDb3JlL2h0bWwvTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvci5jcHAgXAotCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggXAorCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwK
KwlXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggXAogCVdlYkNvcmUvaHRtbC9I
VE1MUGFyc2VyRXJyb3JDb2Rlcy5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclF1aXJrcy5oIFwKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZp
c2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjA4LDggKzE2MDgsOCBAQAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQu
aCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmNwcCcsCiAgICAgICAgICAg
ICAnaHRtbC9IVE1MUGFyYW1FbGVtZW50LmgnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvci5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvci5oJywKKyAgICAgICAgICAgICdodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgnLAogICAgICAg
ICAgICAgJ2h0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwJywKICAgICAgICAgICAgICdodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmgnLAogICAgICAgICAgICAgJ2h0bWwvSFRNTFBhcnNlclNj
aGVkdWxlci5jcHAnLApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHdvcmtpbmcgY29weSkKQEAgLTY3Nyw3ICs2NzcsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBo
dG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgXAogICAgIGh0bWwvSFRNTFBhcmFncmFwaEVs
ZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwIFwKLSAgICBodG1sL0xl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVp
bGRlci5jcHAgXAogICAgIGh0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuY3BwIFwKICAgICBodG1s
L0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwIFwKICAgICBodG1sL0hUTUxQbHVnSW5FbGVtZW50LmNw
cCBcCkBAIC0xNDE3LDcgKzE0MTcsNyBAQCBIRUFERVJTICs9IFwKICAgICBodG1sL0hUTUxQYXJh
Z3JhcGhFbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5oIFwKICAgICBodG1s
L0hUTUxQYXJzZXJFcnJvckNvZGVzLmggXAotICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5oIFwKKyAgICBodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIFwKICAgICBodG1sL0hU
TUxQbHVnSW5FbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIFwK
ICAgICBodG1sL0hUTUxQcmVFbGVtZW50LmggXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCShyZXZpc2lvbiA2MTY3NSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2NTM3LDExICszNjUzNywxMSBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1s
XExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0
bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8
RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
ci5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgi
DQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQ4Miw3
ICsyNDgyLDcgQEAKIAkJOTNFQjM1NUYwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwICovOyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERv
Y3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5
QUJDIC8qIEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOThFRjA4
MjQ1RTU5MDAxRTlBQkMgLyogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYz
NUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJOTNGMTk4RUYwODI0
NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8q
IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oICovOyB9OwogCQk5M0YxOThGMDA4MjQ1RTU5MDAxRTlB
QkMgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MzAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTI1MTIsNyArMjUxMiw3IEBACiAJCTkzRjE5QTVGMDgyNDVFNTkwMDFFOUFCQyAvKiBXZWJDb3Jl
Vmlld0ZhY3RvcnkubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4NTU1MDJERTM3NTkwMUVBNDEyMiAvKiBXZWJDb3JlVmlld0ZhY3RvcnkubSAqLzsg
fTsKIAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQjAyREU0Mzk2
MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmNwcCAqLzsgfTsKIAkJOTNGMTlBOTIwODI0NUU1OTAw
MUU5QUJDIC8qIEhUTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudC5j
cHAgKi87IH07Ci0JCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjUwMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKKwkJOTNGMTlBOUIwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVl
QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUMwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
NTIzRDI1MjAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8qIFRleHRSZXNvdXJjZURlY29kZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NzgwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovOyB9OwogCQk5
M0YxOUFCOTA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDMwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmNwcCAqLzsgfTsKQEAgLTEwNjU4LDggKzEwNjU4LDggQEAKIAkJRjUyM0QyM0MwMkRFNDM5
NjAxODYzNUNBIC8qIEhUTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjNFMDJERTQzOTYw
MTg2MzVDQSAvKiBIVE1MRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRjAyREU0
Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1MjNEMjUwMDJERTQzOTYw
MTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJRjUyM0QyNTAwMkRFNDM5NjAx
ODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKKwkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjUyMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNE
MjUzMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwogCQlGNTIzRDI3ODAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNl
RGVjb2Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0xMzc1Niw4ICsxMzc1Niw4IEBA
CiAJCQkJQjAxNDlFN0MxMUE0QjIxNTAwMTk2QTdCIC8qIEltYWdlUmVzaXplclRocmVhZC5oICov
LAogCQkJCUE0NTZGQTI0MTFBRDRBODMwMDIwQjQyMCAvKiBMYWJlbHNOb2RlTGlzdC5jcHAgKi8s
CiAJCQkJQTQ1NkZBMjUxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggKi8sCi0J
CQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Iu
Y3BwICovLAotCQkJCUY1MjNEMjUxMDJERTQzOTYwMTg2MzVDQSAvKiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yLmggKi8sCisJCQkJRjUyM0QyNTAwMkRFNDM5NjAxODYzNUNBIC8qIExlZ2FjeUhU
TUxUcmVlQnVpbGRlci5jcHAgKi8sCisJCQkJRjUyM0QyNTEwMkRFNDM5NjAxODYzNUNBIC8qIExl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oICovLAogCQkJCUU0NDYxMzlCMENENjMzMTAwMEZBREE3NSAv
KiBNZWRpYUVycm9yLmggKi8sCiAJCQkJRTQ0NjEzOUMwQ0Q2MzMxMDAwRkFEQTc1IC8qIE1lZGlh
RXJyb3IuaWRsICovLAogCQkJCUU0RDRBQkUwMEQ3NTQyRjAwMEY5Njg2OSAvKiBMZWdhY3lQcmVs
b2FkU2Nhbm5lci5jcHAgKi8sCkBAIC0xODY4NSw3ICsxODY4NSw3IEBACiAJCQkJQTQ1NkZBMjcx
MUFENEE4MzAwMjBCNDIwIC8qIExhYmVsc05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUVDOUFGQjBBNzFBMkM2MDBFRUVBRUQgLyogTGFuZ3VhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJOTNGMTk4RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjE5OEVGMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1MEQ5MUU2QUYw
MDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U2NUJF
QjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5
MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKQEAgLTIxMTA3
LDcgKzIxMTA3LDcgQEAKIAkJCQlBNDU2RkEyNjExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8q
IExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4
IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTkzRjE5QTlCMDgyNDVFNTkw
MDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdl
YkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYzRjAwRTgzRjVD
IC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0U2NUJFQTBF
QUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2LDcgKzc2LDcgQEAKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRpdGxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5o
IgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcjsK
KyAgICBjbGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiAgICAgY2xhc3MgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOwogICAgIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKICAgICBjbGFzcyBYU1NB
dWRpdG9yOwpAQCAtNjIsNyArNjIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkge30KIAot
ICAgICAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIGh0bWxUcmVlQ29uc3Ry
dWN0b3IoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyKiBodG1sVHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgICAg
IHZpcnR1YWwgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBhc0hUTUxEb2N1bWVudFBhcnNlcigp
IHsgcmV0dXJuIDA7IH0KIAogICAgICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9YU1NBdWRpdG9yOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2Vy
LmNwcAkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6
OkhUTUxEb2N1bWVudFBhcnNlcihICiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwg
bV90b2tlbml6ZXIobmV3IEhUTUxUb2tlbml6ZXIpCiAgICAgLCBtX3NjcmlwdFJ1bm5lcihuZXcg
SFRNTFNjcmlwdFJ1bm5lcihkb2N1bWVudCwgdGhpcykpCi0gICAgLCBtX3RyZWVDb25zdHJ1Y3Rv
cihuZXcgSFRNTFRyZWVCdWlsZGVyKG1fdG9rZW5pemVyLmdldCgpLCBkb2N1bWVudCwgcmVwb3J0
RXJyb3JzKSkKKyAgICAsIG1fdHJlZUJ1aWxkZXIobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rva2Vu
aXplci5nZXQoKSwgZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCiAgICAgLCBtX3BhcnNlclNjaGVk
dWxlcihuZXcgSFRNTFBhcnNlclNjaGVkdWxlcih0aGlzKSkKICAgICAsIG1fZW5kV2FzRGVsYXll
ZChmYWxzZSkKICAgICAsIG1fd3JpdGVOZXN0aW5nTGV2ZWwoMCkKQEAgLTgyLDcgKzgyLDcgQEAg
SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSAogSFRNTERvY3VtZW50UGFy
c2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgIDogbV9kb2N1
bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW5pemVyKG5ldyBIVE1MVG9r
ZW5pemVyKQotICAgICwgbV90cmVlQ29uc3RydWN0b3IobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rv
a2VuaXplci5nZXQoKSwgZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQorICAgICwgbV90
cmVlQnVpbGRlcihuZXcgSFRNTFRyZWVCdWlsZGVyKG1fdG9rZW5pemVyLmdldCgpLCBmcmFnbWVu
dCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBtX2VuZFdhc0RlbGF5ZWQoZmFsc2UpCiAg
ICAgLCBtX3dyaXRlTmVzdGluZ0xldmVsKDApCiB7CkBAIC0xMTUsNyArMTE1LDcgQEAgYm9vbCBI
VE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKAogCiB2b2lkIEhUTUxEb2N1bWVudFBh
cnNlcjo6cHVtcFRva2VuaXplcklmUG9zc2libGUoU3luY2hyb25vdXNNb2RlIG1vZGUpCiB7Ci0g
ICAgaWYgKG1fcGFyc2VyU3RvcHBlZCB8fCBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSkK
KyAgICBpZiAobV9wYXJzZXJTdG9wcGVkIHx8IG1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIE9uY2UgYSByZXN1bWUgaXMgc2NoZWR1bGVkLCBIVE1M
UGFyc2VyU2NoZWR1bGVyIGNvbnRyb2xzIHdoZW4gd2UgbmV4dCBwdW1wLgpAQCAtMTQwLDEyICsx
NDAsMTIgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZgogICAgIHB1
bXBUb2tlbml6ZXIoQWxsb3dZaWVsZCk7CiB9CiAKLWJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjpy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUNvbnN0cnVjdG9yKCkKK2Jvb2wgSFRNTERvY3VtZW50UGFy
c2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJlZUJ1aWxkZXIoKQogewotICAgIEFTU0VSVChtX3Ry
ZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisgICAgQVNTRVJUKG1fdHJlZUJ1aWxkZXItPmlz
UGF1c2VkKCkpOwogCiAgICAgaW50IHNjcmlwdFN0YXJ0TGluZSA9IDA7Ci0gICAgUmVmUHRyPEVs
ZW1lbnQ+IHNjcmlwdEVsZW1lbnQgPSBtX3RyZWVDb25zdHJ1Y3Rvci0+dGFrZVNjcmlwdFRvUHJv
Y2VzcyhzY3JpcHRTdGFydExpbmUpOworICAgIFJlZlB0cjxFbGVtZW50PiBzY3JpcHRFbGVtZW50
ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2VzcyhzY3JpcHRTdGFydExpbmUpOwog
ICAgIC8vIFdlIHdpbGwgbm90IGhhdmUgYSBzY3JpcHRSdW5uZXIgd2hlbiBwYXJzaW5nIGEgRG9j
dW1lbnRGcmFnbWVudC4KICAgICBpZiAoIW1fc2NyaXB0UnVubmVyKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2Ny
aXB0c0ZvclBhCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcihTeW5jaHJv
bm91c01vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoIW1fcGFyc2VyU3RvcHBlZCk7Ci0gICAgQVNT
RVJUKCFtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisgICAgQVNTRVJUKCFtX3RyZWVC
dWlsZGVyLT5pc1BhdXNlZCgpKTsKICAgICBBU1NFUlQoIWlzU2NoZWR1bGVkRm9yUmVzdW1lKCkp
OwogCiAgICAgLy8gV2UgdGVsbCB0aGUgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBhYm91dCBldmVy
eSBwdW1wLCBldmVuIGlmIHdlCkBAIC0xNjgsMTYgKzE2OCwxNiBAQCB2b2lkIEhUTUxEb2N1bWVu
dFBhcnNlcjo6cHVtcFRva2VuaXplcihTCiAgICAgICAgIGlmICghbV90b2tlbml6ZXItPm5leHRU
b2tlbihtX2lucHV0LmN1cnJlbnQoKSwgbV90b2tlbikpCiAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+Y29uc3RydWN0VHJlZUZyb21Ub2tlbihtX3Rva2Vu
KTsKKyAgICAgICAgbV90cmVlQnVpbGRlci0+Y29uc3RydWN0VHJlZUZyb21Ub2tlbihtX3Rva2Vu
KTsKICAgICAgICAgbV90b2tlbi5jbGVhcigpOwogCiAgICAgICAgIC8vIFRoZSBwYXJzZXIgd2ls
bCBwYXVzZSBpdHNlbGYgd2hlbiB3YWl0aW5nIG9uIGEgc2NyaXB0IHRvIGxvYWQgb3IgcnVuLgot
ICAgICAgICBpZiAoIW1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKQorICAgICAgICBpZiAo
IW1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAg
ICAgICAvLyBJZiB3ZSdyZSBwYXVzZWQgd2FpdGluZyBmb3IgYSBzY3JpcHQsIHdlIHRyeSB0byBl
eGVjdXRlIHNjcmlwdHMgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgICAgIGJvb2wgc2hvdWxkQ29u
dGludWVQYXJzaW5nID0gcnVuU2NyaXB0c0ZvclBhdXNlZFRyZWVDb25zdHJ1Y3RvcigpOwotICAg
ICAgICBtX3RyZWVDb25zdHJ1Y3Rvci0+c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBhcnNpbmcp
OworICAgICAgICBib29sIHNob3VsZENvbnRpbnVlUGFyc2luZyA9IHJ1blNjcmlwdHNGb3JQYXVz
ZWRUcmVlQnVpbGRlcigpOworICAgICAgICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3Vs
ZENvbnRpbnVlUGFyc2luZyk7CiAgICAgICAgIGlmICghc2hvdWxkQ29udGludWVQYXJzaW5nKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgSFRNTERv
Y3VtZW50UGFyc2VyOjplbmQoKQogICAgIHB1bXBUb2tlbml6ZXJJZlBvc3NpYmxlKEZvcmNlU3lu
Y2hyb25vdXMpOwogCiAgICAgLy8gSW5mb3JtcyB0aGUgdGhlIHJlc3Qgb2YgV2ViQ29yZSB0aGF0
IHBhcnNpbmcgaXMgcmVhbGx5IGZpbmlzaGVkIChhbmQgZGVsZXRlcyB0aGlzKS4KLSAgICBtX3Ry
ZWVDb25zdHJ1Y3Rvci0+ZmluaXNoZWQoKTsKKyAgICBtX3RyZWVCdWlsZGVyLT5maW5pc2hlZCgp
OwogfQogCiB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6YXR0ZW1wdFRvRW5kKCkKQEAgLTMwOSwy
MCArMzA5LDIwIEBAIGludCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbHVtbk51bWJlcigpIGMKICAg
ICByZXR1cm4gbV90b2tlbml6ZXItPmNvbHVtbk51bWJlcigpOwogfQogCi1MZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKiBIVE1MRG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVlQ29uc3RydWN0b3IoKSBj
b25zdAorTGVnYWN5SFRNTFRyZWVCdWlsZGVyKiBIVE1MRG9jdW1lbnRQYXJzZXI6Omh0bWxUcmVl
QnVpbGRlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJlZUNvbnN0cnVjdG9yLT5sZWdhY3lU
cmVlQ29uc3RydWN0b3IoKTsKKyAgICByZXR1cm4gbV90cmVlQnVpbGRlci0+bGVnYWN5VHJlZUJ1
aWxkZXIoKTsKIH0KIAogYm9vbCBIVE1MRG9jdW1lbnRQYXJzZXI6OmlzV2FpdGluZ0ZvclNjcmlw
dHMoKSBjb25zdAogewotICAgIHJldHVybiBtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKTsK
KyAgICByZXR1cm4gbV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKTsKIH0KIAogdm9pZCBIVE1MRG9j
dW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpCiB7CiAgICAg
QVNTRVJUKCFpblNjcmlwdEV4ZWN1dGlvbigpKTsKLSAgICBBU1NFUlQoIW1fdHJlZUNvbnN0cnVj
dG9yLT5pc1BhdXNlZCgpKTsKKyAgICBBU1NFUlQoIW1fdHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkp
OwogCiAgICAgcHVtcFRva2VuaXplcklmUG9zc2libGUoQWxsb3dZaWVsZCk7CiAKQEAgLTM1OSwx
MiArMzU5LDEyIEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlGaW5pc2hlZCgKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQoIWluU2NyaXB0RXhlY3V0aW9uKCkpOwot
ICAgIEFTU0VSVChtX3RyZWVDb25zdHJ1Y3Rvci0+aXNQYXVzZWQoKSk7CisgICAgQVNTRVJUKG1f
dHJlZUJ1aWxkZXItPmlzUGF1c2VkKCkpOwogICAgIC8vIE5vdGU6IFdlIG9ubHkgZXZlciB3YWl0
IG9uIG9uZSBzY3JpcHQgYXQgYSB0aW1lLCBzbyB3ZSBhbHdheXMga25vdyB0aGlzCiAgICAgLy8g
aXMgdGhlIG9uZSB3ZSB3ZXJlIHdhaXRpbmcgb24gYW5kIGNhbiB1bi1wYXVzZSB0aGUgdHJlZSBi
dWlsZGVyLgotICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoZmFsc2UpOworICAgIG1f
dHJlZUJ1aWxkZXItPnNldFBhdXNlZChmYWxzZSk7CiAgICAgYm9vbCBzaG91bGRDb250aW51ZVBh
cnNpbmcgPSBtX3NjcmlwdFJ1bm5lci0+ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yTG9hZChjYWNo
ZWRSZXNvdXJjZSk7Ci0gICAgbV90cmVlQ29uc3RydWN0b3ItPnNldFBhdXNlZCghc2hvdWxkQ29u
dGludWVQYXJzaW5nKTsKKyAgICBtX3RyZWVCdWlsZGVyLT5zZXRQYXVzZWQoIXNob3VsZENvbnRp
bnVlUGFyc2luZyk7CiAgICAgaWYgKHNob3VsZENvbnRpbnVlUGFyc2luZykKICAgICAgICAgcmVz
dW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9uKCk7CiB9CkBAIC0zODAsMTIgKzM4MCwxMiBA
QCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXCiAgICAgaWYgKCFtX3Nj
cmlwdFJ1bm5lci0+aGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpKQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKCFtX3NjcmlwdFJ1bm5lci0+aW5TY3JpcHRFeGVjdXRpb24oKSk7
Ci0gICAgQVNTRVJUKG1fdHJlZUNvbnN0cnVjdG9yLT5pc1BhdXNlZCgpKTsKKyAgICBBU1NFUlQo
bV90cmVlQnVpbGRlci0+aXNQYXVzZWQoKSk7CiAgICAgLy8gTm90ZTogV2Ugb25seSBldmVyIHdh
aXQgb24gb25lIHNjcmlwdCBhdCBhIHRpbWUsIHNvIHdlIGFsd2F5cyBrbm93IHRoaXMKICAgICAv
LyBpcyB0aGUgb25lIHdlIHdlcmUgd2FpdGluZyBvbiBhbmQgY2FuIHVuLXBhdXNlIHRoZSB0cmVl
IGJ1aWxkZXIuCi0gICAgbV90cmVlQ29uc3RydWN0b3ItPnNldFBhdXNlZChmYWxzZSk7CisgICAg
bV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKGZhbHNlKTsKICAgICBib29sIHNob3VsZENvbnRpbnVl
UGFyc2luZyA9IG1fc2NyaXB0UnVubmVyLT5leGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNo
ZWV0cygpOwotICAgIG1fdHJlZUNvbnN0cnVjdG9yLT5zZXRQYXVzZWQoIXNob3VsZENvbnRpbnVl
UGFyc2luZyk7CisgICAgbV90cmVlQnVpbGRlci0+c2V0UGF1c2VkKCFzaG91bGRDb250aW51ZVBh
cnNpbmcpOwogICAgIGlmIChzaG91bGRDb250aW51ZVBhcnNpbmcpCiAgICAgICAgIHJlc3VtZVBh
cnNpbmdBZnRlclNjcmlwdEV4ZWN1dGlvbigpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQ
YXJzZXIuaAkocmV2aXNpb24gNjE2NzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgSFRNTFRva2VuaXpl
cjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5uZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXI7CiBjbGFz
cyBIVE1MUHJlbG9hZFNjYW5uZXI7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOwor
Y2xhc3MgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOwogY2xhc3MgU2NyaXB0Q29udHJvbGxlcjsKIGNs
YXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKQEAgLTcwLDkgKzcwLDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwogICAgIHZp
cnR1YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1i
ZXIoKSBjb25zdDsKLSAgICAvLyBGSVhNRTogSFRNTEZvcm1Db250cm9sRWxlbWVudCBhY2Nlc3Nl
cyB0aGUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciB2aWEgdGhpcyBtZXRob2QuCi0gICAgLy8g
UmVtb3ZlIHRoaXMgd2hlbiB0aGUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciBpcyBubyBsb25n
ZXIgdXNlZC4KLSAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IqIGh0bWxUcmVl
Q29uc3RydWN0b3IoKSBjb25zdDsKKyAgICAvLyBGSVhNRTogSFRNTEZvcm1Db250cm9sRWxlbWVu
dCBhY2Nlc3NlcyB0aGUgTGVnYWN5SFRNTFRyZWVCdWlsZGVyIHZpYSB0aGlzIG1ldGhvZC4KKyAg
ICAvLyBSZW1vdmUgdGhpcyB3aGVuIHRoZSBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIgaXMgbm8gbG9u
Z2VyIHVzZWQuCisgICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIqIGh0bWxUcmVlQnVp
bGRlcigpIGNvbnN0OwogCiAgICAgLy8gSFRNTFNjcmlwdFJ1bm5lckhvc3QKICAgICB2aXJ0dWFs
IHZvaWQgd2F0Y2hGb3JMb2FkKENhY2hlZFJlc291cmNlKik7CkBAIC05OCw3ICs5OCw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSk7CiAgICAgdm9p
ZCBwdW1wVG9rZW5pemVySWZQb3NzaWJsZShTeW5jaHJvbm91c01vZGUpOwogCi0gICAgYm9vbCBy
dW5TY3JpcHRzRm9yUGF1c2VkVHJlZUNvbnN0cnVjdG9yKCk7CisgICAgYm9vbCBydW5TY3JpcHRz
Rm9yUGF1c2VkVHJlZUJ1aWxkZXIoKTsKICAgICB2b2lkIHJlc3VtZVBhcnNpbmdBZnRlclNjcmlw
dEV4ZWN1dGlvbigpOwogCiAgICAgdm9pZCBhdHRlbXB0VG9FbmQoKTsKQEAgLTEyMCw3ICsxMjAs
NyBAQCBwcml2YXRlOgogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIE93blB0cjxIVE1M
VG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBPd25QdHI8SFRNTFNjcmlwdFJ1bm5lcj4gbV9z
Y3JpcHRSdW5uZXI7Ci0gICAgT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQ29uc3RydWN0
b3I7CisgICAgT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQnVpbGRlcjsKICAgICBPd25Q
dHI8SFRNTFByZWxvYWRTY2FubmVyPiBtX3ByZWxvYWRTY2FubmVyOwogICAgIE93blB0cjxIVE1M
UGFyc2VyU2NoZWR1bGVyPiBtX3BhcnNlclNjaGVkdWxlcjsKIApJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4
LDcgQEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgIkxhYmVsc05vZGVM
aXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtMTc4LDExICsxNzgsMTEgQEAgdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVkRnJvbQogewogICAgIC8vIElmIHRoZSBmb3JtIGFu
ZCBlbGVtZW50IGFyZSBib3RoIGluIHRoZSBzYW1lIHRyZWUsIHByZXNlcnZlIHRoZSBjb25uZWN0
aW9uIHRvIHRoZSBmb3JtLgogICAgIC8vIE90aGVyd2lzZSwgbnVsbCBvdXQgb3VyIGZvcm0gYW5k
IHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgZm9ybSdzIGxpc3Qgb2YgZWxlbWVudHMuCi0gICAg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciogdHJlZUNvbnN0cnVjdG9yID0gMDsKKyAgICBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIqIHRyZWVCdWlsZGVyID0gMDsKICAgICBpZiAoRG9jdW1lbnRQYXJz
ZXIqIHBhcnNlciA9IGRvY3VtZW50KCktPnBhcnNlcigpKQotICAgICAgICB0cmVlQ29uc3RydWN0
b3IgPSBwYXJzZXItPmh0bWxUcmVlQ29uc3RydWN0b3IoKTsKKyAgICAgICAgdHJlZUJ1aWxkZXIg
PSBwYXJzZXItPmh0bWxUcmVlQnVpbGRlcigpOwogCi0gICAgaWYgKG1fZm9ybSAmJiAhKHRyZWVD
b25zdHJ1Y3RvciAmJiB0cmVlQ29uc3RydWN0b3ItPmlzSGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNy
b3NzQmxvY2tzKCkpICYmIGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290KG1fZm9ybSkpIHsKKyAg
ICBpZiAobV9mb3JtICYmICEodHJlZUJ1aWxkZXIgJiYgdHJlZUJ1aWxkZXItPmlzSGFuZGxpbmdS
ZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzKCkpICYmIGZpbmRSb290KHRoaXMpICE9IGZpbmRSb290
KG1fZm9ybSkpIHsKICAgICAgICAgbV9mb3JtLT5yZW1vdmVGb3JtRWxlbWVudCh0aGlzKTsKICAg
ICAgICAgbV9mb3JtID0gMDsKICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50
LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAkocmV2aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUg
IlJlbmRlclByb2dyZXNzLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAkocmV2aXNpb24gNjE2NzQpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkxlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSFRNTFRyZWVCdWls
ZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRvawogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAg
ICAsIG1faW5zZXJ0aW9uTW9kZShJbml0aWFsKQogICAgICwgbV90b2tlbml6ZXIodG9rZW5pemVy
KQotICAgICwgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3IobmV3IExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IoZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCisgICAgLCBtX2xlZ2FjeVRyZWVCdWlsZGVy
KG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCiAgICAg
LCBtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lKHVuaW5pdGlhbGl6ZWRMaW5lTnVtYmVyVmFs
dWUpCiAgICAgLCBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51
bWJlclZhbHVlKQogICAgICwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRT
Y3JpcHRpbmdBbGxvd2VkKQpAQCAtNjYsNyArNjYsNyBAQCBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxU
cmVlQnVpbGRlcihIVE1MVG9rCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9pbnNl
cnRpb25Nb2RlKEluaXRpYWwpCiAgICAgLCBtX3Rva2VuaXplcih0b2tlbml6ZXIpCi0gICAgLCBt
X2xlZ2FjeVRyZWVDb25zdHJ1Y3RvcihuZXcgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihmcmFn
bWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbikpCisgICAgLCBtX2xlZ2FjeVRyZWVCdWlsZGVyKG5l
dyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQog
ICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJl
clZhbHVlKQogICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFydExpbmUodW5pbml0aWFsaXplZExp
bmVOdW1iZXJWYWx1ZSkKICAgICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlw
dGluZ1Blcm1pc3Npb24pCkBAIC0xNzUsNyArMTc1LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1M
VHJlZUJ1aWxkZXI6OnBhc3NUbwogICAgICAgICBkb2N0eXBlVG9rZW4ubV9zeXN0ZW1JRCA9IHRv
a2VuLnN5c3RlbUlkZW50aWZpZXIoKTsKICAgICAgICAgZG9jdHlwZVRva2VuLm1fZm9yY2VRdWly
a3MgPSB0b2tlbi5mb3JjZVF1aXJrcygpOwogCi0gICAgICAgIG1fbGVnYWN5VHJlZUNvbnN0cnVj
dG9yLT5wYXJzZURvY3R5cGVUb2tlbigmZG9jdHlwZVRva2VuKTsKKyAgICAgICAgbV9sZWdhY3lU
cmVlQnVpbGRlci0+cGFyc2VEb2N0eXBlVG9rZW4oJmRvY3R5cGVUb2tlbik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIApAQCAtMTgzLDcgKzE4Myw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gSFRN
TFRyZWVCdWlsZGVyOjpwYXNzVG8KICAgICBUb2tlbiBvbGRTdHlsZVRva2VuOwogICAgIGNvbnZl
cnRUb09sZFN0eWxlKHRva2VuLCBvbGRTdHlsZVRva2VuKTsKIAotICAgIFJlZlB0cjxOb2RlPiBy
ZXN1bHQgPSAgbV9sZWdhY3lUcmVlQ29uc3RydWN0b3ItPnBhcnNlVG9rZW4oJm9sZFN0eWxlVG9r
ZW4pOworICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSAgbV9sZWdhY3lUcmVlQnVpbGRlci0+cGFy
c2VUb2tlbigmb2xkU3R5bGVUb2tlbik7CiAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OlN0YXJ0VGFnKSB7CiAgICAgICAgIC8vIFRoaXMgd29yayBpcyBzdXBwb3NlZCB0byBiZSBk
b25lIGJ5IHRoZSBwYXJzZXIsIGJ1dAogICAgICAgICAvLyB3aGVuIHVzaW5nIHRoZSBvbGQgcGFy
c2VyIGZvciB3ZSBoYXZlIHRvIGRvIHRoaXMgbWFudWFsbHkuCkBAIC0yNDcsOCArMjQ3LDggQEAg
UGFzc1JlZlB0cjxOb2RlPiBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlcwogdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OmZpbmlzaGVkKCkKIHsKICAgICAvLyBXZSBzaG91bGQgY2FsbCBtX2RvY3VtZW50LT5m
aW5pc2hlZFBhcnNpbmcoKSBoZXJlLCBleGNlcHQKLSAgICAvLyBtX2xlZ2FjeVRyZWVDb25zdHJ1
Y3Rvci0+ZmluaXNoZWQoKSBkb2VzIGl0IGZvciB1cy4KLSAgICBtX2xlZ2FjeVRyZWVDb25zdHJ1
Y3Rvci0+ZmluaXNoZWQoKTsKKyAgICAvLyBtX2xlZ2FjeVRyZWVCdWlsZGVyLT5maW5pc2hlZCgp
IGRvZXMgaXQgZm9yIHVzLgorICAgIG1fbGVnYWN5VHJlZUJ1aWxkZXItPmZpbmlzaGVkKCk7CiB9
CiAKIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjppc1NjcmlwdGluZ0ZsYWdFbmFibGVkKEZyYW1lKiBm
cmFtZSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYxNjc0KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxUb2tlbjsKIGNsYXNz
IEhUTUxEb2N1bWVudDsKLWNsYXNzIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I7CitjbGFzcyBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBOb2RlOwogCiBjbGFzcyBIVE1MVHJlZUJ1aWxk
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhIGRpcnR5LCByb3R0ZW4gaGFjayB0byBrZWVwIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQgaGFwcHkKICAgICAvLyB1bnRpbCB3ZSBzdG9wIHVzaW5nIHRoZSBsZWdh
Y3kgcGFyc2VyLiBETyBOT1QgQ0FMTCBUSElTIE1FVEhPRC4KLSAgICBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yKiBsZWdhY3lUcmVlQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2xlZ2Fj
eVRyZWVDb25zdHJ1Y3Rvci5nZXQoKTsgfQorICAgIExlZ2FjeUhUTUxUcmVlQnVpbGRlciogbGVn
YWN5VHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiBtX2xlZ2FjeVRyZWVCdWlsZGVyLmdldCgp
OyB9CiAKIHByaXZhdGU6CiAgICAgLy8gUmVwcmVzZW50cyBIVE1MNSAiaW5zZXJ0aW9uIG1vZGUi
CkBAIC05OSw4ICs5OSw4IEBAIHByaXZhdGU6CiAgICAgLy8gZnJvbSB3aXRoaW4gcGFyc2VyIGFj
dGlvbnMuCiAgICAgSFRNTFRva2VuaXplciogbV90b2tlbml6ZXI7CiAKLSAgICAvLyBXZSdyZSBy
ZS11c2luZyBsb2dpYyBmcm9tIHRoZSBvbGQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3RvciB3aGls
ZSB0aGlzIGNsYXNzIGlzIGJlaW5nIHdyaXR0ZW4uCi0gICAgT3duUHRyPExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I+IG1fbGVnYWN5VHJlZUNvbnN0cnVjdG9yOworICAgIC8vIFdlJ3JlIHJlLXVz
aW5nIGxvZ2ljIGZyb20gdGhlIG9sZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIgd2hpbGUgdGhpcyBj
bGFzcyBpcyBiZWluZyB3cml0dGVuLgorICAgIE93blB0cjxMZWdhY3lIVE1MVHJlZUJ1aWxkZXI+
IG1fbGVnYWN5VHJlZUJ1aWxkZXI7CiAKICAgICAvLyBUaGVzZSBtZW1iZXJzIGFyZSBpbnRlbnRp
b25hbGx5IGR1cGxpY2F0ZWQgYXMgdGhlIGZpcnN0IHNldCBpcyBhIGhhY2sKICAgICAvLyBvbiB0
b3Agb2YgdGhlIGxlZ2FjeSBwYXJzZXIgd2hpY2ggd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQu
CkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcAkocmV2aXNp
b24gNjE2NzUpCisrKyBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNs
dWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MVmlld1NvdXJjZURvY3VtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VMb2FkZXIuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1
ZGUgIkxlZ2FjeVByZWxvYWRTY2FubmVyLmgiCisjaW5jbHVkZSAiUHJlbG9hZFNjYW5uZXIuaCIK
ICNpbmNsdWRlICJTY3JpcHRTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIK
ICNpbmNsdWRlICJYU1NBdWRpdG9yLmgiCkBAIC0xNTksNyArMTU5LDcgQEAgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdQogICAgICwgbV90aW1lcih0aGlzLCAmTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKQogICAgICwgbV9leHRlcm5hbFNjcmlwdHNU
aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3Jp
cHRzVGltZXJGaXJlZCkKICAgICAsIG1fZG9jKGRvYykKLSAgICAsIG1fdHJlZUNvbnN0cnVjdG9y
KG5ldyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKGRvYywgcmVwb3J0RXJyb3JzKSkKKyAgICAs
IG1fdHJlZUJ1aWxkZXIobmV3IExlZ2FjeUhUTUxUcmVlQnVpbGRlcihkb2MsIHJlcG9ydEVycm9y
cykpCiAgICAgLCBtX2luV3JpdGUoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQogICAg
ICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKQEAgLTE5
OSw3ICsxOTksNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1CiAg
ICAgLCBtX3RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQp
CiAgICAgLCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQogICAgICwgbV9kb2MoZnJh
Zy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fdHJlZUNvbnN0cnVjdG9yKG5ldyBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQorICAgICwgbV90cmVlQnVp
bGRlcihuZXcgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24p
KQogICAgICwgbV9pbldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudCh0cnVlKQogICAgICwg
bV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCkBAIC00MzEsNyArNDMx
LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVAogICAgIGlmICgh
aW5WaWV3U291cmNlTW9kZSgpKSB7CiAgICAgICAgIGlmICghbV9zY3JpcHRUYWdTcmNBdHRyVmFs
dWUuaXNFbXB0eSgpICYmIG1fZG9jLT5mcmFtZSgpKSB7CiAgICAgICAgICAgICAvLyBmb3JnZXQg
d2hhdCB3ZSBqdXN0IGdvdDsgbG9hZCBmcm9tIHNyYyB1cmwgaW5zdGVhZAotICAgICAgICAgICAg
aWYgKCFtX3RyZWVDb25zdHJ1Y3Rvci0+c2tpcE1vZGUoKSAmJiAhZm9sbG93aW5nRnJhbWVzZXQp
IHsKKyAgICAgICAgICAgIGlmICghbV90cmVlQnVpbGRlci0+c2tpcE1vZGUoKSAmJiAhZm9sbG93
aW5nRnJhbWVzZXQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcGFyc2VyIG1pZ2h0IGhhdmUg
YmVlbiBzdG9wcGVkIGJ5IGZvciBleGFtcGxlIGEgd2luZG93LmNsb3NlIGNhbGwgaW4gYW4gZWFy
bGllciBzY3JpcHQuCiAgICAgICAgICAgICAgICAgLy8gSWYgc28sIHdlIGRvbid0IHdhbnQgdG8g
bG9hZCBzY3JpcHRzLgogICAgICAgICAgICAgICAgIGlmICghbV9wYXJzZXJTdG9wcGVkICYmIG1f
c2NyaXB0Tm9kZS0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQobV9zY3JpcHRUYWdTcmNBdHRyVmFs
dWUpICYmCkBAIC00NzgsNyArNDc4LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0
ZSBMZWdhY3lIVAogICAgIFNlZ21lbnRlZFN0cmluZyBwcmVwZW5kaW5nU3JjOwogICAgIG1fY3Vy
cmVudFByZXBlbmRpbmdTcmMgPSAmcHJlcGVuZGluZ1NyYzsKIAotICAgIGlmICghbV90cmVlQ29u
c3RydWN0b3ItPnNraXBNb2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7CisgICAgaWYgKCFt
X3RyZWVCdWlsZGVyLT5za2lwTW9kZSgpICYmICFmb2xsb3dpbmdGcmFtZXNldCkgewogICAgICAg
ICBpZiAoY3MpIHsKICAgICAgICAgICAgIGlmIChzYXZlZFByZXBlbmRpbmdTcmMpCiAgICAgICAg
ICAgICAgICAgc2F2ZWRQcmVwZW5kaW5nU3JjLT5hcHBlbmQobV9zcmMpOwpAQCAtNTMzLDcgKzUz
Myw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFQKICNpZiBQUkVM
T0FEX1NDQU5ORVJfRU5BQkxFRAogICAgIGlmICghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkg
JiYgIW1fZXhlY3V0aW5nU2NyaXB0KSB7CiAgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lcikK
LSAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXIuc2V0KG5ldyBMZWdhY3lQcmVsb2FkU2Nhbm5l
cihtX2RvYykpOworICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IFByZWxvYWRT
Y2FubmVyKG1fZG9jKSk7CiAgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lci0+aW5Qcm9ncmVz
cygpKSB7CiAgICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLT5iZWdpbigpOwogICAgICAgICAg
ICAgbV9wcmVsb2FkU2Nhbm5lci0+d3JpdGUobV9wZW5kaW5nU3JjKTsKQEAgLTU4NCw3ICs1ODQs
NyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUCiAjaWYgUFJFTE9B
RF9TQ0FOTkVSX0VOQUJMRUQKICAgICAgICAgICAgIC8vIFdlIGFyZSBzdHVjayB3YWl0aW5nIGZv
ciBhbm90aGVyIHNjcmlwdC4gTGV0cyBjaGVjayB0aGUgc291cmNlIHRoYXQKICAgICAgICAgICAg
IC8vIHdhcyBqdXN0IGRvY3VtZW50LndyaXRlKCluIGZvciBhbnl0aGluZyB0byBsb2FkLgotICAg
ICAgICAgICAgTGVnYWN5UHJlbG9hZFNjYW5uZXIgZG9jdW1lbnRXcml0ZVByZWxvYWRTY2FubmVy
KG1fZG9jKTsKKyAgICAgICAgICAgIFByZWxvYWRTY2FubmVyIGRvY3VtZW50V3JpdGVQcmVsb2Fk
U2Nhbm5lcihtX2RvYyk7CiAgICAgICAgICAgICBkb2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIu
YmVnaW4oKTsKICAgICAgICAgICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nhbm5lci53cml0ZShw
cmVwZW5kaW5nU3JjKTsKICAgICAgICAgICAgIGRvY3VtZW50V3JpdGVQcmVsb2FkU2Nhbm5lci5l
bmQoKTsKQEAgLTEzOTEsNyArMTM5MSw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3Rh
dGUgTGVnYWN5SFQKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5WaWV3U291
cmNlTW9kZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudFRva2VuLmFk
ZFZpZXdTb3VyY2VDaGFyKCd2Jyk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2N1
cnJlbnRUb2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRh
ZyAmJiAhaW5WaWV3U291cmNlTW9kZSgpICYmICFtX3RyZWVDb25zdHJ1Y3Rvci0+c2tpcE1vZGUo
KSAmJiBtX2F0dHJOYW1lID09IHNyY0F0dHIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNj
cmlwdFRhZyAmJiAhaW5WaWV3U291cmNlTW9kZSgpICYmICFtX3RyZWVCdWlsZGVyLT5za2lwTW9k
ZSgpICYmIG1fYXR0ck5hbWUgPT0gc3JjQXR0cikgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBjb250ZXh0KG1fcmF3QXR0cmlidXRlQmVmb3JlVmFsdWUuZGF0YSgpLCBtX3Jh
d0F0dHJpYnV0ZUJlZm9yZVZhbHVlLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fWFNTQXVkaXRvciAmJiAhbV9YU1NBdWRpdG9yLT5jYW5Mb2FkRXh0ZXJuYWxTY3Jp
cHRGcm9tU3JjKGF0dHJpYnV0ZVZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0cmlidXRlVmFsdWUgPSBibGFua1VSTCgpLnN0cmluZygpOwpAQCAtMTQyOCw3ICsxNDI4
LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVAogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNBU0NJSVNwYWNlKGN1cmNoYXIpIHx8IGN1cmNoYXIgPT0gJz4nKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlVmFsdWUobV9i
dWZmZXIgKyAxLCBtX2Rlc3QgLSBtX2J1ZmZlciAtIDEpOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFt
ZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0
b3ItPnNraXBNb2RlKCkgJiYgbV9hdHRyTmFtZSA9PSBzcmNBdHRyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9jdXJyZW50VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4u
dGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYgIWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQnVp
bGRlci0+c2tpcE1vZGUoKSAmJiBtX2F0dHJOYW1lID09IHNyY0F0dHIpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgY29udGV4dChtX3Jhd0F0dHJpYnV0ZUJlZm9yZVZhbHVl
LmRhdGEoKSwgbV9yYXdBdHRyaWJ1dGVCZWZvcmVWYWx1ZS5zaXplKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX1hTU0F1ZGl0b3IgJiYgIW1fWFNTQXVkaXRvci0+Y2FuTG9h
ZEV4dGVybmFsU2NyaXB0RnJvbVNyYyhhdHRyaWJ1dGVWYWx1ZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYmxhbmtVUkwoKS5zdHJpbmcoKTsKQEAg
LTE0ODAsNyArMTQ4MCw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5
SFQKICAgICAgICAgICAgIC8vIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICAgICBib29sIGlzU2Vs
ZkNsb3NpbmdTY3JpcHQgPSBtX2N1cnJlbnRUb2tlbi5zZWxmQ2xvc2luZ1RhZyAmJiBtX2N1cnJl
bnRUb2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tlbi50YWdOYW1lID09IHNjcmlwdFRhZzsK
ICAgICAgICAgICAgIGJvb2wgYmVnaW5UYWcgPSAhbV9jdXJyZW50VG9rZW4uc2VsZkNsb3NpbmdU
YWcgJiYgbV9jdXJyZW50VG9rZW4uYmVnaW5UYWc7Ci0gICAgICAgICAgICBpZiAobV9jdXJyZW50
VG9rZW4uYmVnaW5UYWcgJiYgbV9jdXJyZW50VG9rZW4udGFnTmFtZSA9PSBzY3JpcHRUYWcgJiYg
IWluVmlld1NvdXJjZU1vZGUoKSAmJiAhbV90cmVlQ29uc3RydWN0b3ItPnNraXBNb2RlKCkpIHsK
KyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRUb2tlbi5iZWdpblRhZyAmJiBtX2N1cnJlbnRUb2tl
bi50YWdOYW1lID09IHNjcmlwdFRhZyAmJiAhaW5WaWV3U291cmNlTW9kZSgpICYmICFtX3RyZWVC
dWlsZGVyLT5za2lwTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhID0gMDsK
ICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZSA9IFN0cmluZygpOwogICAg
ICAgICAgICAgICAgIG1fc2NyaXB0VGFnQ2hhcnNldEF0dHJWYWx1ZSA9IFN0cmluZygpOwpAQCAt
MTg0Miw3ICsxODQyLDcgQEAgdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVuZCgpCiAg
ICAgfQogCiAgICAgaWYgKCFpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgIG1fdHJlZUNvbnN0
cnVjdG9yLT5maW5pc2hlZCgpOworICAgICAgICBtX3RyZWVCdWlsZGVyLT5maW5pc2hlZCgpOwog
ICAgIGVsc2UKICAgICAgICAgbV9kb2MtPmZpbmlzaGVkUGFyc2luZygpOwogfQpAQCAtMTkxMiw3
ICsxOTEyLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZQogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZXdTb3VyY2VEb2N1bWVudCo+KG1fZG9jKS0+YWRk
Vmlld1NvdXJjZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIC8vIHBhc3MgdGhlIHRva2VuIG92ZXIgdG8gdGhlIHBhcnNlciwgdGhlIHBhcnNlciBET0VT
IE5PVCBkZWxldGUgdGhlIHRva2VuCi0gICAgICAgICAgICBuID0gbV90cmVlQ29uc3RydWN0b3It
PnBhcnNlVG9rZW4oJm1fY3VycmVudFRva2VuKTsKKyAgICAgICAgICAgIG4gPSBtX3RyZWVCdWls
ZGVyLT5wYXJzZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7CiAgICAgfQogICAgIG1fY3VycmVudFRv
a2VuLnJlc2V0KCk7CiAKQEAgLTE5MjQsNyArMTkyNCw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpwcm9jZXNzRG8KICAgICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQogICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MVmlld1NvdXJjZURvY3VtZW50Kj4obV9kb2MpLT5hZGRWaWV3U291
cmNlRG9jdHlwZVRva2VuKCZtX2RvY3R5cGVUb2tlbik7CiAgICAgZWxzZQotICAgICAgICBtX3Ry
ZWVDb25zdHJ1Y3Rvci0+cGFyc2VEb2N0eXBlVG9rZW4oJm1fZG9jdHlwZVRva2VuKTsKKyAgICAg
ICAgbV90cmVlQnVpbGRlci0+cGFyc2VEb2N0eXBlVG9rZW4oJm1fZG9jdHlwZVRva2VuKTsKIH0K
IAogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp+TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKCkK
SW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDYx
Njc1KQorKysgV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIGNsYXNzIEhUTUxEb2N1bWVudDsKIGNsYXNzIEhUTUxT
Y3JpcHRFbGVtZW50OwogY2xhc3MgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDsKIGNsYXNzIEZyYW1l
VmlldzsKLWNsYXNzIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I7CitjbGFzcyBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI7CiBjbGFzcyBOb2RlOwotY2xhc3MgTGVnYWN5UHJlbG9hZFNjYW5uZXI7Citj
bGFzcyBQcmVsb2FkU2Nhbm5lcjsKIGNsYXNzIFNjcmlwdFNvdXJjZUNvZGU7CiAKIC8qKgpAQCAt
MTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpOwogCi0gICAgdmlydHVhbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yKiBodG1sVHJlZUNvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV90cmVlQ29u
c3RydWN0b3IuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIExlZ2FjeUhUTUxUcmVlQnVpbGRlciogaHRt
bFRyZWVCdWlsZGVyKCkgY29uc3QgeyByZXR1cm4gbV90cmVlQnVpbGRlci5nZXQoKTsgfQogICAg
IHZpcnR1YWwgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBhc0hUTUxEb2N1bWVudFBhcnNlcigp
IHsgcmV0dXJuIHRoaXM7IH0KIAogcHJpdmF0ZToKQEAgLTQzMiwxMiArNDMyLDEyIEBAIHByaXZh
dGU6CiAKICAgICBTZWdtZW50ZWRTdHJpbmcgbV9zcmM7CiAgICAgRG9jdW1lbnQqIG1fZG9jOwot
ICAgIE93blB0cjxMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yPiBtX3RyZWVDb25zdHJ1Y3RvcjsK
KyAgICBPd25QdHI8TGVnYWN5SFRNTFRyZWVCdWlsZGVyPiBtX3RyZWVCdWlsZGVyOwogICAgIGJv
b2wgbV9pbldyaXRlOwogICAgIGJvb2wgbV9mcmFnbWVudDsKICAgICBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb24gbV9zY3JpcHRpbmdQZXJtaXNzaW9uOwogCi0gICAgT3duUHRyPExlZ2FjeVBy
ZWxvYWRTY2FubmVyPiBtX3ByZWxvYWRTY2FubmVyOworICAgIE93blB0cjxQcmVsb2FkU2Nhbm5l
cj4gbV9wcmVsb2FkU2Nhbm5lcjsKIH07CiAKIHZvaWQgcGFyc2VMZWdhY3lIVE1MRG9jdW1lbnRG
cmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKSW5kZXg6IFdlYkNvcmUv
aHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiA2MTY3MikJKGZyb20gV2ViQ29y
ZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuY3BwOjYxNjcyKQorKysgV2ViQ29yZS9o
dG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NzQ0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0Br
ZGUub3JnKQorICAgICAgICAgICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3Jn
KQorICAgICAgICAgICAgICAoQykgMTk5OSwyMDAxIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CisgICAgICAgICAgICAgIChDKSAyMDAwLDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVyTmFtZXMuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUg
IkNvbW1lbnQuaCIKKyNpbmNsdWRlICJDb25zb2xlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VHlwZS5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCisjaW5j
bHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRExpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5Lmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIdG1sRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNYXBF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlclF1
aXJrcy5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TFRhYmxlUm93RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lmgi
CisjaW5jbHVkZSAiTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgiCisjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5oIgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK3N0YXRpYyBjb25zdCB1
bnNpZ25lZCBjTWF4UmVkdW5kYW50VGFnRGVwdGggPSAyMDsKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjUmVzaWR1YWxTdHlsZU1heERlcHRoID0gMjAwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNS
ZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQgPSA1OworCisKK3N0YXRpYyBjb25zdCBpbnQgbWlu
QmxvY2tMZXZlbFRhZ1ByaW9yaXR5ID0gMzsKKworLy8gQSBjYXAgb24gdGhlIG51bWJlciBvZiB0
YWdzIHdpdGggcHJpb3JpdHkgbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5IG9yIGhpZ2hlcgorLy8g
YWxsb3dlZCBpbiBtX2Jsb2NrU3RhY2suIFRoZSBjYXAgaXMgZW5mb3JjZWQgYnkgYWRkaW5nIHN1
Y2ggbmV3IGVsZW1lbnRzIGFzCisvLyBzaWJsaW5ncyBpbnN0ZWFkIG9mIGNoaWxkcmVuIG9uY2Ug
aXQgaXMgcmVhY2hlZC4KK3N0YXRpYyBjb25zdCBzaXplX3QgY01heEJsb2NrRGVwdGggPSA0MDk2
OworCisKK3R5cGVkZWYgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gVGFnTmFtZVNldDsKKwor
dGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUgPgorc3RhdGljIHZvaWQgYWRkVGFncyhUYWdOYW1l
U2V0JiBzZXQsIFF1YWxpZmllZE5hbWUgKCZuYW1lcylbQXJyYXlTaXplXSkKK3sKKyAgICBmb3Ig
KHNpemVfdCB4ID0gMDsgeCA8IEFycmF5U2l6ZTsgeCsrKSB7CisgICAgICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUgPSBuYW1lc1t4XTsKKyAgICAgICAgc2V0LmFkZChuYW1lLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgfQorfQorCitzdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5vbmNvcHlh
YmxlIHsKKyAgICBIVE1MU3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgdCwgaW50IGx2bCwg
Tm9kZSogbiwgYm9vbCByLCBIVE1MU3RhY2tFbGVtKiBueCkKKyAgICAgICAgOiB0YWdOYW1lKHQp
CisgICAgICAgICwgbGV2ZWwobHZsKQorICAgICAgICAsIHN0cmF5VGFibGVDb250ZW50KGZhbHNl
KQorICAgICAgICAsIG5vZGUobikKKyAgICAgICAgLCBkaWRSZWZOb2RlKHIpCisgICAgICAgICwg
bmV4dChueCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkZXJlZk5vZGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKGRpZFJlZk5vZGUpCisgICAgICAgICAgICBub2RlLT5kZXJlZigpOworICAgIH0K
KworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0
cmF5VGFibGVDb250ZW50OworICAgIE5vZGUqIG5vZGU7CisgICAgYm9vbCBkaWRSZWZOb2RlOwor
ICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7Cit9OworCisvKioKKyAqIFRoZSBwYXJzZXIgcGFyc2Vz
IHRva2VuaXplZCBpbnB1dCBpbnRvIHRoZSBkb2N1bWVudCwgYnVpbGRpbmcgdXAgdGhlCisgKiBk
b2N1bWVudCB0cmVlLiBJZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQsIHBhcnNpbmcgaXQg
aXMgc3RyYWlnaHRmb3J3YXJkLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgdG8gaGFu
ZGxlIG1hbnkgSFRNTCBkb2N1bWVudHMgdGhhdCBhcmUgbm90IHdlbGwtZm9ybWVkLAorICogc28g
dGhlIHBhcnNlciBoYXMgdG8gYmUgdG9sZXJhbnQgYWJvdXQgZXJyb3JzLgorICoKKyAqIFdlIGhh
dmUgdG8gdGFrZSBjYXJlIG9mIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgZXJyb3IgY29uZGl0aW9u
czoKKyAqCisgKiAxLiBUaGUgZWxlbWVudCBiZWluZyBhZGRlZCBpcyBleHBsaWNpdGx5IGZvcmJp
ZGRlbiBpbnNpZGUgc29tZSBvdXRlciB0YWcuCisgKiAgICBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxk
IGNsb3NlIGFsbCB0YWdzIHVwIHRvIHRoZSBvbmUsIHdoaWNoIGZvcmJpZHMKKyAqICAgIHRoZSBl
bGVtZW50LCBhbmQgYWRkIGl0IGFmdGVyd2FyZHMuCisgKgorICogMi4gV2UgYXJlIG5vdCBhbGxv
d2VkIHRvIGFkZCB0aGUgZWxlbWVudCBkaXJlY3RseS4gSXQgY291bGQgYmUgdGhhdAorICogICAg
dGhlIHBlcnNvbiB3cml0aW5nIHRoZSBkb2N1bWVudCBmb3Jnb3Qgc29tZSB0YWcgaW4gYmV0d2Vl
biAob3IgdGhhdCB0aGUKKyAqICAgIHRhZyBpbiBiZXR3ZWVuIGlzIG9wdGlvbmFsKS4gVGhpcyBj
b3VsZCBiZSB0aGUgY2FzZSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAqICAgIHRhZ3M6IEhUTUwgSEVB
RCBCT0RZIFRCT0RZIFRSIFREIExJIChkaWQgSSBmb3JnZXQgYW55PykuCisgKgorICogMy4gV2Ug
d2FudCB0byBhZGQgYSBibG9jayBlbGVtZW50IGluc2lkZSB0byBhbiBpbmxpbmUgZWxlbWVudC4g
Q2xvc2UgYWxsCisgKiAgICBpbmxpbmUgZWxlbWVudHMgdXAgdG8gdGhlIG5leHQgaGlnaGVyIGJs
b2NrIGVsZW1lbnQuCisgKgorICogNC4gSWYgdGhpcyBkb2Vzbid0IGhlbHAsIGNsb3NlIGVsZW1l
bnRzIHVudGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFkZCB0aGUKKyAqICAgIGVsZW1lbnQgb3IgaWdu
b3JlIHRoZSB0YWcuCisgKgorICovCisKK0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3IoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3J0RXJyb3Jz
KQorICAgIDogbV9kb2N1bWVudChkb2MpCisgICAgLCBtX2N1cnJlbnQoZG9jKQorICAgICwgbV9k
aWRSZWZDdXJyZW50KGZhbHNlKQorICAgICwgbV9ibG9ja1N0YWNrKDApCisgICAgLCBtX2Jsb2Nr
c0luU3RhY2soMCkKKyAgICAsIG1fdHJlZURlcHRoKDApCisgICAgLCBtX2hhc1BFbGVtZW50SW5T
Y29wZShOb3RJblNjb3BlKQorICAgICwgbV9pbkJvZHkoZmFsc2UpCisgICAgLCBtX2hhdmVDb250
ZW50KGZhbHNlKQorICAgICwgbV9oYXZlRnJhbWVTZXQoZmFsc2UpCisgICAgLCBtX2lzUGFyc2lu
Z0ZyYWdtZW50KGZhbHNlKQorICAgICwgbV9yZXBvcnRFcnJvcnMocmVwb3J0RXJyb3JzKQorICAg
ICwgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoZmFsc2UpCisgICAgLCBtX2lu
U3RyYXlUYWJsZUNvbnRlbnQoMCkKKyAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQpCisgICAgLCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50LT5wYWdl
KCkgPyBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRlSFRNTFBh
cnNlclF1aXJrcygpIDogMCkKK3sKK30KKworTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50KiBmcmFnLCBGcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKKyAgICA6IG1fZG9jdW1lbnQo
ZnJhZy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY3VycmVudChmcmFnKQorICAgICwgbV9kaWRSZWZD
dXJyZW50KHRydWUpCisgICAgLCBtX2Jsb2NrU3RhY2soMCkKKyAgICAsIG1fYmxvY2tzSW5TdGFj
aygwKQorICAgICwgbV90cmVlRGVwdGgoMCkKKyAgICAsIG1faGFzUEVsZW1lbnRJblNjb3BlKE5v
dEluU2NvcGUpCisgICAgLCBtX2luQm9keSh0cnVlKQorICAgICwgbV9oYXZlQ29udGVudChmYWxz
ZSkKKyAgICAsIG1faGF2ZUZyYW1lU2V0KGZhbHNlKQorICAgICwgbV9pc1BhcnNpbmdGcmFnbWVu
dCh0cnVlKQorICAgICwgbV9yZXBvcnRFcnJvcnMoZmFsc2UpCisgICAgLCBtX2hhbmRsaW5nUmVz
aWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKKyAgICAsIG1faW5TdHJheVRhYmxlQ29udGVu
dCgwKQorICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCisg
ICAgLCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50LT5wYWdlKCkgPyBtX2RvY3VtZW50LT5wYWdl
KCktPmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIDogMCkKK3sK
KyAgICBpZiAoZnJhZykKKyAgICAgICAgZnJhZy0+cmVmKCk7Cit9CisKK0xlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6On5MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCkKK3sKKyAgICBmcmVlQmxv
Y2soKTsKKyAgICBpZiAobV9kaWRSZWZDdXJyZW50KQorICAgICAgICBtX2N1cnJlbnQtPmRlcmVm
KCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVzZXQoKQoreworICAg
IEFTU0VSVCghbV9pc1BhcnNpbmdGcmFnbWVudCk7CisKKyAgICBzZXRDdXJyZW50KG1fZG9jdW1l
bnQpOworCisgICAgZnJlZUJsb2NrKCk7CisKKyAgICBtX3RyZWVEZXB0aCA9IDA7CisgICAgbV9p
bkJvZHkgPSBmYWxzZTsKKyAgICBtX2hhdmVGcmFtZVNldCA9IGZhbHNlOworICAgIG1faGF2ZUNv
bnRlbnQgPSBmYWxzZTsKKyAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQgPSAwOworCisgICAgbV9j
dXJyZW50Rm9ybUVsZW1lbnQgPSAwOworICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOworICAg
IG1faGVhZCA9IDA7CisgICAgbV9pc2luZGV4RWxlbWVudCA9IDA7CisKKyAgICBtX3NraXBNb2Rl
VGFnID0gbnVsbEF0b207CisgICAgCisgICAgaWYgKG1fcGFyc2VyUXVpcmtzKQorICAgICAgICBt
X3BhcnNlclF1aXJrcy0+cmVzZXQoKTsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpzZXRDdXJyZW50KE5vZGUqIG5ld0N1cnJlbnQpIAoreworICAgIGJvb2wgZGlkUmVmTmV3
Q3VycmVudCA9IG5ld0N1cnJlbnQgJiYgbmV3Q3VycmVudCAhPSBtX2RvY3VtZW50OworICAgIGlm
IChkaWRSZWZOZXdDdXJyZW50KSAKKyAgICAgICAgbmV3Q3VycmVudC0+cmVmKCk7IAorICAgIGlm
IChtX2RpZFJlZkN1cnJlbnQpIAorICAgICAgICBtX2N1cnJlbnQtPmRlcmVmKCk7CisgICAgbV9j
dXJyZW50ID0gbmV3Q3VycmVudDsKKyAgICBtX2RpZFJlZkN1cnJlbnQgPSBkaWRSZWZOZXdDdXJy
ZW50OworfQorCitpbmxpbmUgc3RhdGljIGludCB0YWdQcmlvcml0eU9mTm9kZShOb2RlKiBuKQor
eworICAgIHJldHVybiBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKK30KKworaW5saW5lIHZvaWQgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6bGltaXREZXB0aChpbnQgdGFnUHJpb3JpdHkpCit7CisgICAgd2hpbGUg
KG1fdHJlZURlcHRoID49IG1heERPTVRyZWVEZXB0aCkKKyAgICAgICAgcG9wQmxvY2sobV9ibG9j
a1N0YWNrLT50YWdOYW1lKTsKKyAgICBpZiAodGFnUHJpb3JpdHkgPj0gbWluQmxvY2tMZXZlbFRh
Z1ByaW9yaXR5KSB7CisgICAgICAgIHdoaWxlIChtX2Jsb2Nrc0luU3RhY2sgPj0gY01heEJsb2Nr
RGVwdGgpCisgICAgICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUpOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5zZXJ0Tm9k
ZUFmdGVyTGltaXREZXB0aChOb2RlKiBuLCBib29sIGZsYXQpCit7CisgICAgbGltaXREZXB0aCh0
YWdQcmlvcml0eU9mTm9kZShuKSk7CisgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Cit9
CisKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cGFyc2VUb2tl
bihUb2tlbiogdCkKK3sKKyAgICBpZiAoIW1fc2tpcE1vZGVUYWcuaXNOdWxsKCkpIHsKKyAgICAg
ICAgaWYgKCF0LT5iZWdpblRhZyAmJiB0LT50YWdOYW1lID09IG1fc2tpcE1vZGVUYWcpCisgICAg
ICAgICAgICAvLyBGb3VuZCB0aGUgZW5kIHRhZyBmb3IgdGhlIGN1cnJlbnQgc2tpcCBtb2RlLCBz
byB3ZSdyZSBkb25lIHNraXBwaW5nLgorICAgICAgICAgICAgbV9za2lwTW9kZVRhZyA9IG51bGxB
dG9tOworICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnQtPmxvY2FsTmFtZSgpID09IHQtPnRhZ05h
bWUpCisgICAgICAgICAgICAvLyBEbyBub3Qgc2tpcCA8L2lmcmFtZT4uCisgICAgICAgICAgICAv
LyBGSVhNRTogV2hhdCBkb2VzIHRoYXQgY29tbWVudCBtZWFuPyBIb3cgY2FuIGl0IGJlIHJpZ2h0
IHRvIHBhcnNlIGEgdG9rZW4gd2l0aG91dCBjbGVhcmluZyBtX3NraXBNb2RlVGFnPworICAgICAg
ICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gQmUg
Y29tcGF0aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2UgPGJyPi4K
KyAgICBpZiAodC0+aXNDbG9zZVRhZyhiclRhZykgJiYgbV9kb2N1bWVudC0+aW5Db21wYXRNb2Rl
KCkpIHsKKyAgICAgICAgcmVwb3J0RXJyb3IoTWFsZm9ybWVkQlJFcnJvcik7CisgICAgICAgIHQt
PmJlZ2luVGFnID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7CisgICAg
ICAgIHByb2Nlc3NDbG9zZVRhZyh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
Ly8gSWdub3JlIHNwYWNlcywgaWYgd2UncmUgbm90IGluc2lkZSBhIHBhcmFncmFwaCBvciBvdGhl
ciBpbmxpbmUgY29kZS4KKyAgICAvLyBEbyBub3QgYWx0ZXIgdGhlIHRleHQgaWYgaXQgaXMgcGFy
dCBvZiBhIHNjcmlwdFRhZy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50
ZXh0ICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc2NyaXB0VGFnKSB7CisgICAgICAgIGlm
IChtX2luQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHN0
eWxlVGFnICYmCisgICAgICAgICAgICBtX2N1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHRpdGxlVGFn
ICYmICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICBtX2hh
dmVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxOb2RlPiBuOworICAg
ICAgICBTdHJpbmcgdGV4dCA9IHQtPnRleHQuZ2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGNoYXJz
TGVmdCA9IHRleHQubGVuZ3RoKCk7CisgICAgICAgIHdoaWxlIChjaGFyc0xlZnQpIHsKKyAgICAg
ICAgICAgIC8vIHNwbGl0IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5vZGVzIG9mIG1hbmFnZWFi
bGUgc2l6ZQorICAgICAgICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChtX2Rv
Y3VtZW50LCB0ZXh0LCBjaGFyc0xlZnQpOworICAgICAgICAgICAgaWYgKCFpbnNlcnROb2RlQWZ0
ZXJMaW1pdERlcHRoKG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8Tm9kZT4gbiA9IGdldE5vZGUodCk7CisgICAgLy8ganVzdCB0byBiZSBzdXJlLCBhbmQg
dG8gY2F0Y2ggY3VycmVudGx5IHVuaW1wbGVtZW50ZWQgc3R1ZmYKKyAgICBpZiAoIW4pCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gc2V0IGF0dHJpYnV0ZXMKKyAgICBpZiAobi0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihuLmdldCgpKTsKKyAgICAgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBG
cmFnbWVudFNjcmlwdGluZ0FsbG93ZWQgfHwgdC0+dGFnTmFtZSAhPSBzY3JpcHRUYWcpCisgICAg
ICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMuZ2V0KCksIG1fc2NyaXB0aW5nUGVy
bWlzc2lvbik7CisKKyAgICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MK
KyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzT3B0aW9uYWwp
CisgICAgICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAvLyBJZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGEgZm9yYmlkZGVuIGVuZCB0YWcgcmVxdWly
ZW1lbnQsIGFuZCBpZiB0aGUgYnJva2VuIFhNTCBzZWxmLWNsb3NpbmcKKyAgICAgICAgLy8gc3lu
dGF4IHdhcyB1c2VkLCByZXBvcnQgYW4gZXJyb3IuCisgICAgICAgIGlmICh0LT5icm9rZW5YTUxT
dHlsZSAmJiBlLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikgewor
ICAgICAgICAgICAgaWYgKHQtPnRhZ05hbWUgPT0gc2NyaXB0VGFnKQorICAgICAgICAgICAgICAg
IHJlcG9ydEVycm9yKEluY29ycmVjdFhNTENsb3NlU2NyaXB0V2FybmluZyk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoSW5jb3JyZWN0WE1MU2VsZkNsb3Nl
RXJyb3IsICZ0LT50YWdOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaW5zZXJ0
Tm9kZUFmdGVyTGltaXREZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpIHsKKyAgICAg
ICAgLy8gd2UgY291bGRuJ3QgaW5zZXJ0IHRoZSBub2RlCisKKyAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihuLmdldCgpKTsKKyAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVtZW50ID09IG4pCisgICAgICAgICAg
ICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gMDsKKworICAgICAgICBpZiAobV9jdXJyZW50Rm9ybUVs
ZW1lbnQgPT0gbikKKyAgICAgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsKKworICAg
ICAgICBpZiAobV9oZWFkID09IG4pCisgICAgICAgICAgICBtX2hlYWQgPSAwOworCisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpwYXJzZURvY3R5cGVUb2tlbihEb2N0eXBlVG9rZW4qIHQpCit7CisgICAg
Ly8gSWdub3JlIGFueSBkb2N0eXBlIGFmdGVyIHRoZSBmaXJzdC4gIElnbm9yZSBkb2N0eXBlcyBp
biBmcmFnbWVudHMuCisgICAgaWYgKG1fZG9jdW1lbnQtPmRvY3R5cGUoKSB8fCBtX2lzUGFyc2lu
Z0ZyYWdtZW50IHx8IG1fY3VycmVudCAhPSBtX2RvY3VtZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBNYWtlIGEgbmV3IGRvY3R5cGUgbm9kZSBhbmQgc2V0IGl0IGFzIG91ciBkb2N0eXBl
LgorICAgIG1fZG9jdW1lbnQtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jdW1l
bnQsIFN0cmluZzo6YWRvcHQodC0+bV9uYW1lKSwgU3RyaW5nOjphZG9wdCh0LT5tX3B1YmxpY0lE
KSwgU3RyaW5nOjphZG9wdCh0LT5tX3N5c3RlbUlEKSkpOworICAgIGlmICh0LT5tX2ZvcmNlUXVp
cmtzKQorICAgICAgICBtX2RvY3VtZW50LT5zZXRQYXJzZU1vZGUoRG9jdW1lbnQ6OkNvbXBhdCk7
Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9uKGNvbnN0IE5vZGUqIG4pCit7CisgICAg
cmV0dXJuIG4tPmhhc1RhZ05hbWUodGJvZHlUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGZvb3RUYWcp
IHx8IG4tPmhhc1RhZ05hbWUodGhlYWRUYWcpOworfQorCitzdGF0aWMgYm9vbCBpc1RhYmxlUGFy
dChjb25zdCBOb2RlKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRyVGFnKSB8fCBu
LT5oYXNUYWdOYW1lKHRkVGFnKSB8fCBuLT5oYXNUYWdOYW1lKHRoVGFnKQorICAgICAgICB8fCBp
c1RhYmxlU2VjdGlvbihuKTsKK30KKworc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQoY29uc3Qg
Tm9kZSogbikKK3sKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0YWJsZVRhZykgfHwgaXNUYWJs
ZVBhcnQobik7Cit9CisKK3N0YXRpYyBib29sIGlzU2NvcGluZ1RhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCit7CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gYXBwbGV0VGFnIHx8IHRhZ05h
bWUgPT0gY2FwdGlvblRhZyB8fCB0YWdOYW1lID09IHRkVGFnCisgICAgICAgIHx8IHRhZ05hbWUg
PT0gdGhUYWcgfHwgdGFnTmFtZSA9PSBidXR0b25UYWcgfHwgdGFnTmFtZSA9PSBtYXJxdWVlVGFn
CisgICAgICAgIHx8IHRhZ05hbWUgPT0gb2JqZWN0VGFnIHx8IHRhZ05hbWUgPT0gdGFibGVUYWcg
fHwgdGFnTmFtZSA9PSBodG1sVGFnOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6Omluc2VydE5vZGUoTm9kZSogbiwgYm9vbCBmbGF0KQoreworICAgIFJlZlB0cjxOb2RlPiBw
cm90ZWN0Tm9kZShuKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbi0+
bG9jYWxOYW1lKCk7CisgICAgCisgICAgLy8gPHRhYmxlPiBpcyBuZXZlciBhbGxvd2VkIGluc2lk
ZSBzdHJheSB0YWJsZSBjb250ZW50LiAgQWx3YXlzIHBvcCBvdXQgb2YgdGhlIHN0cmF5IHRhYmxl
IGNvbnRlbnQKKyAgICAvLyBhbmQgY2xvc2UgdXAgdGhlIGZpcnN0IHRhYmxlLCBhbmQgdGhlbiBz
dGFydCB0aGUgc2Vjb25kIHRhYmxlIGFzIGEgc2libGluZy4KKyAgICBpZiAobV9pblN0cmF5VGFi
bGVDb250ZW50ICYmIGxvY2FsTmFtZSA9PSB0YWJsZVRhZykKKyAgICAgICAgcG9wQmxvY2sodGFi
bGVUYWcpOworCisgICAgaWYgKG1fcGFyc2VyUXVpcmtzICYmICFtX3BhcnNlclF1aXJrcy0+c2hv
dWxkSW5zZXJ0Tm9kZShtX2N1cnJlbnQsIG4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpbnQgdGFnUHJpb3JpdHkgPSB0YWdQcmlvcml0eU9mTm9kZShuKTsKKworICAgIC8vIGxldCdz
IGJlIHN0dXBpZCBhbmQganVzdCB0cnkgdG8gaW5zZXJ0IGl0LgorICAgIC8vIHRoaXMgc2hvdWxk
IHdvcmsgaWYgdGhlIGRvY3VtZW50IGlzIHdlbGwtZm9ybWVkCisgICAgTm9kZSogbmV3Tm9kZSA9
IG1fY3VycmVudC0+YWRkQ2hpbGQobik7CisgICAgaWYgKCFuZXdOb2RlKQorICAgICAgICByZXR1
cm4gaGFuZGxlRXJyb3IobiwgZmxhdCwgbG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7IC8vIFRyeSB0
byBoYW5kbGUgdGhlIGVycm9yLgorCisgICAgLy8gZG9uJ3QgcHVzaCBlbGVtZW50cyB3aXRob3V0
IGVuZCB0YWdzIChlLmcuLCA8aW1nPikgb24gdGhlIHN0YWNrCisgICAgYm9vbCBwYXJlbnRBdHRh
Y2hlZCA9IG1fY3VycmVudC0+YXR0YWNoZWQoKTsKKyAgICBpZiAodGFnUHJpb3JpdHkgPiAwICYm
ICFmbGF0KSB7CisgICAgICAgIGlmIChuZXdOb2RlID09IG1fY3VycmVudCkgeworICAgICAgICAg
ICAgLy8gVGhpcyBjYXNlIHNob3VsZCBvbmx5IGJlIGhpdCB3aGVuIGEgZGVtb3RlZCA8Zm9ybT4g
aXMgcGxhY2VkIGluc2lkZSBhIHRhYmxlLgorICAgICAgICAgICAgQVNTRVJUKGxvY2FsTmFtZSA9
PSBmb3JtVGFnKTsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKEZvcm1JbnNpZGVUYWJsZVBhcnRF
cnJvciwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgSFRNTEZvcm1FbGVt
ZW50KiBmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obik7CisgICAgICAgICAg
ICBmb3JtLT5zZXREZW1vdGVkKHRydWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gVGhlIHB1c2hCbG9jayBmdW5jdGlvbiB0cmFuc2ZlcnMgb3duZXJzaGlwIG9mIGN1cnJlbnQg
dG8gdGhlIGJsb2NrIHN0YWNrCisgICAgICAgICAgICAvLyBzbyB3ZSdyZSBndWFyYW50ZWVkIHRo
YXQgbV9kaWRSZWZDdXJyZW50IGlzIGZhbHNlLiBUaGUgY29kZSBiZWxvdyBpcyBhbgorICAgICAg
ICAgICAgLy8gb3B0aW1pemVkIHZlcnNpb24gb2Ygc2V0Q3VycmVudCB0aGF0IHRha2VzIGFkdmFu
dGFnZSBvZiB0aGF0IGZhY3QgYW5kIGFsc28KKyAgICAgICAgICAgIC8vIGFzc3VtZXMgdGhhdCBu
ZXdOb2RlIGlzIG5laXRoZXIgMCBub3IgYSBwb2ludGVyIHRvIHRoZSBkb2N1bWVudC4KKyAgICAg
ICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgIG5l
d05vZGUtPmJlZ2luUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoIW1fZGlk
UmVmQ3VycmVudCk7CisgICAgICAgICAgICBuZXdOb2RlLT5yZWYoKTsgCisgICAgICAgICAgICBt
X2N1cnJlbnQgPSBuZXdOb2RlOworICAgICAgICAgICAgbV9kaWRSZWZDdXJyZW50ID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkg
JiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICBuLT5hdHRhY2goKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAocGFyZW50QXR0YWNoZWQgJiYgIW4tPmF0dGFjaGVkKCkgJiYg
IW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICBuLT5hdHRhY2goKTsKKyAgICAgICAg
bi0+ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisgICAgfQorCisgICAgaWYgKGxvY2FsTmFtZSA9
PSBodG1sVGFnICYmIG1fZG9jdW1lbnQtPmZyYW1lKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQp
CisgICAgICAgIG1fZG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50
RWxlbWVudEF2YWlsYWJsZSgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAgIC8vIEVy
cm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNp
ZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7
CisKKyAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBkZWNpZGUg
aG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCisgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSkgewor
ICAgICAgICBIVE1MRWxlbWVudCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obik7Cisg
ICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUodHJUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0aFRh
ZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRkVGFnKSkgeworICAgICAgICAgICAgaWYgKG1faW5TdHJh
eVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgeworICAgICAgICAg
ICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxOYW1lLCAm
bV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgLy8gcG9wIG91dCB0byB0
aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCisgICAgICAgICAgICAgICAg
d2hpbGUgKG1fYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkKKyAgICAg
ICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5z
ZXJ0Tm9kZShuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2Nh
bE5hbWUoaGVhZFRhZykpIHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50
Tm9kZSgpICYmICFtX2N1cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKKyAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2Nh
bE5hbWUobWV0YVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpIHx8IGgtPmhhc0xvY2Fs
TmFtZShiYXNlVGFnKSkgeworICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKKyAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7
CisgICAgICAgICAgICAgICAgY3JlYXRlZEhlYWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG1faGVhZCkgeworICAgICAgICAgICAgICAgIGlmICghY3JlYXRlZEhlYWQp
CisgICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250ZW50RXJy
b3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9oZWFkLT5hZGRDaGlsZChuKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW4t
PmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoaHRtbFRhZykp
IHsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkgeworICAg
ICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSAmJiBtX2RvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAhbV9pc1BhcnNp
bmdGcmFnbWVudCkgeworICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihSZWR1bmRhbnRI
VE1MQm9keUVycm9yLCAmbG9jYWxOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2
ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5n
IG9uZQorICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRl
IGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICBOYW1lZE5v
ZGVNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZXhpc3RpbmdIVE1MID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgTmFtZWROb2RlTWFwKiBibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1dGVzKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBt
YXAtPmxlbmd0aCgpOyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSog
aXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhpc3RpbmdIVE1MLT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwgaXQtPnZhbHVl
KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShzdHlsZVRhZykgfHwg
aC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykpIHsKKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZEhl
YWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghbV9oZWFkKSB7CisgICAgICAgICAgICAgICAg
Y3JlYXRlSGVhZCgpOworICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2hlYWQpIHsKKyAgICAgICAgICAgICAgICBOb2Rl
KiBuZXdOb2RlID0gbV9oZWFkLT5hZGRDaGlsZChuKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5l
d05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5hbWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkSGVhZCkKKyAgICAg
ICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZENvbnRlbnRFcnJvciwgJmxv
Y2FsTmFtZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOworICAgICAgICAgICAgICAg
IHNldEN1cnJlbnQobmV3Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgp
ICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2go
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChtX2luQm9keSkgeworICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKGgtPnRhZ1FO
YW1lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYm9keVRhZykpIHsKKyAgICAgICAgICAg
IGlmIChtX2luQm9keSAmJiBtX2RvY3VtZW50LT5ib2R5KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21l
bnQpIHsKKyAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQu
Li4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCisgICAgICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMK
KyAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29s
b3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgorICAgICAgICAgICAgICAgIHJlcG9ydEVy
cm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2NhbE5hbWUpOworICAgICAgICAgICAgICAg
IE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVz
KHRydWUpOworICAgICAgICAgICAgICAgIEVsZW1lbnQqIGV4aXN0aW5nQm9keSA9IG1fZG9jdW1l
bnQtPmJvZHkoKTsKKyAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAqIGJtYXAgPSBleGlzdGlu
Z0JvZHktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
bCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAgICAgICAg
ICAgIEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+bmFtZSgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4aXN0aW5nQm9keS0+c2V0QXR0cmlidXRlKGl0LT5uYW1lKCksIGl0
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfSBlbHNlIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoYXJlYVRhZykpIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkQXJlYUVycm9yLCAm
bV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50TWFwRWxl
bWVudC0+YWRkQ2hpbGQobik7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYm
ICFtX2lzUGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsK
KyAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8IGgtPmhhc0xvY2FsTmFt
ZShjYXB0aW9uVGFnKSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkKG1fY3VycmVu
dCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0
KG1fY3VycmVudCkpCisgICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG4tPmlzQ29tbWVudE5vZGUoKSAmJiAhbV9oZWFkKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyAyLiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJlbnRseSBh
Y3RpdmUgZWxlbWVudCB0byBkbyBzb21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaWYg
KG1fY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50KiBoID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX2N1cnJlbnQpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1lID0gaC0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmICho
LT5oYXNMb2NhbE5hbWUoaHRtbFRhZykpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbHQg
PSBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pIDogMDsK
KyAgICAgICAgICAgIGlmIChlbHQgJiYgKGVsdC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykgfHwg
ZWx0LT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNM
b2NhbE5hbWUobWV0YVRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwKKyAgICAg
ICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8IGVsdC0+aGFzTG9jYWxO
YW1lKGVtYmVkVGFnKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKHRpdGxl
VGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShpc2luZGV4VGFnKSB8fAorICAgICAgICAgICAgICAg
IGVsdC0+aGFzTG9jYWxOYW1lKGJhc2VUYWcpKSkgeworICAgICAgICAgICAgICAgIGlmICghbV9o
ZWFkKSB7CisgICAgICAgICAgICAgICAgICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3Jl
YXRlKG1fZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKG1faGVhZC5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4
dCo+KG4pOworICAgICAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIW1faGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IGhlYWQgZXhpc3RzLgorICAgICAgICAgICAgICAgICAg
ICAvLyBCdXQgbm90IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBNYWlsLCB3aGVyZSB0aGUgaW1wbGlj
aXQgPGhlYWQ+IGlzbid0IGV4cGVjdGVkIC0gPHJkYXI6Ly9wcm9ibGVtLzY4NjM3OTU+CisgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9pc1BhcnNpbmdGcmFnbWVudCAmJiBzaG91bGRDcmVhdGVJ
bXBsaWNpdEhlYWQobV9kb2N1bWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVI
ZWFkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgcG9wQmxvY2soaGVhZFRhZyk7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2Rl
KEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1lc2V0Q29udGVudEVycm9yLCAm
bG9jYWxOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2Nh
bE5hbWUoaGVhZFRhZykpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGh0bWxUYWcp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIGJvZHkgc3RhcnRzIGhlcmUuLi4KKyAgICAg
ICAgICAgICAgICBpZiAoIW1faGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChjdXJyZW50VGFnTmFtZSA9PSBoZWFkVGFnKTsKKyAgICAgICAgICAgICAgICAgICAgcG9w
QmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsK
KyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZSht
X2RvY3VtZW50KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihN
aXNwbGFjZWRGcmFtZXNldENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGFkZHJlc3NUYWcpIHx8IGgtPmhh
c0xvY2FsTmFtZShmb250VGFnKQorICAgICAgICAgICAgICAgICAgIHx8IGgtPmhhc0xvY2FsTmFt
ZShzdHlsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSkgeworICAgICAgICAgICAg
cmVwb3J0RXJyb3IoTWlzcGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJy
ZW50VGFnTmFtZSk7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5h
bWUoY2FwdGlvblRhZykpIHsKKyAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNh
cHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICByZXBv
cnRFcnJvcihNaXNwbGFjZWRDYXB0aW9uQ29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsKKyAgICAg
ICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgIGlmIChpc1RhYmxl
UGFydChuKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpIHx8IGgtPmhhc0xvY2Fs
TmFtZSh0clRhZykgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKHRhYmxlVGFnKSkgeworICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3Bs
YWNlZFRhYmxlRXJyb3IsICZjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKG1f
aXNQYXJzaW5nRnJhZ21lbnQgJiYgIWgtPmhhc0xvY2FsTmFtZSh0YWJsZVRhZykpCisgICAgICAg
ICAgICAgICAgICAgIC8vIGZyYWdtZW50IG1heSBjb250YWluIHRhYmxlIHBhcnRzIHdpdGhvdXQg
PHRhYmxlPiBhbmNlc3RvciwgcG9wIHRoZW0gb25lIGJ5IG9uZQorICAgICAgICAgICAgICAgICAg
ICBwb3BCbG9jayhoLT5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9j
YWxOYW1lKTsgLy8gZW5kIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OyAgICAgIC8vIC4uLmFuZCBzdGFydCBhIG5ldyBvbmUKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY3VycmVudDsKKyAgICAgICAgICAgICAgICBOb2RlKiBwYXJlbnQgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgbWF5IGhhdmUgcmVt
b3ZlZCB0aGUgY3VycmVudCBub2RlJ3MgcGFyZW50IGZyb20gdGhlIERPTQorICAgICAgICAgICAg
ICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMzcKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRvIHJlYWwgcmVjb3ZlcnkgaGVyZSBhbmQg
cmUtcGFyZW50IHdpdGggdGhlIGNvcnJlY3Qgbm9kZS4KKyAgICAgICAgICAgICAgICBpZiAoIXBh
cmVudCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IE5vZGUqIGdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgICAg
ICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpIHx8CisgICAgICAgICAgICAgICAgICAgIChoLT5oYXNM
b2NhbE5hbWUodHJUYWcpICYmCisgICAgICAgICAgICAgICAgICAgICBpc1RhYmxlU2VjdGlvbihw
YXJlbnQpICYmIGdyYW5kcGFyZW50ICYmIGdyYW5kcGFyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFn
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICgoIW4tPmhhc1RhZ05hbWUodGRUYWcpICYmICFu
LT5oYXNUYWdOYW1lKHRoVGFnKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFzVGFn
TmFtZShmb3JtVGFnKSAmJiAhbi0+aGFzVGFnTmFtZShzY3JpcHRUYWcpKSAmJiBpc1RhYmxlU2Vj
dGlvbihub2RlKSAmJgorICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKHRh
YmxlVGFnKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5oYXNUYWdOYW1l
KHRhYmxlVGFnKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUt
Pmhhc1RhZ05hbWUodHJUYWcpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdpdGggZnJhZ21lbnRzCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUo
biwgbm9kZSwgZWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWVjKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnRFcnJvcihTdHJheVRhYmxlQ29udGVudEVycm9yLCAmbG9jYWxO
YW1lLCAmY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlz
SFRNTEVsZW1lbnQoKSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIWZsYXQgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKS0+ZW5kVGFnUmVx
dWlyZW1lbnQoKSAhPSBUYWdTdGF0dXNGb3JiaWRkZW4pCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFn
UHJpb3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmJlZ2luUGFyc2luZ0No
aWxkcmVuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCFlYykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9j
dXJyZW50LT5oYXNUYWdOYW1lKHRyVGFnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVw
b3J0RXJyb3IoVGFibGVQYXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRkVGFnLmxvY2Fs
TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQ6OmNyZWF0ZSh0ZFRhZywgbV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBhbiBlcnJvciBpbiB0aGlzIGNh
c2UsIHNpbmNlIG1ha2luZyBhIDx0Ym9keT4gaGFwcGVucyBhbGwgdGhlIHRpbWUgd2hlbiB5b3Ug
aGF2ZSA8dGFibGU+PHRyPiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBpdCBpc24n
dCByZWFsbHkgYSBwYXJzZSBlcnJvciBwZXIgc2UuCisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnROb2RlKEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjcmVhdGUodGJvZHlUYWcsIG1fZG9j
dW1lbnQpLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZsb2NhbE5h
bWUsICZ0clRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlKEhUTUxUYWJsZVJvd0VsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShvYmplY3RUYWcpKSB7CisgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFj
ZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKKyAgICAg
ICAgICAgIHBvcEJsb2NrKG9iamVjdFRhZyk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUocFRhZykgfHwgaXNIZWFkaW5nVGFn
KGN1cnJlbnRUYWdOYW1lKSkgeworICAgICAgICAgICAgaWYgKCFpc0lubGluZShuKSkgeworICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUob3B0aW9uVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUob3B0Z3JvdXBUYWcpKSB7Cisg
ICAgICAgICAgICBpZiAobG9jYWxOYW1lID09IG9wdGdyb3VwVGFnKSB7CisgICAgICAgICAgICAg
ICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc2VsZWN0VGFnKSB7Cisg
ICAgICAgICAgICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4u
IExldCdzIGRvIHRoZSBzYW1lCisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoc2VsZWN0
VGFnKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBpbnB1dFRhZyB8fCBsb2NhbE5h
bWUgPT0gdGV4dGFyZWFUYWcpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFj
ZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKKyAgICAg
ICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKGNvbGdyb3VwVGFnKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05h
bWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIWgt
Pmhhc0xvY2FsTmFtZShib2R5VGFnKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5lKG1fY3Vy
cmVudCkpIHsKKyAgICAgICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKKyAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAobV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7
CisgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9kb2N1bWVu
dC0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEh0bWxF
bGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAgICAgICAgaGFuZGxlZCA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzLiBJZiB3ZSBjb3VsZG4ndCBoYW5k
bGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQgYXR0ZW1wdCB0byBlcnJvci1jb3Jy
ZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkgeworICAgICAgICByZXBvcnRFcnJvcihJZ25v
cmVkQ29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGluc2VydE5vZGUobik7Cit9
CisKK3R5cGVkZWYgYm9vbCAoTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6KkNyZWF0ZUVycm9y
Q2hlY2tGdW5jKShUb2tlbiogdCwgUmVmUHRyPE5vZGU+Jik7Cit0eXBlZGVmIEhhc2hNYXA8QXRv
bWljU3RyaW5nSW1wbCosIENyZWF0ZUVycm9yQ2hlY2tGdW5jPiBGdW5jdGlvbk1hcDsKKworYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiog
dCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gVGV4dDo6Y3JlYXRlKG1f
ZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiog
dCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcmVzdWx0ID0gQ29tbWVudDo6Y3JlYXRl
KG1fZG9jdW1lbnQsIHQtPnRleHQuZ2V0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYgcmVzdWx0KQoreworICAgIGlmICghbV9oZWFkIHx8IG1fY3VycmVudC0+
bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBtX2hlYWQgPSBIVE1MSGVhZEVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAgICAgcmVzdWx0ID0gbV9oZWFkOworICAgIH0g
ZWxzZQorICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpib2R5Q3JlYXRl
RXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCit7CisgICAgLy8gYm9keSBubyBsb25n
ZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKKyAgICBpZiAobV9oYXZlRnJhbWVTZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCBoZWFkIGV4
aXN0cyAodW5sZXNzIHBhcnNpbmcgYSBmcmFnbWVudCkuCisgICAgLy8gQnV0IG5vdCBmb3Igb2xk
ZXIgdmVyc2lvbnMgb2YgTWFpbCwgd2hlcmUgdGhlIGltcGxpY2l0IDxoZWFkPiBpc24ndCBleHBl
Y3RlZCAtIDxyZGFyOi8vcHJvYmxlbS82ODYzNzk1PgorICAgIGlmICghbV9pc1BhcnNpbmdGcmFn
bWVudCAmJiBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQobV9kb2N1bWVudCkpCisgICAgICAgIGNy
ZWF0ZUhlYWQoKTsKKyAgICAKKyAgICBwb3BCbG9jayhoZWFkVGFnKTsKKyAgICBzdGFydEJvZHko
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAg
IHBvcEJsb2NrKGhlYWRUYWcpOworICAgIGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJhbWVTZXQg
JiYgIW1faGF2ZUNvbnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soYm9keVRhZyk7CisgICAgICAg
IC8vICMjIyBhY3R1YWxseSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBub3cgaGlk
ZGVuICJib2R5IiBlbGVtZW50CisgICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJl
aGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQorICAgICAgICAvLyBy
ZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3JrIGFzIGxv
bmcgYXMgdGhlcmUgaXMKKyAgICAgICAgLy8gbm8gc2l0ZSBhY3R1YWxseSByZWx5aW5nIG9uIHRo
YXQgZGV0YWlsIChEaXJrKQorICAgICAgICBpZiAobV9kb2N1bWVudC0+Ym9keSgpICYmICFtX2lz
UGFyc2luZ0ZyYWdtZW50KQorICAgICAgICAgICAgbV9kb2N1bWVudC0+Ym9keSgpLT5zZXRBdHRy
aWJ1dGUoc3R5bGVBdHRyLCAiZGlzcGxheTpub25lIik7CisgICAgICAgIG1faW5Cb2R5ID0gZmFs
c2U7CisgICAgfQorICAgIGlmICgobV9oYXZlQ29udGVudCB8fCBtX2hhdmVGcmFtZVNldCkgJiYg
bV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgbV9oYXZlRnJhbWVTZXQgPSB0cnVlOworICAgIHN0YXJ0Qm9keSgpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZvcm1DcmVhdGVF
cnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICAvLyBPbmx5
IGNyZWF0ZSBhIG5ldyBmb3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCisgICAg
Ly8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgorICAg
IGlmICghbV9jdXJyZW50Rm9ybUVsZW1lbnQpIHsKKyAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1l
bnQgPSBIVE1MRm9ybUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKyAgICAgICAgcmVzdWx0
ID0gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7CisgICAgICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNr
KHQsIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVm
UHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgUmVmUHRyPE5vZGU+IG4gPSBoYW5kbGVJc2luZGV4
KHQpOworICAgIGlmICghbV9pbkJvZHkpCisgICAgICAgIG1faXNpbmRleEVsZW1lbnQgPSBuLnJl
bGVhc2UoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgdC0+c2VsZkNsb3NpbmdUYWcgPSB0cnVlOwor
ICAgICAgICByZXN1bHQgPSBuLnJlbGVhc2UoKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
UmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwg
cmVzdWx0KTsKKyAgICBwb3BCbG9jayhkdFRhZyk7CisgICAgcG9wQmxvY2soZGRUYWcpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgcENs
b3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKKyAgICBwb3BCbG9jayhkZFRhZyk7Cisg
ICAgcG9wQmxvY2soZHRUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnJwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpCit7CisgICAgcG9wQmxvY2socnBUYWcpOworICAgIHBvcEJsb2NrKHJ0VGFnKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpydENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHBvcEJsb2NrKHJwVGFn
KTsKKyAgICBwb3BCbG9jayhydFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
UmVmUHRyPE5vZGU+JikKK3sKKyAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQQ2xvc2Vy
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAg
cENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKKyAgICBwb3BCbG9jayh0LT50YWdO
YW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYp
Cit7CisgICAgcmV0dXJuIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOworfQor
Citib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHBvcEJsb2NrKHRkVGFnKTsKKyAgICBw
b3BCbG9jayh0aFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCit7CisgICAgcG9wQmxvY2sodGhlYWRUYWcpOworICAgIHBvcEJsb2NrKHRib2R5
VGFnKTsKKyAgICBwb3BCbG9jayh0Zm9vdFRhZyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIHNldFNraXBNb2RlKG5vZW1iZWRUYWcpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZnJh
bWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCit7CisgICAgc2V0U2tp
cE1vZGUobm9mcmFtZXNUYWcpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpCit7CisgICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CisgICAgICAgIEZy
YW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSAmJiBm
cmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0
KSkKKyAgICAgICAgICAgIHNldFNraXBNb2RlKG5vc2NyaXB0VGFnKTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNy
ZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIGlmIChoYXNQRWxl
bWVudEluU2NvcGUoKSkKKyAgICAgICAgcG9wQmxvY2socFRhZyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0cmljdENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQoreworICAgIGlmIChtX2RvY3VtZW50
LT5pbkNvbXBhdE1vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhc1BFbGVt
ZW50SW5TY29wZSgpKQorICAgICAgICBwb3BCbG9jayhwVGFnKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptYXBDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCit7CisgICAgbV9jdXJyZW50TWFwRWxlbWVu
dCA9IEhUTUxNYXBFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7CisgICAgcmVzdWx0ID0gbV9j
dXJyZW50TWFwRWxlbWVudDsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIG1h
cFRhZ1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIENy
ZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCit7CisgICAgbWFwLnNldCh0YWcubG9jYWxOYW1lKCku
aW1wbCgpLCBmdW5jKTsKK30KKwordGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUgPgorc3RhdGlj
IHZvaWQgbWFwVGFnc1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBRdWFsaWZpZWROYW1lICgmbmFt
ZXMpW0FycmF5U2l6ZV0sIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCit7CisgICAgZm9yIChz
aXplX3QgeCA9IDA7IHggPCBBcnJheVNpemU7IHgrKykgeworICAgICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lID0gbmFtZXNbeF07CisgICAgICAgIG1hcFRhZ1RvRnVuYyhtYXAsIG5hbWUs
IGZ1bmMpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yOjpnZXROb2RlKFRva2VuKiB0KQoreworICAgIC8vIEluaXQgb3VyIGVycm9yIGhhbmRs
aW5nIHRhYmxlLgorICAgIERFRklORV9TVEFUSUNfTE9DQUwoRnVuY3Rpb25NYXAsIGdGdW5jdGlv
bk1hcCwgKCkpOworICAgIGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIFF1
YWxpZmllZE5hbWUgbmVzdGVkQ3JlYXRlRXJyb3JUYWdzW10gPSB7IGFUYWcsIGJ1dHRvblRhZywg
bm9iclRhZywgdHJUYWcgfTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5l
c3RlZENyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZENy
ZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAgIFF1YWxpZmllZE5hbWUgbmVzdGVkU3R5bGVDcmVh
dGVFcnJvclRhZ3NbXSA9IHsgYlRhZywgYmlnVGFnLCBpVGFnLCBzVGFnLCBzbWFsbFRhZywgc3Ry
aWtlVGFnLCB0dFRhZywgdVRhZyB9OworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1h
cCwgbmVzdGVkU3R5bGVDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAgIFF1YWxpZmllZE5hbWUg
cENsb3NlckNyZWF0ZUVycm9yVGFnc1tdID0geyBhZGRyZXNzVGFnLCBhcnRpY2xlVGFnLAorICAg
ICAgICAgICAgYXNpZGVUYWcsIGJsb2NrcXVvdGVUYWcsIGNlbnRlclRhZywgZGlyVGFnLCBkaXZU
YWcsIGRsVGFnLAorICAgICAgICAgICAgZmllbGRzZXRUYWcsIGZvb3RlclRhZywgaDFUYWcsIGgy
VGFnLCBoM1RhZywgaDRUYWcsIGg1VGFnLCBoNlRhZywKKyAgICAgICAgICAgIGhlYWRlclRhZywg
aGdyb3VwVGFnLCBoclRhZywgbGlzdGluZ1RhZywgbWVudVRhZywgbmF2VGFnLCBvbFRhZywKKyAg
ICAgICAgICAgIHBUYWcsIHBsYWludGV4dFRhZywgcHJlVGFnLCBzZWN0aW9uVGFnLCB1bFRhZyB9
OworICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgcENsb3NlckNyZWF0ZUVycm9y
VGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBDbG9zZXJDcmVhdGVFcnJvckNoZWNr
KTsKKworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBib2R5VGFnLCAmTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBU
YWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBkZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmRkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAs
IGR0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZHRDcmVhdGVFcnJvckNoZWNrKTsK
KyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZm9ybVRhZywgJkxlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OmZvcm1DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9G
dW5jKGdGdW5jdGlvbk1hcCwgZnJhbWVzZXRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0
aW9uTWFwLCBoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBpc2luZGV4VGFn
LCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBtYXBUYWcsICZMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjptYXBDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5j
KGdGdW5jdGlvbk1hcCwgbGlUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRQ
Q2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIG5vZW1iZWRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2VtYmVkQ3JlYXRl
RXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vZnJhbWVz
VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNr
KTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9zY3JpcHRUYWcsICZMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0YWJsZVRhZywgJkxlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgcnBUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpy
cENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBy
dFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVjayk7Cisg
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHNlbGVjdFRhZywgJkxlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnNlbGVjdENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0ZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRh
YmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCB0aFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlQ2VsbENyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Ym9keVRhZywg
JkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Zm9vdFRhZywgJkxlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aGVhZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2spOworCisgICAgICAgIGdGdW5j
dGlvbk1hcC5zZXQoY29tbWVudEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuc2V0KHRl
eHRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRleHRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICB9CisKKyAgICBib29sIHByb2NlZWQgPSB0cnVlOworICAgIFJlZlB0cjxO
b2RlPiByZXN1bHQ7CisgICAgaWYgKENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hlY2tGdW5j
ID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGwoKSkpCisgICAgICAgIHByb2NlZWQg
PSAodGhpcy0+KmVycm9yQ2hlY2tGdW5jKSh0LCByZXN1bHQpOworICAgIGlmIChwcm9jZWVkKQor
ICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIHQtPnRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgbV9k
b2N1bWVudCwgbV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOworfQorCitib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmFsbG93TmVz
dGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICAvLyB3
d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMgYSBs
ZXZlbCBvZiBuZXN0aW5nIG9mCisgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBhIGJ1
bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMAorICAgIC8vIG5lc3Rl
ZCB0YWdzIG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3JpbmcgdGhlbSBhbGwgdG9n
ZXRoZXIuCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJy
ID0gbV9ibG9ja1N0YWNrOworICAgICAgICAgaSA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0aCAmJiBj
dXJyICYmIGN1cnItPnRhZ05hbWUgPT0gdGFnTmFtZTsKKyAgICAgICAgIGN1cnIgPSBjdXJyLT5u
ZXh0LCBpKyspIHsgfQorICAgIHJldHVybiBpICE9IGNNYXhSZWR1bmRhbnRUYWdEZXB0aDsKK30K
Kwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4q
IHQpCit7CisgICAgLy8gU3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdl
IG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNs
b3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJl
bHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1l
ID09IGh0bWxUYWcgfHwgdC0+dGFnTmFtZSA9PSBib2R5VGFnIHx8IHQtPnRhZ05hbWUgPT0gY29t
bWVudEF0b20pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBib29sIGNoZWNrRm9yQ2xvc2VU
YWdFcnJvcnMgPSB0cnVlOworICAgIGlmICh0LT50YWdOYW1lID09IGZvcm1UYWcgJiYgbV9jdXJy
ZW50Rm9ybUVsZW1lbnQpIHsKKyAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAwOworICAg
ICAgICBjaGVja0ZvckNsb3NlVGFnRXJyb3JzID0gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0LT50
YWdOYW1lID09IG1hcFRhZykKKyAgICAgICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7CisgICAg
ZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBwVGFnKQorICAgICAgICBjaGVja0ZvckNsb3NlVGFnRXJy
b3JzID0gZmFsc2U7CisgICAgICAgIAorICAgIEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBtX2Js
b2NrU3RhY2s7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSwgY2hlY2tGb3JDbG9zZVRhZ0Vycm9y
cyk7CisgICAgaWYgKG9sZEVsZW0gPT0gbV9ibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUgPT0gcFRh
ZykgeworICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkg
R2Vja28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CisgICAgICAgIC8vIHRoaXMgYXMgYSB2
YWxpZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0
eQorICAgICAgICAvLyBwYXJhZ3JhcGguCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKKyAg
ICAgICAgcGFyc2VUb2tlbih0KTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAg
ICAgIHJlcG9ydEVycm9yKFN0cmF5UGFyYWdyYXBoQ2xvc2VFcnJvcik7CisgICAgfQorfQorCiti
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSGVhZGluZ1RhZyhjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUYWdOYW1lU2V0LCBo
ZWFkaW5nVGFncywgKCkpOworICAgIGlmIChoZWFkaW5nVGFncy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUXVhbGlmaWVkTmFtZSB0YWdOYW1lc1tdID0geyBoMVRhZywgaDJUYWcsIGgzVGFnLCBoNFRh
ZywgaDVUYWcsIGg2VGFnIH07CisgICAgICAgIGFkZFRhZ3MoaGVhZGluZ1RhZ3MsIHRhZ05hbWVz
KTsKKyAgICB9CisgICAgcmV0dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgp
KTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZShOb2RlKiBu
b2RlKSBjb25zdAoreworICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1M
RWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGZvbnRUYWcpIHx8IGUt
Pmhhc0xvY2FsTmFtZSh0dFRhZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZSh1VGFn
KSB8fCBlLT5oYXNMb2NhbE5hbWUoYlRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGlUYWcpIHx8Cisg
ICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHN0cmlr
ZVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGJpZ1RhZykgfHwKKyAgICAgICAgICAgIGUtPmhhc0xv
Y2FsTmFtZShzbWFsbFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGVtVGFnKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoc3Ryb25nVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGRmblRhZykg
fHwgZS0+aGFzTG9jYWxOYW1lKGNvZGVUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzYW1wVGFnKSB8
fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGtiZFRhZykgfHwgZS0+aGFzTG9jYWxOYW1l
KHZhclRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGNpdGVUYWcpIHx8CisgICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoYWJiclRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFjcm9ueW1UYWcpIHx8IGUt
Pmhhc0xvY2FsTmFtZShzdWJUYWcpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoc3Vw
VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3BhblRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5vYnJU
YWcpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9mcmFtZXNUYWcpIHx8IGUtPmhh
c0xvY2FsTmFtZShub2xheWVyVGFnKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKG5v
ZW1iZWRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisjaWYgIUVOQUJMRShYSFRNTE1Q
KQorICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG5vc2NyaXB0VGFnKSAmJiAhbV9pc1BhcnNp
bmdGcmFnbWVudCkgeworICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1
dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc1Jlc2lkdWFsU3R5bGVU
YWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4sIHJlc2lkdWFsU3R5bGVUYWdzLCAoKSk7Cisg
ICAgaWYgKHJlc2lkdWFsU3R5bGVUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBRdWFsaWZpZWRO
YW1lIHRhZ05hbWVzW10gPSB7IGFUYWcsIGZvbnRUYWcsIHR0VGFnLCB1VGFnLCBiVGFnLCBpVGFn
LAorICAgICAgICAgICAgc1RhZywgc3RyaWtlVGFnLCBiaWdUYWcsIHNtYWxsVGFnLCBlbVRhZywg
c3Ryb25nVGFnLCBkZm5UYWcsCisgICAgICAgICAgICBjb2RlVGFnLCBzYW1wVGFnLCBrYmRUYWcs
IHZhclRhZywgbm9iclRhZyB9OworICAgICAgICBhZGRUYWdzKHJlc2lkdWFsU3R5bGVUYWdzLCB0
YWdOYW1lcyk7CisgICAgfQorICAgIHJldHVybiByZXNpZHVhbFN0eWxlVGFncy5jb250YWlucyh0
YWdOYW1lLmltcGwoKSk7Cit9CisKK2Jvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNB
ZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiwgdW5hZmZl
Y3RlZFRhZ3MsICgpKTsKKyAgICBpZiAodW5hZmZlY3RlZFRhZ3MuaXNFbXB0eSgpKSB7CisgICAg
ICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZXNbXSA9IHsgYm9keVRhZywgdGFibGVUYWcsIHRoZWFk
VGFnLCB0Ym9keVRhZywKKyAgICAgICAgICAgIHRmb290VGFnLCB0clRhZywgdGhUYWcsIHRkVGFn
LCBjYXB0aW9uVGFnLCBjb2xncm91cFRhZywgY29sVGFnLAorICAgICAgICAgICAgb3B0aW9uVGFn
LCBvcHRncm91cFRhZywgc2VsZWN0VGFnLCBvYmplY3RUYWcsIGRhdGFncmlkVGFnLCBkYXRhbGlz
dFRhZyB9OworICAgICAgICBhZGRUYWdzKHVuYWZmZWN0ZWRUYWdzLCB0YWdOYW1lcyk7CisgICAg
fQorICAgIHJldHVybiAhdW5hZmZlY3RlZFRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsKCkpOwor
fQorCit2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRsZVJlc2lkdWFsU3R5bGVD
bG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQoreworICAgIEhUTUxTdGFj
a0VsZW0qIG1heEVsZW0gPSAwOworICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyAgICBib29s
IHN0cmF5VGFibGVDb250ZW50ID0gZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQ7CisKKyAgICB1bnNp
Z25lZCBpdGVyYXRpb25Db3VudCA9IDA7CisKKyAgICBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFj
cm9zc0Jsb2NrcyA9IHRydWU7CisgICAgd2hpbGUgKCFmaW5pc2hlZCAmJiAoaXRlcmF0aW9uQ291
bnQrKyA8IGNSZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQpKSB7CisgICAgICAgIC8vIEZpbmQg
dGhlIG91dGVybW9zdCBlbGVtZW50IHRoYXQgY3Jvc3NlcyBvdmVyIHRvIGEgaGlnaGVyIGxldmVs
LiBJZiB0aGVyZSBleGlzdHMgYW5vdGhlciBoaWdoZXItbGV2ZWwKKyAgICAgICAgLy8gZWxlbWVu
dCwgd2Ugd2lsbCBkbyBhbm90aGVyIHBhc3MsIHVudGlsIHdlIGhhdmUgY29ycmVjdGVkIHRoZSBp
bm5lcm1vc3Qgb25lLgorICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgSFRN
TFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKKyAgICAgICAgSFRNTFN0YWNrRWxlbSog
cHJldiA9IDA7CisgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZNYXhFbGVtID0gMDsKKyAgICAg
ICAgbWF4RWxlbSA9IDA7CisgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUg
KGN1cnIgJiYgY3VyciAhPSBlbGVtKSB7CisgICAgICAgICAgICBpZiAoY3Vyci0+bGV2ZWwgPiBl
bGVtLT5sZXZlbCkgeworICAgICAgICAgICAgICAgIGlmICghaXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShjdXJyLT50YWdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGlmIChtYXhFbGVtKQorICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG5l
ZWQgYW5vdGhlciBwYXNzLgorICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIG1heEVsZW0gPSBjdXJyOworICAgICAgICAgICAgICAgIHByZXZNYXhF
bGVtID0gcHJldjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldiA9IGN1cnI7Cisg
ICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
Y3VyciB8fCAhbWF4RWxlbSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOb2RlKiBy
ZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOworICAgICAgICBOb2RlKiBibG9ja0VsZW0gPSBwcmV2
TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogbV9jdXJyZW50OworICAgICAgICBOb2RlKiBw
YXJlbnRFbGVtID0gZWxlbS0+bm9kZTsKKworICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhl
IHJlcGFyZW50aW5nIHRoYXQgaXMgZ29pbmcgdG8gb2NjdXIgaXMgYWxsb3dlZCBhY2NvcmRpbmcg
dG8gdGhlIERPTS4KKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlaXRoZXIgYWx3YXlzIGFs
bG93IGl0IG9yIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBmaXh1cCBpbnN0ZWFkIG9mCisgICAgICAg
IC8vIGp1c3QgYmFpbGluZyBoZXJlLgorICAgICAgICAvLyBFeGFtcGxlOiA8cD48Zm9udD48Y2Vu
dGVyPmJsYWg8L2ZvbnQ+PC9jZW50ZXI+PC9wPiBpc24ndCBkb2luZyBhIGZpeHVwIHJpZ2h0IG5v
dy4KKyAgICAgICAgaWYgKCFwYXJlbnRFbGVtLT5jaGlsZEFsbG93ZWQoYmxvY2tFbGVtKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IFVua25v
d247CisKKyAgICAgICAgaWYgKG1heEVsZW0tPm5vZGUtPnBhcmVudE5vZGUoKSAhPSBlbGVtLT5u
b2RlKSB7CisgICAgICAgICAgICAvLyBXYWxrIHRoZSBzdGFjayBhbmQgcmVtb3ZlIGFueSBlbGVt
ZW50cyB0aGF0IGFyZW4ndCByZXNpZHVhbCBzdHlsZSB0YWdzLiAgVGhlc2UKKyAgICAgICAgICAg
IC8vIGFyZSBiYXNpY2FsbHkganVzdCBiZWluZyBjbG9zZWQgdXAuICBFeGFtcGxlOgorICAgICAg
ICAgICAgLy8gPGZvbnQ+PHNwYW4+TW9vPHA+R29vPC9mb250PjwvcD4uCisgICAgICAgICAgICAv
LyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIDxzcGFuPiBkb2Vzbid0IG5lZWQgdG8gYmUgcmVv
cGVuZWQuICBJdCBjYW4ganVzdCBjbG9zZS4KKyAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIGN1
cnJFbGVtID0gbWF4RWxlbS0+bmV4dDsKKyAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZF
bGVtID0gbWF4RWxlbTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVtKSB7Cisg
ICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBjdXJyRWxlbS0+bmV4dDsK
KyAgICAgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+dGFnTmFt
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKKyAg
ICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPmRlcmVmTm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOworICAgICAgICAgICAgICAgICAg
ICBwcmV2RWxlbS0+ZGlkUmVmTm9kZSA9IGN1cnJFbGVtLT5kaWRSZWZOb2RlOworICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgY3VyckVsZW07CisgICAgICAgICAgICAgICAgICAgIG1fdHJlZURl
cHRoLS07CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHByZXZF
bGVtID0gY3VyckVsZW07CisgICAgICAgICAgICAgICAgY3VyckVsZW0gPSBuZXh0RWxlbTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZW9wZW4gcmVzaWR1YWwg
dGFncyBpbiBiZXR3ZWVuIG1heEVsZW0gYW5kIGVsZW0uICBBbiBleGFtcGxlIG9mIHRoaXMgY2Fz
ZSBpczoKKyAgICAgICAgICAgIC8vIDxmb250PjxpPk1vbzxwPkZvbzwvZm9udD4uCisgICAgICAg
ICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBwYXJ0IGJlZm9y
ZSB0aGUgPHA+IGludG86CisgICAgICAgICAgICAvLyA8Zm9udD48aT5Nb288L2k+PC9mb250Pjxp
PgorICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgPGk+IHdpbGwgcmVtYWluIG9wZW4uICBUaGlz
IGludm9sdmVzIHRoZSBtb2RpZmljYXRpb24gb2YgZWxlbWVudHMKKyAgICAgICAgICAgIC8vIGlu
IHRoZSBibG9jayBzdGFjay4KKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHNvIGFmZmVjdCBo
b3cgd2UgdWx0aW1hdGVseSByZXBhcmVudCB0aGUgYmxvY2ssIHNpbmNlIHdlIHdhbnQgaXQgdG8g
ZW5kIHVwCisgICAgICAgICAgICAvLyB1bmRlciB0aGUgcmVvcGVuZWQgcmVzaWR1YWwgdGFncyAo
ZS5nLiwgdGhlIDxpPiBpbiB0aGUgYWJvdmUgZXhhbXBsZS4pCisgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gcHJldk5vZGUgPSAwOworICAgICAgICAgICAgY3VyckVsZW0gPSBtYXhFbGVtOworICAg
ICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFsRWxlbSkgeworICAgICAg
ICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmxvY2FsTmFt
ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVs
ZW1lbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgcmVsZWFzZVJlZiB0byBnZXQg
YSByYXcgcG9pbnRlciBzaW5jZSB3ZSBwbGFuIHRvIGhhbmQgb3ZlciBvd25lcnNoaXAgdG8gY3Vy
ckVsZW0uCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGN1cnJOb2RlID0gY3VyckVsZW0tPm5v
ZGUtPmNsb25lTm9kZShmYWxzZSkucmVsZWFzZVJlZigpOworICAgICAgICAgICAgICAgICAgICBy
ZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZjdXJyTm9kZS0+bG9jYWxOYW1lKCkpOwor
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHN0YWNrIGVsZW1lbnQncyBu
b2RlIHRvIHBvaW50IHRvIHRoZSBjbG9uZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0
YWNrIGVsZW1lbnQgYWRvcHRzIHRoZSByZWZlcmVuY2Ugd2Ugb2J0YWluZWQgYWJvdmUgYnkgY2Fs
bGluZyByZWxlYXNlKCkuCisgICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5kZXJlZk5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPm5vZGUgPSBjdXJyTm9kZTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VyckVsZW0tPmRpZFJlZk5vZGUgPSB0cnVlOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIEF0dGFjaCB0aGUgcHJldmlvdXMgbm9kZSBhcyBhIGNoaWxkIG9mIHRoaXMg
bmV3IG5vZGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJOb2RlLT5hcHBlbmRDaGlsZChwcmV2Tm9kZSwgZWMpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlIC8vIFRoZSBuZXcgcGFyZW50IGZvciB0aGUgYmxvY2sgZWxlbWVu
dCBpcyBnb2luZyB0byBiZSB0aGUgaW5uZXJtb3N0IGNsb25lLgorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50RWxlbSA9IGN1cnJOb2RlOyAgLy8gRklYTUU6IFdlIHNoaWZ0ZWQgcGFyZW50
RWxlbSB0byBiZSBhIHJlc2lkdWFsIGlubGluZS4gIFdlIG5ldmVyIGNoZWNrZWQgdG8gc2VlIGlm
IGJsb2NrRWxlbSBjb3VsZCBiZSBsZWdhbGx5IHBsYWNlZCBpbnNpZGUgdGhlIGlubGluZSB0aG91
Z2guCisKKyAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBjdXJyTm9kZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBjaGFpbiBvZiBu
ZXcgcmVzaWR1YWwgc3R5bGUgZWxlbWVudHMgaWYgb25lIGV4aXN0cy4KKyAgICAgICAgICAgIGlm
IChwcmV2Tm9kZSkKKyAgICAgICAgICAgICAgICBlbGVtLT5ub2RlLT5hcHBlbmRDaGlsZChwcmV2
Tm9kZSwgZWMpOyAgLy8gRklYTUU6IFRoaXMgYXBwZW5kIGNhbiByZXN1bHQgaW4gd2VpcmQgc3R1
ZmYgaGFwcGVuaW5nLCBsaWtlIGFuIGlubGluZSBjaGFpbiBiZWluZyBwdXQgaW50byBhIHRhYmxl
IHNlY3Rpb24uCisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiB0aGUgYmxvY2sgaXMg
c3RpbGwgaW4gdGhlIHRyZWUuIElmIGl0IGlzbid0LCB0aGVuIHdlIGRvbid0CisgICAgICAgIC8v
IHdhbnQgdG8gcmVtb3ZlIGl0IGZyb20gaXRzIHBhcmVudCAodGhhdCB3b3VsZCBjcmFzaCkgb3Ig
aW5zZXJ0IGl0IGludG8KKyAgICAgICAgLy8gYSBuZXcgcGFyZW50IGxhdGVyLiBTZWUgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OAorICAgICAgICBib29sIGlzQmxv
Y2tTdGlsbEluVHJlZSA9IGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpOworCisgICAgICAgIC8vIFdl
IG5lZWQgdG8gbWFrZSBhIGNsb25lIG9mIHxyZXNpZHVhbEVsZW18IGFuZCBwbGFjZSBpdCBqdXN0
IGluc2lkZSB8YmxvY2tFbGVtfC4KKyAgICAgICAgLy8gQWxsIGNvbnRlbnQgb2YgfGJsb2NrRWxl
bXwgaXMgcmVwYXJlbnRlZCB0byBiZSB1bmRlciB0aGlzIGNsb25lLiAgV2UgdGhlbgorICAgICAg
ICAvLyByZXBhcmVudCB8YmxvY2tFbGVtfCB1c2luZyByZWFsIERPTSBjYWxscyBzbyB0aGF0IGF0
dGFjaG1lbnQvZGV0YWNobWVudCB3aWxsCisgICAgICAgIC8vIGJlIHBlcmZvcm1lZCB0byBmaXgg
dXAgdGhlIHJlbmRlcmluZyB0cmVlLgorICAgICAgICAvLyBTbyBmb3IgdGhpcyBleGFtcGxlOiA8
Yj4uLi48cD5Gb288L2I+R29vPC9wPgorICAgICAgICAvLyBUaGUgZW5kIHJlc3VsdCB3aWxsIGJl
OiA8Yj4uLi48L2I+PHA+PGI+Rm9vPC9iPkdvbzwvcD4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
U3RlcCAxOiBSZW1vdmUgfGJsb2NrRWxlbXwgZnJvbSBpdHMgcGFyZW50LCBkb2luZyBhIGJhdGNo
IGRldGFjaCBvZiBhbGwgdGhlIGtpZHMuCisgICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRyZWUp
CisgICAgICAgICAgICBibG9ja0VsZW0tPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQoYmxvY2tF
bGVtLCBlYyk7CisKKyAgICAgICAgTm9kZSogbmV3Tm9kZVB0ciA9IDA7CisgICAgICAgIGlmIChi
bG9ja0VsZW0tPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICAgICAgLy8gU3RlcCAyOiBDbG9uZSB8
cmVzaWR1YWxFbGVtfC4KKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gcmVzaWR1
YWxFbGVtLT5jbG9uZU5vZGUoZmFsc2UpOyAvLyBTaGFsbG93IGNsb25lLiBXZSBkb24ndCBwaWNr
IHVwIHRoZSBzYW1lIGtpZHMuCisgICAgICAgICAgICBuZXdOb2RlUHRyID0gbmV3Tm9kZS5nZXQo
KTsKKyAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5ld05vZGUt
PmxvY2FsTmFtZSgpKTsKKworICAgICAgICAgICAgLy8gU3RlcCAzOiBQbGFjZSB8YmxvY2tFbGVt
fCdzIGNoaWxkcmVuIHVuZGVyIHxuZXdOb2RlfC4gIFJlbW92ZSBhbGwgb2YgdGhlIGNoaWxkcmVu
IG9mIHxibG9ja0VsZW18CisgICAgICAgICAgICAvLyBiZWZvcmUgd2UndmUgcHV0IHxuZXdFbGVt
fCBpbnRvIHRoZSBkb2N1bWVudC4gIFRoYXQgd2F5IHdlJ2xsIG9ubHkgZG8gb25lIGF0dGFjaG1l
bnQgb2YgYWxsCisgICAgICAgICAgICAvLyB0aGUgbmV3IGNvbnRlbnQgKGluc3RlYWQgb2YgYSBi
dW5jaCBvZiBpbmRpdmlkdWFsIGF0dGFjaG1lbnRzKS4KKyAgICAgICAgICAgIE5vZGUqIGN1cnJO
b2RlID0gYmxvY2tFbGVtLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICB3aGlsZSAoY3Vyck5v
ZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBuZXh0Tm9kZSA9IGN1cnJOb2RlLT5uZXh0U2li
bGluZygpOworICAgICAgICAgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGN1cnJOb2RlLCBl
Yyk7CisgICAgICAgICAgICAgICAgY3Vyck5vZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gU3RlcCA0OiBQbGFjZSB8bmV3Tm9kZXwgdW5kZXIgfGJsb2NrRWxl
bXwuICB8YmxvY2tFbGVtfCBpcyBzdGlsbCBvdXQgb2YgdGhlIGRvY3VtZW50LCBzbyBubworICAg
ICAgICAgICAgLy8gYXR0YWNobWVudCBjYW4gb2NjdXIgeWV0LgorICAgICAgICAgICAgYmxvY2tF
bGVtLT5hcHBlbmRDaGlsZChuZXdOb2RlLnJlbGVhc2UoKSwgZWMpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKKworICAgICAgICAvLyBTdGVwIDU6IFJlcGFy
ZW50IHxibG9ja0VsZW18LiAgTm93IHRoZSBmdWxsIGF0dGFjaG1lbnQgb2YgdGhlIGZpeGVkIHVw
IHRyZWUgdGFrZXMgcGxhY2UuCisgICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRyZWUpCisgICAg
ICAgICAgICBwYXJlbnRFbGVtLT5hcHBlbmRDaGlsZChibG9ja0VsZW0sIGVjKTsKKworICAgICAg
ICAvLyBTdGVwIDY6IFB1bGwgfGVsZW18IG91dCBvZiB0aGUgc3RhY2ssIHNpbmNlIGl0IGlzIG5v
IGxvbmdlciBlbmNsb3NpbmcgdXMuICBBbHNvIHVwZGF0ZQorICAgICAgICAvLyB0aGUgbm9kZSBh
c3NvY2lhdGVkIHdpdGggdGhlIHByZXZpb3VzIHN0YWNrIGVsZW1lbnQgc28gdGhhdCB3aGVuIGl0
IGdldHMgcG9wcGVkLAorICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2UgdGhlIHJlc2lkdWFsIGVs
ZW1lbnQgdGhlIG5leHQgY3VycmVudCBub2RlLgorICAgICAgICBIVE1MU3RhY2tFbGVtKiBjdXJy
RWxlbSA9IG1heEVsZW07CisgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gMDsKKyAg
ICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKKyAgICAgICAgICAgIHByZXZFbGVtID0g
Y3VyckVsZW07CisgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0OworICAgICAg
ICB9CisgICAgICAgIHByZXZFbGVtLT5uZXh0ID0gZWxlbS0+bmV4dDsKKyAgICAgICAgcHJldkVs
ZW0tPmRlcmVmTm9kZSgpOworICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGVsZW0tPm5vZGU7Cisg
ICAgICAgIHByZXZFbGVtLT5kaWRSZWZOb2RlID0gZWxlbS0+ZGlkUmVmTm9kZTsKKyAgICAgICAg
bV90cmVlRGVwdGgtLTsKKyAgICAgICAgaWYgKCFmaW5pc2hlZCkgeworICAgICAgICAgICAgLy8g
UmVwdXJwb3NlIHxlbGVtfCB0byByZXByZXNlbnQgfG5ld05vZGV8IGFuZCBpbnNlcnQgaXQgYXQg
dGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uCisgICAgICAgICAgICAvLyBpbiB0aGUgc3RhY2suIFdl
IGRvIG5vdCBkbyB0aGlzIGZvciB0aGUgaW5uZXJtb3N0IGJsb2NrLCBiZWNhdXNlIGluIHRoYXQg
Y2FzZSB0aGUgbmV3CisgICAgICAgICAgICAvLyBub2RlIGlzIGVmZmVjdGl2ZWx5IG5vIGxvbmdl
ciBvcGVuLgorICAgICAgICAgICAgZWxlbS0+bmV4dCA9IG1heEVsZW07CisgICAgICAgICAgICBl
bGVtLT5ub2RlID0gcHJldk1heEVsZW0tPm5vZGU7CisgICAgICAgICAgICBlbGVtLT5kaWRSZWZO
b2RlID0gcHJldk1heEVsZW0tPmRpZFJlZk5vZGU7CisgICAgICAgICAgICBlbGVtLT5zdHJheVRh
YmxlQ29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgcHJldk1heEVsZW0tPm5leHQgPSBlbGVt
OworICAgICAgICAgICAgQVNTRVJUKG5ld05vZGVQdHIpOworICAgICAgICAgICAgcHJldk1heEVs
ZW0tPm5vZGUgPSBuZXdOb2RlUHRyOworICAgICAgICAgICAgbmV3Tm9kZVB0ci0+cmVmKCk7Cisg
ICAgICAgICAgICBwcmV2TWF4RWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7CisgICAgICAgICAgICBt
X3RyZWVEZXB0aCsrOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRlbGV0ZSBlbGVtOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIG1ha2UgYSBjYXNlIGxpa2UgdGhpcyB3
b3JrOgorICAgIC8vIDx0YWJsZT48Yj48aT48Zm9ybT48L2I+PC9mb3JtPjwvaT48L3RhYmxlPgor
ICAgIC8vIFRoZW4gdGhpcyBjaGVjayB3aWxsIGJlIHRvbyBzaW1wbGlzdGljLiAgUmlnaHQgbm93
IHRoZSA8aT48Zm9ybT4gY2hhaW4gd2lsbCBlbmQgdXAgaW5zaWRlIHRoZSA8dGJvZHk+LCB3aGlj
aCBpcyBwcmV0dHkgY3JhenkuCisgICAgaWYgKHN0cmF5VGFibGVDb250ZW50KQorICAgICAgICBt
X2luU3RyYXlUYWJsZUNvbnRlbnQtLTsKKworICAgIC8vIFN0ZXAgNzogUmVvcGVuIGludGVybWVk
aWF0ZSBpbmxpbmVzLCBlLmcuLCA8Yj48cD48aT5Gb288L2I+R29vPC9wPi4KKyAgICAvLyBJbiB0
aGUgYWJvdmUgZXhhbXBsZSwgR29vIHNob3VsZCBzdGF5IGl0YWxpYy4KKyAgICAvLyBXZSBjYXAg
dGhlIG51bWJlciBvZiB0YWdzIHdlJ3JlIHdpbGxpbmcgdG8gcmVvcGVuIGJhc2VkIG9mZiBjUmVz
aWR1YWxTdHlsZU1heERlcHRoLgorICAgIAorICAgIEhUTUxTdGFja0VsZW0qIGN1cnIgPSBtX2Js
b2NrU3RhY2s7CisgICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0gMDsKKyAg
ICB1bnNpZ25lZCBzdGFja0RlcHRoID0gMTsKKyAgICB1bnNpZ25lZCByZWR1bmRhbnRTdHlsZUNv
dW50ID0gMDsKKyAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG1heEVsZW0pIHsKKyAgICAgICAg
Ly8gV2Ugd2lsbCBhY3R1YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCisgICAg
ICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4K
KyAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1lKSAmJiBzdGFja0Rl
cHRoKysgPCBjUmVzaWR1YWxTdHlsZU1heERlcHRoKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBv
dmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcg
dGhlCisgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFu
aW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCisgICAgICAgICAgICAv
LyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwg
dGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KKyAgICAgICAgICAgIC8vIGZyb20gdGhlIG91dGVy
bW9zdCB0byB0aGUgaW5uZXJtb3N0LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sgd2lsbCBlbmQg
dXAgcG9pbnRpbmcKKyAgICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFnIHdlIG5lZWQg
dG8gcmVvcGVuLgorICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgY3Vyci0+bm9kZSB0byBiZSB0
aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVkIGluCisg
ICAgICAgICAgICAvLyBjdXJyLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91
bGQgcG9wIHRvIHdoZW4gdGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCisgICAgICAgICAgICAv
LyB0aGUgc3RhY2suCisgICAgICAgICAgICBpZiAocmVzaWR1YWxTdHlsZVN0YWNrICYmIGN1cnIt
PnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYmIGN1cnItPm5vZGUtPmF0
dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0YWNrLT5ub2RlLT5hdHRy
aWJ1dGVzKCkpKQorICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQrKzsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKKwor
ICAgICAgICAgICAgaWYgKHJlZHVuZGFudFN0eWxlQ291bnQgPCBjTWF4UmVkdW5kYW50VGFnRGVw
dGgpCisgICAgICAgICAgICAgICAgbW92ZU9uZUJsb2NrVG9TdGFjayhyZXNpZHVhbFN0eWxlU3Rh
Y2spOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKworICAgICAgICBjdXJy
ID0gbV9ibG9ja1N0YWNrOworICAgIH0KKworICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJl
c2lkdWFsU3R5bGVTdGFjaywgMCk7IC8vIFN0cmF5IHRhYmxlIGNvbnRlbnQgY2FuJ3QgYmUgYW4g
aXNzdWUgaGVyZSwgc2luY2Ugc29tZSBlbGVtZW50IGFib3ZlIHdpbGwgYWx3YXlzIGJlY29tZSB0
aGUgcm9vdCBvZiBuZXcgc3RyYXkgdGFibGUgY29udGVudC4KKworICAgIG1faGFuZGxpbmdSZXNp
ZHVhbFN0eWxlQWNyb3NzQmxvY2tzID0gZmFsc2U7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwg
Tm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQpCit7CisgICAgLy8gTG9vcCBmb3IgZWFjaCB0YWcg
dGhhdCBuZWVkcyB0byBiZSByZW9wZW5lZC4KKyAgICB3aGlsZSAoZWxlbSkgeworICAgICAgICAv
LyBDcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoZSBET00gbm9kZSBmb3IgdGhpcyBlbGVtZW50
LgorICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IGVsZW0tPm5vZGUtPmNsb25lTm9kZShm
YWxzZSk7IAorICAgICAgICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZuZXdOb2Rl
LT5sb2NhbE5hbWUoKSk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBuZXcgbm9kZS4gSW4gdGhl
IG1hbGZvcm1lZCB0YWJsZSBjYXNlLCB3ZSBuZWVkIHRvIGluc2VydCBiZWZvcmUgdGhlIHRhYmxl
LAorICAgICAgICAvLyB3aGljaCB3aWxsIGJlIHRoZSBsYXN0IGNoaWxkLgorICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgaWYgKG1hbGZvcm1lZFRhYmxlUGFyZW50KQorICAg
ICAgICAgICAgbWFsZm9ybWVkVGFibGVQYXJlbnQtPmluc2VydEJlZm9yZShuZXdOb2RlLCBtYWxm
b3JtZWRUYWJsZVBhcmVudC0+bGFzdENoaWxkKCksIGVjKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9jdXJyZW50LT5hcHBlbmRDaGlsZChuZXdOb2RlLCBlYyk7CisgICAgICAgIC8vIEZJ
WE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNlcHRpb25zIGhlcmU/CisKKyAg
ICAgICAgLy8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBmb3IgdGhpcyBub2RlIHdlIGp1
c3QgY3JlYXRlZC4KKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVs
KTsKKyAgICAgICAgbmV3Tm9kZS0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgICAgICAv
LyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRo
ZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cworICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBh
IG1hbGZvcm1lZCB0YWJsZS4KKyAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVu
dCA9IG1hbGZvcm1lZFRhYmxlUGFyZW50ICE9IDA7CisgICAgICAgIGlmIChtX2Jsb2NrU3RhY2st
PnN0cmF5VGFibGVDb250ZW50KQorICAgICAgICAgICAgbV9pblN0cmF5VGFibGVDb250ZW50Kys7
CisKKyAgICAgICAgLy8gQ2xlYXIgb3VyIG1hbGZvcm1lZCB0YWJsZSBwYXJlbnQgdmFyaWFibGUu
CisgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKKworICAgICAgICAvLyBVcGRhdGUg
fGN1cnJlbnR8IG1hbnVhbGx5IHRvIHBvaW50IHRvIHRoZSBuZXcgbm9kZS4KKyAgICAgICAgc2V0
Q3VycmVudChuZXdOb2RlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkdmFuY2UgdG8g
dGhlIG5leHQgdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCisgICAgICAgIEhUTUxTdGFj
a0VsZW0qIG5leHQgPSBlbGVtLT5uZXh0OworICAgICAgICBlbGVtLT5kZXJlZk5vZGUoKTsKKyAg
ICAgICAgZGVsZXRlIGVsZW07CisgICAgICAgIGVsZW0gPSBuZXh0OworICAgIH0KK30KKwordm9p
ZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBpbnQgbGV2ZWwpCit7CisgICAgbV9ibG9ja1N0YWNrID0gbmV3IEhUTUxTdGFj
a0VsZW0odGFnTmFtZSwgbGV2ZWwsIG1fY3VycmVudCwgbV9kaWRSZWZDdXJyZW50LCBtX2Jsb2Nr
U3RhY2spOworICAgIGlmIChsZXZlbCA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpCisgICAg
ICAgIG1fYmxvY2tzSW5TdGFjaysrOworICAgIG1fdHJlZURlcHRoKys7CisgICAgbV9kaWRSZWZD
dXJyZW50ID0gZmFsc2U7CisgICAgaWYgKHRhZ05hbWUgPT0gcFRhZykKKyAgICAgICAgbV9oYXNQ
RWxlbWVudEluU2NvcGUgPSBJblNjb3BlOworICAgIGVsc2UgaWYgKGlzU2NvcGluZ1RhZyh0YWdO
YW1lKSkKKyAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOworfQorCit2
b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMpCit7CisgICAgSFRNTFN0YWNrRWxlbSogZWxl
bSA9IG1fYmxvY2tTdGFjazsKKworICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiBlbGVtICYmICFt
X3BhcnNlclF1aXJrcy0+c2hvdWxkUG9wQmxvY2soZWxlbS0+dGFnTmFtZSwgdGFnTmFtZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludCBtYXhMZXZlbCA9IDA7CisKKyAgICB3aGlsZSAoZWxl
bSAmJiAoZWxlbS0+dGFnTmFtZSAhPSB0YWdOYW1lKSkgeworICAgICAgICBpZiAobWF4TGV2ZWwg
PCBlbGVtLT5sZXZlbCkKKyAgICAgICAgICAgIG1heExldmVsID0gZWxlbS0+bGV2ZWw7CisgICAg
ICAgIGVsZW0gPSBlbGVtLT5uZXh0OworICAgIH0KKworICAgIGlmICghZWxlbSkgeworICAgICAg
ICBpZiAocmVwb3J0RXJyb3JzKQorICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlDbG9zZVRh
Z0Vycm9yLCAmdGFnTmFtZSwgMCwgdHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobWF4TGV2ZWwgPiBlbGVtLT5sZXZlbCkgeworICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0
Y2ggYmVjYXVzZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAorICAgICAg
ICAvLyA8Yj48cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCisgICAgICAg
IGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKHRhZ05hbWUpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKGVs
ZW0pOworICAgIH0KKworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlS
ZXNpZHVhbFN0eWxlKGVsZW0tPnRhZ05hbWUpOworICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFs
U3R5bGVTdGFjayA9IDA7CisgICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOworICAg
IAorICAgIGVsZW0gPSBtX2Jsb2NrU3RhY2s7CisgICAgdW5zaWduZWQgc3RhY2tEZXB0aCA9IDE7
CisgICAgdW5zaWduZWQgcmVkdW5kYW50U3R5bGVDb3VudCA9IDA7CisgICAgd2hpbGUgKGVsZW0p
IHsKKyAgICAgICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gdGFnTmFtZSkgeworICAgICAgICAgICAg
aW50IHN0cmF5VGFibGUgPSBtX2luU3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgICAgICAgICBwb3BP
bmVCbG9jaygpOworICAgICAgICAgICAgZWxlbSA9IDA7CisKKyAgICAgICAgICAgIC8vIFRoaXMg
ZWxlbWVudCB3YXMgdGhlIHJvb3Qgb2Ygc29tZSBtYWxmb3JtZWQgY29udGVudCBqdXN0IGluc2lk
ZSBhbiBpbXBsaWNpdCBvcgorICAgICAgICAgICAgLy8gZXhwbGljaXQgPHRib2R5PiBvciA8dHI+
LgorICAgICAgICAgICAgLy8gSWYgd2UgZW5kIHVwIG5lZWRpbmcgdG8gcmVvcGVuIHJlc2lkdWFs
IHN0eWxlIHRhZ3MsIHRoZSByb290IG9mIHRoZSByZW9wZW5lZCBjaGFpbgorICAgICAgICAgICAg
Ly8gbXVzdCBhbHNvIGtub3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVu
dCBpbnNpZGUgYSA8dGJvZHk+Lzx0cj4uCisgICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAo
bV9pblN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNr
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogY3VyciA9IG1fY3VycmVudDsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCisgICAgICAg
ICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAg
bWFsZm9ybWVkVGFibGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRGb3JtRWxlbWVudCAmJiBlbGVtLT50YWdOYW1lID09IGZvcm1UYWcpCisgICAgICAg
ICAgICAgICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChhbmQgdGhp
cyBpcworICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBhdHRyaWJ1
dGUgb24gdGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0cworICAgICAgICAgICAgICAgIC8vIGJvdHRv
bSBtYXJnaW4uCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQtPnNldE1hbGZv
cm1lZCh0cnVlKTsKKworICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3Bl
bmluZworICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMg
ZW50aXJlIGJsb2NrLgorICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVz
aWR1YWxTdHlsZVRhZyhlbGVtLT50YWdOYW1lKSAmJiBzdGFja0RlcHRoKysgPCBjUmVzaWR1YWxT
dHlsZU1heERlcHRoKSB7CisgICAgICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUg
dXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQorICAgICAgICAg
ICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhl
IHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKKyAgICAgICAgICAgICAgICAvLyBmcm9t
IGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRh
Z3Mgd2UgbmVlZCB0byByZW9wZW4KKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvdXRlcm1v
c3QgdG8gdGhlIGlubmVybW9zdCwgaS5lLiwgcmVzaWR1YWxTdHlsZVN0YWNrIHdpbGwgZW5kIHVw
IHBvaW50aW5nCisgICAgICAgICAgICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcgd2UgbmVl
ZCB0byByZW9wZW4uCisgICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgZWxlbS0+bm9kZSB0
byBiZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVk
IGluCisgICAgICAgICAgICAgICAgLy8gZWxlbS0+aWQgcmF0aGVyIHRoYW4gdGhlIG5vZGUgdGhh
dCB5b3Ugc2hvdWxkIHBvcCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9mZgorICAg
ICAgICAgICAgICAgIC8vIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICBpZiAocmVzaWR1YWxT
dHlsZVN0YWNrICYmIGVsZW0tPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1l
ICYmIGVsZW0tPm5vZGUtPmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHls
ZVN0YWNrLT5ub2RlLT5hdHRyaWJ1dGVzKCkpKQorICAgICAgICAgICAgICAgICAgICByZWR1bmRh
bnRTdHlsZUNvdW50Kys7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICByZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChyZWR1bmRh
bnRTdHlsZUNvdW50IDwgY01heFJlZHVuZGFudFRhZ0RlcHRoKQorICAgICAgICAgICAgICAgICAg
ICBtb3ZlT25lQmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKKyAgICAgICAgICAgIGVsZW0g
PSBtX2Jsb2NrU3RhY2s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZW9wZW5SZXNpZHVhbFN0
eWxlVGFncyhyZXNpZHVhbFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKK30KKwor
aW5saW5lIEhUTUxTdGFja0VsZW0qIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcE9uZUJs
b2NrQ29tbW9uKCkKK3sKKyAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwor
CisgICAgLy8gRm9ybSBlbGVtZW50cyByZXN0b3JlIHRoZWlyIHN0YXRlIGR1cmluZyB0aGUgcGFy
c2luZyBwcm9jZXNzLgorICAgIC8vIEFsc28sIGEgZmV3IGVsZW1lbnRzICg8YXBwbGV0PiwgPG9i
amVjdD4pIG5lZWQgdG8ga25vdyB3aGVuIGFsbCBjaGlsZCBlbGVtZW50cyAoPHBhcmFtPnMpIGFy
ZSBhdmFpbGFibGUuCisgICAgaWYgKG1fY3VycmVudCAmJiBlbGVtLT5ub2RlICE9IG1fY3VycmVu
dCkKKyAgICAgICAgbV9jdXJyZW50LT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKKworICAgIGlm
IChtX2Jsb2NrU3RhY2stPmxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkgeworICAg
ICAgICBBU1NFUlQobV9ibG9ja3NJblN0YWNrID4gMCk7CisgICAgICAgIG1fYmxvY2tzSW5TdGFj
ay0tOworICAgIH0KKyAgICBtX3RyZWVEZXB0aC0tOworICAgIG1fYmxvY2tTdGFjayA9IGVsZW0t
Pm5leHQ7CisgICAgbV9jdXJyZW50ID0gZWxlbS0+bm9kZTsKKyAgICBtX2RpZFJlZkN1cnJlbnQg
PSBlbGVtLT5kaWRSZWZOb2RlOworCisgICAgaWYgKGVsZW0tPnN0cmF5VGFibGVDb250ZW50KQor
ICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQtLTsKKworICAgIGlmIChlbGVtLT50YWdOYW1l
ID09IHBUYWcpCisgICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKKyAg
ICBlbHNlIGlmIChpc1Njb3BpbmdUYWcoZWxlbS0+dGFnTmFtZSkpCisgICAgICAgIG1faGFzUEVs
ZW1lbnRJblNjb3BlID0gVW5rbm93bjsKKworICAgIHJldHVybiBlbGVtOworfQorCit2b2lkIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcE9uZUJsb2NrKCkKK3sKKyAgICAvLyBTdG9yZSB0
aGUgY3VycmVudCBub2RlIGJlZm9yZSBwb3BPbmVCbG9ja0NvbW1vbiBvdmVyd3JpdGVzIGl0Lgor
ICAgIE5vZGUqIGxhc3RDdXJyZW50ID0gbV9jdXJyZW50OworICAgIGJvb2wgZGlkUmVmTGFzdEN1
cnJlbnQgPSBtX2RpZFJlZkN1cnJlbnQ7CisKKyAgICBkZWxldGUgcG9wT25lQmxvY2tDb21tb24o
KTsKKworICAgIGlmIChkaWRSZWZMYXN0Q3VycmVudCkKKyAgICAgICAgbGFzdEN1cnJlbnQtPmRl
cmVmKCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9uZUJsb2Nr
VG9TdGFjayhIVE1MU3RhY2tFbGVtKiYgaGVhZCkKK3sKKyAgICAvLyBXZSdsbCBiZSB1c2luZyB0
aGUgc3RhY2sgZWxlbWVudCB3ZSdyZSBwb3BwaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50IG5vZGUu
CisgICAgLy8gU2VlIHRoZSB0d28gY2FsbGVycyBmb3IgZGV0YWlscy4KKworICAgIC8vIFN0b3Jl
IHRoZSBjdXJyZW50IG5vZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQu
CisgICAgTm9kZSogbGFzdEN1cnJlbnQgPSBtX2N1cnJlbnQ7CisgICAgYm9vbCBkaWRSZWZMYXN0
Q3VycmVudCA9IG1fZGlkUmVmQ3VycmVudDsKKworICAgIC8vIFBvcCB0aGUgYmxvY2ssIGJ1dCBk
b24ndCBkZXJlZiB0aGUgY3VycmVudCBub2RlIGFzIHBvcE9uZUJsb2NrIGRvZXMgYmVjYXVzZQor
ICAgIC8vIHdlJ2xsIGJlIHVzaW5nIHRoZSBwb2ludGVyIGluIHRoZSBuZXcgc3RhY2sgZWxlbWVu
dC4KKyAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gcG9wT25lQmxvY2tDb21tb24oKTsKKworICAg
IC8vIFRyYW5zZmVyIHRoZSBjdXJyZW50IG5vZGUgaW50byB0aGUgc3RhY2sgZWxlbWVudC4KKyAg
ICAvLyBObyBuZWVkIHRvIGRlcmVmIHRoZSBvbGQgZWxlbS0+bm9kZSBiZWNhdXNlIHBvcE9uZUJs
b2NrQ29tbW9uIHRyYW5zZmVycmVkCisgICAgLy8gaXQgaW50byB0aGUgbV9jdXJyZW50L21fZGlk
UmVmQ3VycmVudCBmaWVsZHMuCisgICAgZWxlbS0+bm9kZSA9IGxhc3RDdXJyZW50OworICAgIGVs
ZW0tPmRpZFJlZk5vZGUgPSBkaWRSZWZMYXN0Q3VycmVudDsKKyAgICBlbGVtLT5uZXh0ID0gaGVh
ZDsKKyAgICBoZWFkID0gZWxlbTsKK30KKwordm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCkKK3sKKyAgICBtX2hhc1BFbGVtZW50SW5TY29w
ZSA9IE5vdEluU2NvcGU7CisgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tTdGFjazsK
KyAgICB3aGlsZSAoZWxlbSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUg
PSBlbGVtLT50YWdOYW1lOworICAgICAgICBpZiAodGFnTmFtZSA9PSBwVGFnKSB7CisgICAgICAg
ICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IEluU2NvcGU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0gZWxzZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBlbGVtID0gZWxlbS0+bmV4dDsKKyAgICB9Cit9CisKK3ZvaWQgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cG9wSW5saW5lQmxvY2tzKCkKK3sKKyAgICB3aGlsZSAo
bV9ibG9ja1N0YWNrICYmIGlzSW5saW5lKG1fY3VycmVudCkpCisgICAgICAgIHBvcE9uZUJsb2Nr
KCk7Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJlZUJsb2NrKCkKK3sK
KyAgICB3aGlsZSAobV9ibG9ja1N0YWNrKQorICAgICAgICBwb3BPbmVCbG9jaygpOworICAgIEFT
U0VSVCghbV9ibG9ja3NJblN0YWNrKTsKKyAgICBBU1NFUlQoIW1fdHJlZURlcHRoKTsKK30KKwor
dm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjcmVhdGVIZWFkKCkKK3sKKyAgICBpZiAo
bV9oZWFkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7CisgICAgICAgIGluc2VydE5vZGUo
SFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworICAgICAgICBBU1NF
UlQobV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgfHwgbV9pc1BhcnNpbmdGcmFnbWVudCk7
CisgICAgfQorCisgICAgbV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVu
dCk7CisKKyAgICBpZiAobV9pc1BhcnNpbmdGcmFnbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSFRNTEVsZW1lbnQqIGJvZHkgPSBtX2RvY3VtZW50LT5ib2R5KCk7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCktPmluc2VydEJl
Zm9yZShtX2hlYWQuZ2V0KCksIGJvZHksIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIG1faGVh
ZCA9IDA7CisgICAgICAgIAorICAgIC8vIElmIHRoZSBib2R5IGRvZXMgbm90IGV4aXN0IHlldCwg
dGhlbiB0aGUgPGhlYWQ+IHNob3VsZCBiZSBwdXNoZWQgYXMgdGhlIGN1cnJlbnQgYmxvY2suCisg
ICAgaWYgKG1faGVhZCAmJiAhYm9keSkgeworICAgICAgICBwdXNoQmxvY2sobV9oZWFkLT5sb2Nh
bE5hbWUoKSwgbV9oZWFkLT50YWdQcmlvcml0eSgpKTsKKyAgICAgICAgc2V0Q3VycmVudChtX2hl
YWQuZ2V0KCkpOworICAgIH0KK30KKworUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0KQoreworICAgIFJlZlB0cjxOb2RlPiBu
ID0gSFRNTERpdkVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKKworICAgIE5hbWVkTm9kZU1h
cCogYXR0cnMgPSB0LT5hdHRycy5nZXQoKTsKKworICAgIFJlZlB0cjxIVE1MSXNJbmRleEVsZW1l
bnQ+IGlzSW5kZXggPSBIVE1MSXNJbmRleEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50LCBtX2N1
cnJlbnRGb3JtRWxlbWVudC5nZXQoKSk7CisgICAgaXNJbmRleC0+c2V0QXR0cmlidXRlTWFwKGF0
dHJzKTsKKyAgICBpc0luZGV4LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsICJraHRtbF9pc2luZGV4
Iik7CisKKyAgICBTdHJpbmcgdGV4dCA9IHNlYXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpOwor
ICAgIGlmIChhdHRycykgeworICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gYXR0cnMtPmdldEF0
dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0cikpCisgICAgICAgICAgICB0ZXh0ID0gYS0+dmFsdWUoKS5z
dHJpbmcoKSArICIgIjsKKyAgICAgICAgdC0+YXR0cnMgPSAwOworICAgIH0KKworICAgIG4tPmFk
ZENoaWxkKEhUTUxIUkVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KSk7CisgICAgbi0+YWRkQ2hp
bGQoVGV4dDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRleHQpKTsKKyAgICBuLT5hZGRDaGlsZChpc0lu
ZGV4LnJlbGVhc2UoKSk7CisgICAgbi0+YWRkQ2hpbGQoSFRNTEhSRWxlbWVudDo6Y3JlYXRlKG1f
ZG9jdW1lbnQpKTsKKworICAgIHJldHVybiBuLnJlbGVhc2UoKTsKK30KKwordm9pZCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpzdGFydEJvZHkoKQoreworICAgIGlmIChtX2luQm9keSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9pbkJvZHkgPSB0cnVlOworCisgICAgaWYgKG1faXNpbmRl
eEVsZW1lbnQpIHsKKyAgICAgICAgaW5zZXJ0Tm9kZShtX2lzaW5kZXhFbGVtZW50LmdldCgpLCB0
cnVlIC8qIGRvbid0IGRlc2NlbmQgaW50byB0aGlzIG5vZGUgKi8pOworICAgICAgICBtX2lzaW5k
ZXhFbGVtZW50ID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6ZmluaXNoZWQoKQoreworICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgY29tcGxldGVseSBlbXB0
eSBkb2N1bWVudCwgaGVyZSdzIHRoZSBwbGFjZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxlbWVudC4K
KyAgICBpZiAobV9jdXJyZW50ICYmIG1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiAhbV9k
b2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpCisgICAgICAgIGluc2VydE5vZGUoSFRNTEh0bWxF
bGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOworCisgICAgLy8gVGhpcyBlbnN1cmVz
IHRoYXQgImN1cnJlbnQiIGlzIG5vdCBsZWZ0IHBvaW50aW5nIHRvIGEgbm9kZSB3aGVuIHRoZSBk
b2N1bWVudCBpcyBkZXN0cm95ZWQuCisgICAgZnJlZUJsb2NrKCk7CisgICAgc2V0Q3VycmVudCgw
KTsKKworICAgIC8vIFdhcm5pbmcsIHRoaXMgbWF5IGRlbGV0ZSB0aGUgcGFyc2VyLCBzbyBkb24n
dCB0cnkgdG8gZG8gYW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgorICAgIGlmICghbV9pc1BhcnNp
bmdGcmFnbWVudCkKKyAgICAgICAgbV9kb2N1bWVudC0+ZmluaXNoZWRQYXJzaW5nKCk7Cit9CisK
K3ZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRN
TFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEs
IGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQoreyAgICAKKyAg
ICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqIGh0bWxU
b2tlbml6ZXIgPSBzdGF0aWNfY2FzdDxMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIqPihtX2RvY3Vt
ZW50LT5wYXJzZXIoKSk7CisgICAgaW50IGxpbmVOdW1iZXIgPSBodG1sVG9rZW5pemVyLT5saW5l
TnVtYmVyKCkgKyAxOworCisgICAgQXRvbWljU3RyaW5nIHRhZzE7CisgICAgQXRvbWljU3RyaW5n
IHRhZzI7CisgICAgaWYgKHRhZ05hbWUxKSB7CisgICAgICAgIGlmICgqdGFnTmFtZTEgPT0gIiN0
ZXh0IikKKyAgICAgICAgICAgIHRhZzEgPSAiVGV4dCI7CisgICAgICAgIGVsc2UgaWYgKCp0YWdO
YW1lMSA9PSAiI2NvbW1lbnQiKQorICAgICAgICAgICAgdGFnMSA9ICI8IS0tIGNvbW1lbnQgLS0+
IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFnMSA9IChjbG9zZVRhZ3MgPyAiPC8iIDog
IjwiKSArICp0YWdOYW1lMSArICI+IjsKKyAgICB9CisgICAgaWYgKHRhZ05hbWUyKSB7CisgICAg
ICAgIGlmICgqdGFnTmFtZTIgPT0gIiN0ZXh0IikKKyAgICAgICAgICAgIHRhZzIgPSAiVGV4dCI7
CisgICAgICAgIGVsc2UgaWYgKCp0YWdOYW1lMiA9PSAiI2NvbW1lbnQiKQorICAgICAgICAgICAg
dGFnMiA9ICI8IS0tIGNvbW1lbnQgLS0+IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFn
MiA9IChjbG9zZVRhZ3MgPyAiPC8iIDogIjwiKSArICp0YWdOYW1lMiArICI+IjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnID0gaHRtbFBhcnNlckVycm9yTWVzc2Fn
ZVRlbXBsYXRlKGVycm9yQ29kZSk7CisgICAgaWYgKCFlcnJvck1zZykKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAoaHRtbFRva2VuaXplci0+
cHJvY2Vzc2luZ0NvbnRlbnRXcml0dGVuQnlTY3JpcHQoKSkKKyAgICAgICAgbWVzc2FnZSArPSBo
dG1sUGFyc2VyRG9jdW1lbnRXcml0ZU1lc3NhZ2UoKTsKKyAgICBtZXNzYWdlICs9IGVycm9yTXNn
OworICAgIG1lc3NhZ2UucmVwbGFjZSgiJXRhZzEiLCB0YWcxKTsKKyAgICBtZXNzYWdlLnJlcGxh
Y2UoIiV0YWcyIiwgdGFnMik7CisKKyAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+
YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIAorICAgICAgICBp
c1dhcm5pbmcoZXJyb3JDb2RlKSA/IFdhcm5pbmdNZXNzYWdlTGV2ZWwgOiBFcnJvck1lc3NhZ2VM
ZXZlbCwKKyAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgbV9kb2N1bWVudC0+dXJsKCkuc3Ry
aW5nKCkpOworfQorCisjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAorYm9vbCBzaG91bGRDcmVh
dGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChkb2N1bWVu
dCk7CisgICAgCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKSA/IGRv
Y3VtZW50LT5wYWdlKCktPnNldHRpbmdzKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncyA/ICFz
ZXR0aW5ncy0+bmVlZHNMZW9wYXJkTWFpbFF1aXJrcygpIDogdHJ1ZTsKK30KKyNlbGlmIGRlZmlu
ZWQoQlVJTERJTkdfT05fVElHRVIpCitib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1
bWVudCogZG9jdW1lbnQpCit7CisgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICAKKyAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+c2V0
dGluZ3MoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVkc1RpZ2Vy
TWFpbFF1aXJrcygpIDogdHJ1ZTsKK30KKyNlbmRpZgorCisKK1N0cmluZyBzZXJpYWxpemVGb3JO
dW1iZXJUeXBlKGRvdWJsZSBudW1iZXIpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIEhUTUw1LCAi
dGhlIGJlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBuIGFzIGEgZmxvYXRpbmcKKyAg
ICAvLyBwb2ludCBudW1iZXIiIGlzIGEgc3RyaW5nIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIFRvU3Ry
aW5nKCkgdG8gbi4KKyAgICBEdG9hQnVmZmVyIGJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBsZW5ndGg7
CisgICAgZG91YmxlVG9TdHJpbmdJbkphdmFTY3JpcHRGb3JtYXQobnVtYmVyLCBidWZmZXIsICZs
ZW5ndGgpOworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOworfQorCitib29sIHBh
cnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUqIG91dCkK
K3sKKyAgICAvLyBTZWUgSFRNTDUgMi40LjQuMyBgUmVhbCBudW1iZXJzLicKKworICAgIGlmIChz
cmMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gU3RyaW5nOjp0b0Rv
dWJsZSgpIGFjY2VwdHMgbGVhZGluZyArIFx0IFxuIFx2IFxmIFxyIGFuZCBTUEFDRSwgd2hpY2gg
YXJlIGludmFsaWQgaW4gSFRNTDUuCisgICAgLy8gU28sIGNoZWNrIHRoZSBmaXJzdCBjaGFyYWN0
ZXIuCisgICAgaWYgKHNyY1swXSAhPSAnLScgJiYgKHNyY1swXSA8ICcwJyB8fCBzcmNbMF0gPiAn
OScpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIHZhbGlkID0gZmFsc2U7Cisg
ICAgZG91YmxlIHZhbHVlID0gc3JjLnRvRG91YmxlKCZ2YWxpZCk7CisgICAgaWYgKCF2YWxpZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIE5hTiBhbmQgSW5maW5pdHkgYXJlIG5vdCB2
YWxpZCBudW1iZXJzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCisgICAgaWYgKCFpc2Zpbml0
ZSh2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyAtMCAtPiAwCisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgdmFsdWUgPSAwOworICAgIGlmIChvdXQpCisgICAgICAgICpvdXQg
PSB2YWx1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxUcmVlQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2Fj
eUhUTUxUcmVlQnVpbGRlci5jcHAJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0xl
Z2FjeUhUTUxUcmVlQnVpbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAK
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAKICNpbmNsdWRl
ICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKQEAgLTE0
MCw3ICsxNDAsNyBAQCBzdHJ1Y3QgSFRNTFN0YWNrRWxlbSA6IE5vbmNvcHlhYmxlIHsKICAqCiAg
Ki8KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRFcnJvcnMpCitMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBv
cnRFcnJvcnMpCiAgICAgOiBtX2RvY3VtZW50KGRvYykKICAgICAsIG1fY3VycmVudChkb2MpCiAg
ICAgLCBtX2RpZFJlZkN1cnJlbnQoZmFsc2UpCkBAIC0xNjAsNyArMTYwLDcgQEAgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZQogewogfQogCi1MZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKERvY3VtZW50RnJhZ21lbnQqIGZy
YWcsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorTGVn
YWN5SFRNTFRyZWVCdWlsZGVyOjpMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoRG9jdW1lbnRGcmFnbWVu
dCogZnJhZywgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24p
CiAgICAgOiBtX2RvY3VtZW50KGZyYWctPmRvY3VtZW50KCkpCiAgICAgLCBtX2N1cnJlbnQoZnJh
ZykKICAgICAsIG1fZGlkUmVmQ3VycmVudCh0cnVlKQpAQCAtMTgyLDE0ICsxODIsMTQgQEAgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZQogICAgICAgICBmcmFnLT5yZWYo
KTsKIH0KIAotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6fkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3IoKQorTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp+TGVnYWN5SFRNTFRyZWVCdWlsZGVyKCkK
IHsKICAgICBmcmVlQmxvY2soKTsKICAgICBpZiAobV9kaWRSZWZDdXJyZW50KQogICAgICAgICBt
X2N1cnJlbnQtPmRlcmVmKCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
cmVzZXQoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlc2V0KCkKIHsKICAgICBBU1NF
UlQoIW1faXNQYXJzaW5nRnJhZ21lbnQpOwogCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXNldCgpCiAgICAgICAgIG1fcGFyc2VyUXVpcmtzLT5y
ZXNldCgpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNldEN1cnJlbnQo
Tm9kZSogbmV3Q3VycmVudCkgCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6c2V0Q3VycmVu
dChOb2RlKiBuZXdDdXJyZW50KSAKIHsKICAgICBib29sIGRpZFJlZk5ld0N1cnJlbnQgPSBuZXdD
dXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gbV9kb2N1bWVudDsKICAgICBpZiAoZGlkUmVmTmV3Q3Vy
cmVudCkgCkBAIC0yMzAsNyArMjMwLDcgQEAgaW5saW5lIHN0YXRpYyBpbnQgdGFnUHJpb3JpdHlP
Zk5vZGUoTm9kZQogICAgIHJldHVybiBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKIH0KIAotaW5saW5lIHZvaWQgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bGltaXREZXB0aChpbnQgdGFnUHJpb3JpdHkpCitpbmxp
bmUgdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmxpbWl0RGVwdGgoaW50IHRhZ1ByaW9yaXR5
KQogewogICAgIHdoaWxlIChtX3RyZWVEZXB0aCA+PSBtYXhET01UcmVlRGVwdGgpCiAgICAgICAg
IHBvcEJsb2NrKG1fYmxvY2tTdGFjay0+dGFnTmFtZSk7CkBAIC0yNDAsMTMgKzI0MCwxMyBAQCBp
bmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpsCiAgICAgfQogfQogCi1pbmxp
bmUgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppbnNlcnROb2RlQWZ0ZXJMaW1pdERl
cHRoKE5vZGUqIG4sIGJvb2wgZmxhdCkKK2lubGluZSBib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRl
cjo6aW5zZXJ0Tm9kZUFmdGVyTGltaXREZXB0aChOb2RlKiBuLCBib29sIGZsYXQpCiB7CiAgICAg
bGltaXREZXB0aCh0YWdQcmlvcml0eU9mTm9kZShuKSk7CiAgICAgcmV0dXJuIGluc2VydE5vZGUo
biwgZmxhdCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6cGFyc2VUb2tlbihUb2tlbiogdCkKK1Bhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpwYXJzZVRva2VuKFRva2VuKiB0KQogewogICAgIGlmICghbV9za2lwTW9kZVRhZy5p
c051bGwoKSkgewogICAgICAgICBpZiAoIXQtPmJlZ2luVGFnICYmIHQtPnRhZ05hbWUgPT0gbV9z
a2lwTW9kZVRhZykKQEAgLTMzNyw3ICszMzcsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0CiAgICAgcmV0dXJuIG47CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cGFyc2VEb2N0eXBlVG9rZW4oRG9jdHlwZVRva2VuKiB0KQordm9pZCBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKIHsK
ICAgICAvLyBJZ25vcmUgYW55IGRvY3R5cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3JlIGRvY3R5
cGVzIGluIGZyYWdtZW50cy4KICAgICBpZiAobV9kb2N1bWVudC0+ZG9jdHlwZSgpIHx8IG1faXNQ
YXJzaW5nRnJhZ21lbnQgfHwgbV9jdXJyZW50ICE9IG1fZG9jdW1lbnQpCkBAIC0zNzIsNyArMzcy
LDcgQEAgc3RhdGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21pY1N0cgogICAgICAgICB8
fCB0YWdOYW1lID09IG9iamVjdFRhZyB8fCB0YWdOYW1lID09IHRhYmxlVGFnIHx8IHRhZ05hbWUg
PT0gaHRtbFRhZzsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppbnNlcnRO
b2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppbnNl
cnROb2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdE5v
ZGUobik7CiAKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6Omluc2VydE5vCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSkKIHsKICAgICAvLyBFcnJvciBoYW5kbGluZyBj
b2RlLiAgVGhpcyBpcyBqdXN0IGFkIGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJlbnQvY2hp
bGQgY29tYmluYXRpb25zLgogICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwpAQCAtNzI0LDIyICs3
MjQsMjIgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVFcgogICAgIHJl
dHVybiBpbnNlcnROb2RlKG4pOwogfQogCi10eXBlZGVmIGJvb2wgKExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYp
OwordHlwZWRlZiBib29sIChMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OipDcmVhdGVFcnJvckNoZWNr
RnVuYykoVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpOwogdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBDcmVhdGVFcnJvckNoZWNrRnVuYz4gRnVuY3Rpb25NYXA7CiAKLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJl
ZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRleHRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICByZXN1
bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNvbW1lbnRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRy
PE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcmVzdWx0ID0gQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1l
bnQsIHQtPnRleHQuZ2V0KCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhlYWRDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgaWYgKCFtX2hlYWQg
fHwgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIG1faGVhZCA9
IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwpAQCAtNzQ5LDcgKzc0OSw3IEBA
IGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGVhZENyZWEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Ym9keUNyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OmJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICAvLyBi
b2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAogICAgIGlmIChtX2hh
dmVGcmFtZVNldCkKQEAgLTc2NSw3ICs3NjUsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmJvZHlDcmVhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6ZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKGhlYWRUYWcpOwogICAg
IGlmIChtX2luQm9keSAmJiAhbV9oYXZlRnJhbWVTZXQgJiYgIW1faGF2ZUNvbnRlbnQpIHsKQEAg
LTc4NSw3ICs3ODUsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9v
bCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBS
ZWZQdHI8Tm9kZT4mIHJlc3VsdCkKIHsKICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBmb3JtIGlm
IHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCiAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50
IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgpAQCAtNzk3LDcgKzc5Nyw3IEBAIGJvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Zm9ybUNyZWEKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7CiAgICAgaWYg
KCFtX2luQm9keSkKQEAgLTgwOSwxMiArODA5LDEyIEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6aXNpbmRleEMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBS
ZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpkZENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQogewogICAgIHBDbG9z
ZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7CiAgICAgcG9wQmxvY2soZHRUYWcpOwpAQCAt
ODIyLDcgKzgyMiw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGUK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpk
dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQorYm9vbCBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRy
PE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0
KTsKICAgICBwb3BCbG9jayhkZFRhZyk7CkBAIC04MzAsNDYgKzgzMCw0NiBAQCBib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwg
UmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHJwVGFnKTsKICAg
ICBwb3BCbG9jayhydFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6cnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+
JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpydENyZWF0ZUVycm9yQ2hlY2soVG9rZW4q
LCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHJwVGFnKTsKICAgICBwb3BCbG9jayhy
dFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JikKK2Jv
b2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0
LCBSZWZQdHI8Tm9kZT4mKQogewogICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBDbG9z
ZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKK2Jvb2wg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRQQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hl
Y2sodCwgcmVzdWx0KTsKICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRTdHlsZUNyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9k
ZT4mKQogewogICAgIHJldHVybiBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50YWdOYW1lKTsK
IH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKK2Jvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVy
Ojp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAg
ICBwb3BCbG9jayh0ZFRhZyk7CiAgICAgcG9wQmxvY2sodGhUYWcpOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxlU2VjdGlvbkNyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KQogewogICAgIHBvcEJsb2NrKHRoZWFkVGFnKTsKICAgICBwb3BCbG9jayh0Ym9keVRhZyk7CkBA
IC04NzcsMTkgKzg3NywxOSBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnRhYmxl
U2VjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVm
UHRyPE5vZGU+JikKIHsKICAgICBzZXRTa2lwTW9kZShub2VtYmVkVGFnKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpub2ZyYW1lc0NyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCiB7
CiAgICAgc2V0U2tpcE1vZGUobm9mcmFtZXNUYWcpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiosIFJlZlB0cjxOb2RlPiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9zY3Jp
cHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBpZiAoIW1f
aXNQYXJzaW5nRnJhZ21lbnQpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+
ZnJhbWUoKTsKQEAgLTg5OSwxNCArODk5LDE0IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6bm9zY3JpcHQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpCitib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2so
VG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQogewogICAgIGlmIChoYXNQRWxlbWVudEluU2NvcGUoKSkK
ICAgICAgICAgcG9wQmxvY2socFRhZyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0cmljdENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBDbG9zZXJT
dHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKIHsKICAgICBpZiAo
bV9kb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtOTE1
LDcgKzkxNSw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclMKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptYXBD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCitib29sIExlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYgcmVzdWx0KQogewogICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSBIVE1MTWFwRWxlbWVudDo6
Y3JlYXRlKG1fZG9jdW1lbnQpOwogICAgIHJlc3VsdCA9IG1fY3VycmVudE1hcEVsZW1lbnQ7CkBA
IC05MzYsNDggKzkzNiw0OCBAQCBzdGF0aWMgdm9pZCBtYXBUYWdzVG9GdW5jKEZ1bmN0aW9uTWFw
JiBtCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6OmdldE5vZGUoVG9rZW4qIHQpCitQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6Z2V0Tm9kZShUb2tlbiogdCkKIHsKICAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGlu
ZyB0YWJsZS4KICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZ1bmN0aW9uTWFwLCBnRnVuY3Rpb25N
YXAsICgpKTsKICAgICBpZiAoZ0Z1bmN0aW9uTWFwLmlzRW1wdHkoKSkgewogICAgICAgICBRdWFs
aWZpZWROYW1lIG5lc3RlZENyZWF0ZUVycm9yVGFnc1tdID0geyBhVGFnLCBidXR0b25UYWcsIG5v
YnJUYWcsIHRyVGFnIH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBuZXN0
ZWRDcmVhdGVFcnJvclRhZ3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpuZXN0ZWRDcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5lc3Rl
ZENyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVkQ3JlYXRlRXJy
b3JDaGVjayk7CiAKICAgICAgICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9y
VGFnc1tdID0geyBiVGFnLCBiaWdUYWcsIGlUYWcsIHNUYWcsIHNtYWxsVGFnLCBzdHJpa2VUYWcs
IHR0VGFnLCB1VGFnIH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBuZXN0
ZWRTdHlsZUNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3Rl
ZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKIAogICAgICAgICBRdWFsaWZpZWROYW1lIHBD
bG9zZXJDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYWRkcmVzc1RhZywgYXJ0aWNsZVRhZywKICAgICAg
ICAgICAgIGFzaWRlVGFnLCBibG9ja3F1b3RlVGFnLCBjZW50ZXJUYWcsIGRpclRhZywgZGl2VGFn
LCBkbFRhZywKICAgICAgICAgICAgIGZpZWxkc2V0VGFnLCBmb290ZXJUYWcsIGgxVGFnLCBoMlRh
ZywgaDNUYWcsIGg0VGFnLCBoNVRhZywgaDZUYWcsCiAgICAgICAgICAgICBoZWFkZXJUYWcsIGhn
cm91cFRhZywgaHJUYWcsIGxpc3RpbmdUYWcsIG1lbnVUYWcsIG5hdlRhZywgb2xUYWcsCiAgICAg
ICAgICAgICBwVGFnLCBwbGFpbnRleHRUYWcsIHByZVRhZywgc2VjdGlvblRhZywgdWxUYWcgfTsK
LSAgICAgICAgbWFwVGFnc1RvRnVuYyhnRnVuY3Rpb25NYXAsIHBDbG9zZXJDcmVhdGVFcnJvclRh
Z3MsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7
CisgICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBwQ2xvc2VyQ3JlYXRlRXJyb3JU
YWdzLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayk7CiAK
LSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgYm9keVRhZywgJkxlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9G
dW5jKGdGdW5jdGlvbk1hcCwgZGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpkZENy
ZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBkdFRh
ZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmR0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAg
ICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZvcm1UYWcsICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhn
RnVuY3Rpb25NYXAsIGZyYW1lc2V0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJh
bWVzZXRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgaGVhZFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhlYWRDcmVhdGVFcnJvckNo
ZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgaXNpbmRleFRhZywgJkxl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbWFwVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6bWFwQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIGxpVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkUENsb3Nl
ckNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBu
b2VtYmVkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9lbWJlZENyZWF0ZUVycm9y
Q2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub2ZyYW1lc1RhZywg
JkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7Ci0g
ICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vc2NyaXB0VGFnLCAmTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGFibGVUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIHJwVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cnBDcmVh
dGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgcnRUYWcs
ICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpydENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBzZWxlY3RUYWcsICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5j
KGdGdW5jdGlvbk1hcCwgdGRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNl
bGxDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwg
dGhUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNo
ZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGJvZHlUYWcsICZMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKLSAg
ICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGZvb3RUYWcsICZMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGhlYWRUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5j
KGdGdW5jdGlvbk1hcCwgYm9keVRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Ym9keUNyZWF0
ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBkZFRhZywg
JkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZGRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFw
VGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZHRUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmR0
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZv
cm1UYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZnJhbWVzZXRUYWcsICZMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIGhlYWRUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhlYWRD
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgaXNp
bmRleFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBtYXBUYWcsICZMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6Om1hcENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMo
Z0Z1bmN0aW9uTWFwLCBsaVRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bmVzdGVkUENsb3Nl
ckNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBu
b2VtYmVkVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVj
ayk7CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIG5vZnJhbWVzVGFnLCAmTGVn
YWN5SFRNTFRyZWVCdWlsZGVyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBt
YXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub3NjcmlwdFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdG
dW5jdGlvbk1hcCwgdGFibGVUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBDbG9zZXJTdHJp
Y3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwg
cnBUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJwQ3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJ0VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjpydENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9u
TWFwLCBzZWxlY3RUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnNlbGVjdENyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0ZFRhZywgJkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIG1h
cFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlv
bk1hcCwgdGJvZHlUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlU2VjdGlvbkNyZWF0
ZUVycm9yQ2hlY2spOworICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0Zm9vdFRh
ZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7
CisgICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoZWFkVGFnLCAmTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKIAotICAgICAgICBn
RnVuY3Rpb25NYXAuc2V0KGNvbW1lbnRBdG9tLmltcGwoKSwgJkxlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dCh0ZXh0QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0ZXh0Q3JlYXRl
RXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5zZXQoY29tbWVudEF0b20uaW1wbCgp
LCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC5zZXQodGV4dEF0b20uaW1wbCgpLCAmTGVnYWN5SFRNTFRyZWVCdWls
ZGVyOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayk7CiAgICAgfQogCiAgICAgYm9vbCBwcm9jZWVkID0g
dHJ1ZTsKQEAgLTk4OSw3ICs5ODksNyBAQCBQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLWJvb2wgTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKQorYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmFsbG93TmVzdGVk
UmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKICAgICAvLyB3d3cu
bGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMgYSBsZXZl
bCBvZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBhIGJ1bmNo
IG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMApAQCAtMTAwMSw3ICsxMDAx
LDcgQEAgYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjphbGxvd05lcwogICAgIHJldHVy
biBpICE9IGNNYXhSZWR1bmRhbnRUYWdEZXB0aDsKIH0KIAotdm9pZCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4qIHQpCit2b2lkIExlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuKiB0KQogewogICAgIC8vIFN1cHBvcnQgZm9y
IHJlYWxseSBicm9rZW4gaHRtbC4KICAgICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcs
IHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBl
bmQgb2YgdGhlIGRvYy4KQEAgLTEwMzEsNyArMTAzMSw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cHJvY2Vzc0MKICAgICB9CiB9CiAKLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6aXNIZWFkaW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK2Jvb2wg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyOjppc0hlYWRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGFnTmFtZVNldCwgaGVhZGluZ1Rh
Z3MsICgpKTsKICAgICBpZiAoaGVhZGluZ1RhZ3MuaXNFbXB0eSgpKSB7CkBAIC0xMDQxLDcgKzEw
NDEsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSGVhZGluCiAgICAgcmV0
dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKIH0KIAotYm9vbCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0lubGluZShOb2RlKiBub2RlKSBjb25zdAorYm9vbCBM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAg
aWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDcxLDcg
KzEwNzEsNyBAQCBib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSW5saW5lCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzUmVz
aWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCitib29sIExlZ2FjeUhU
TUxUcmVlQnVpbGRlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1w
bCo+LCByZXNpZHVhbFN0eWxlVGFncywgKCkpOwogICAgIGlmIChyZXNpZHVhbFN0eWxlVGFncy5p
c0VtcHR5KCkpIHsKQEAgLTEwODMsNyArMTA4Myw3IEBAIGJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6aXNSZXNpZHUKICAgICByZXR1cm4gcmVzaWR1YWxTdHlsZVRhZ3MuY29udGFpbnMo
dGFnTmFtZS5pbXBsKCkpOwogfQogCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Omlz
QWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQorYm9v
bCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4sIHVuYWZmZWN0ZWRUYWdzLCAoKSk7CiAgICAgaWYgKHVuYWZm
ZWN0ZWRUYWdzLmlzRW1wdHkoKSkgewpAQCAtMTA5NSw3ICsxMDk1LDcgQEAgYm9vbCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjppc0FmZmVjdAogICAgIHJldHVybiAhdW5hZmZlY3RlZFRhZ3Mu
Y29udGFpbnModGFnTmFtZS5pbXBsKCkpOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tF
bGVtKiBlbGVtKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZVJlc2lkdWFsU3R5
bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAgIEhUTUxT
dGFja0VsZW0qIG1heEVsZW0gPSAwOwogICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKQEAgLTEz
MjYsNyArMTMyNiw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlUmUK
ICAgICBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyA9IGZhbHNlOwogfQogCi12
b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhU
TUxTdGFja0VsZW0qIGVsZW0sIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQordm9pZCBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0q
IGVsZW0sIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8vIExvb3AgZm9yIGVh
Y2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUgKGVsZW0pIHsKQEAg
LTEzNjcsNyArMTM2Nyw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cmVvcGVu
UmUKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHVzaEJsb2Nr
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IGxldmVsKQordm9pZCBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBs
ZXZlbCkKIHsKICAgICBtX2Jsb2NrU3RhY2sgPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBs
ZXZlbCwgbV9jdXJyZW50LCBtX2RpZFJlZkN1cnJlbnQsIG1fYmxvY2tTdGFjayk7CiAgICAgaWYg
KGxldmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkKQEAgLTEzODAsNyArMTM4MCw3IEBA
IHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cHVzaEJsb2MKICAgICAgICAgbV9oYXNQ
RWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9vbCByZXBv
cnRFcnJvcnMpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wQmxvY2soY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBib29sIHJlcG9ydEVycm9ycykKIHsKICAgICBIVE1MU3RhY2tF
bGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwogCkBAIC0xNDY5LDcgKzE0NjksNyBAQCB2b2lkIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcEJsb2NrCiAgICAgcmVvcGVuUmVzaWR1YWxTdHls
ZVRhZ3MocmVzaWR1YWxTdHlsZVN0YWNrLCBtYWxmb3JtZWRUYWJsZVBhcmVudCk7CiB9CiAKLWlu
bGluZSBIVE1MU3RhY2tFbGVtKiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwb3BPbmVCbG9j
a0NvbW1vbigpCitpbmxpbmUgSFRNTFN0YWNrRWxlbSogTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpw
b3BPbmVCbG9ja0NvbW1vbigpCiB7CiAgICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9IG1fYmxvY2tT
dGFjazsKIApAQCAtMTQ5OCw3ICsxNDk4LDcgQEAgaW5saW5lIEhUTUxTdGFja0VsZW0qIExlZ2Fj
eUhUTUxUcmVlQ29ucwogICAgIHJldHVybiBlbGVtOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OnBvcE9uZUJsb2NrKCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpw
b3BPbmVCbG9jaygpCiB7CiAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgbm9kZSBiZWZvcmUgcG9w
T25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBpdC4KICAgICBOb2RlKiBsYXN0Q3VycmVudCA9IG1f
Y3VycmVudDsKQEAgLTE1MTAsNyArMTUxMCw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6cG9wT25lQmwKICAgICAgICAgbGFzdEN1cnJlbnQtPmRlcmVmKCk7CiB9CiAKLXZvaWQg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bW92ZU9uZUJsb2NrVG9TdGFjayhIVE1MU3RhY2tF
bGVtKiYgaGVhZCkKK3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjptb3ZlT25lQmxvY2tUb1N0
YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFkKQogewogICAgIC8vIFdlJ2xsIGJlIHVzaW5nIHRoZSBz
dGFjayBlbGVtZW50IHdlJ3JlIHBvcHBpbmcsIGJ1dCBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KICAg
ICAvLyBTZWUgdGhlIHR3byBjYWxsZXJzIGZvciBkZXRhaWxzLgpAQCAtMTUzMiw3ICsxNTMyLDcg
QEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptb3ZlT25lQgogICAgIGhlYWQgPSBl
bGVtOwogfQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZIYXNQRWxl
bWVudEluU2NvcGUoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmNoZWNrSWZIYXNQRWxl
bWVudEluU2NvcGUoKQogewogICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsK
ICAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwpAQCAtMTU0NywxMyArMTU0
NywxMyBAQCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZICiAgICAgfQog
fQogCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBvcElubGluZUJsb2NrcygpCit2
b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wSW5saW5lQmxvY2tzKCkKIHsKICAgICB3aGls
ZSAobV9ibG9ja1N0YWNrICYmIGlzSW5saW5lKG1fY3VycmVudCkpCiAgICAgICAgIHBvcE9uZUJs
b2NrKCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZnJlZUJsb2NrKCkK
K3ZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmcmVlQmxvY2soKQogewogICAgIHdoaWxlICht
X2Jsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CkBAIC0xNTYxLDcgKzE1NjEsNyBA
QCB2b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyZWVCbG9jCiAgICAgQVNTRVJUKCFt
X3RyZWVEZXB0aCk7CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Y3JlYXRl
SGVhZCgpCit2b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlSGVhZCgpCiB7CiAgICAg
aWYgKG1faGVhZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgdm9pZCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjcmVhdGVIZQogICAgIH0KIH0KIAotUGFzc1JlZlB0
cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoYW5kbGVJc2luZGV4KFRva2VuKiB0
KQorUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZUlzaW5kZXgo
VG9rZW4qIHQpCiB7CiAgICAgUmVmUHRyPE5vZGU+IG4gPSBIVE1MRGl2RWxlbWVudDo6Y3JlYXRl
KG1fZG9jdW1lbnQpOwogCkBAIC0xNjE0LDcgKzE2MTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0CiAgICAgcmV0dXJuIG4ucmVsZWFzZSgpOwogfQogCi12b2lk
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnN0YXJ0Qm9keSgpCit2b2lkIExlZ2FjeUhUTUxU
cmVlQnVpbGRlcjo6c3RhcnRCb2R5KCkKIHsKICAgICBpZiAobV9pbkJvZHkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTE2MjcsNyArMTYyNyw3IEBAIHZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cjo6c3RhcnRCb2QKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
ZmluaXNoZWQoKQordm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKIHsKICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBhIGNvbXBsZXRlbHkgZW1wdHkgZG9jdW1lbnQsIGhlcmUncyB0
aGUgcGxhY2UgdG8gY3JlYXRlIHRoZSBIVE1MIGVsZW1lbnQuCiAgICAgaWYgKG1fY3VycmVudCAm
JiBtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIW1fZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpKQpAQCAtMTY0Miw3ICsxNjQyLDcgQEAgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpmaW5pc2hlZAogICAgICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKIH0K
IAotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXBvcnRFcnJvclRvQ29uc29sZShI
VE1MUGFyc2VyRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1l
MSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpCit2b2lkIExl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6cmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNlckVycm9y
Q29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0IEF0b21p
Y1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKQogeyAgICAKICAgICBGcmFtZSogZnJh
bWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCkluZGV4OiBXZWJDb3Jl
L2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oCShyZXZpc2lvbiA2MTY3MikJKGZyb20gV2ViQ29yZS9o
dG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IuaDo2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9M
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykK
KyAgICAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKKyAgICAg
ICAgICAgICAgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQorICAgICAg
ICAgICAgICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICAgIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VyRXJyb3JDb2Rlcy5o
IgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdHlwZVRva2VuOworY2xhc3MgRG9jdW1lbnQ7Citj
bGFzcyBEb2N1bWVudEZyYWdtZW50OworY2xhc3MgSFRNTERvY3VtZW50OworY2xhc3MgSFRNTEZv
cm1FbGVtZW50OworY2xhc3MgSFRNTEhlYWRFbGVtZW50OworY2xhc3MgSFRNTE1hcEVsZW1lbnQ7
CitjbGFzcyBIVE1MUGFyc2VyUXVpcmtzOworY2xhc3MgTm9kZTsKKworc3RydWN0IEhUTUxTdGFj
a0VsZW07CitzdHJ1Y3QgVG9rZW47CisKKy8qKgorICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQg
cmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlciwgYW5kCisgKiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0Lgor
ICovCitjbGFzcyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKK3B1YmxpYzoKKyAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKEhUTUxEb2N1bWVudCos
IGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKERvY3Vt
ZW50RnJhZ21lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlw
dGluZ0FsbG93ZWQpOworICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoKTsK
KworICAgIC8qKgorICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tl
bml6ZXIKKyAgICAgKi8KKyAgICBQYXNzUmVmUHRyPE5vZGU+IHBhcnNlVG9rZW4oVG9rZW4qKTsK
KyAgICAKKyAgICAvLyBQYXJzZXMgYSBkb2N0eXBlIHRva2VuLgorICAgIHZvaWQgcGFyc2VEb2N0
eXBlVG9rZW4oRG9jdHlwZVRva2VuKik7CisKKyAgICAvKioKKyAgICAgKiB0b2tlbml6ZXIgc2F5
cyBpdCdzIG5vdCBnb2luZyB0byBiZSBzZW5kaW5nIHVzIGFueSBtb3JlIHRva2VucworICAgICAq
LworICAgIHZvaWQgZmluaXNoZWQoKTsKKworICAgIC8qKgorICAgICAqIHJlc2V0cyB0aGUgcGFy
c2VyCisgICAgICovCisgICAgdm9pZCByZXNldCgpOworCisgICAgYm9vbCBza2lwTW9kZSgpIGNv
bnN0IHsgcmV0dXJuICFtX3NraXBNb2RlVGFnLmlzTnVsbCgpOyB9CisgICAgYm9vbCBpc0hhbmRs
aW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxpbmdS
ZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRDdXJy
ZW50KE5vZGUqKTsKKyAgICB2b2lkIGRlcmVmQ3VycmVudCgpOworICAgIHZvaWQgc2V0U2tpcE1v
ZGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgbV9za2lwTW9kZVRhZyA9IHFOYW1lLmxv
Y2FsTmFtZSgpOyB9CisKKyAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5vZGUoVG9rZW4qKTsKKyAg
ICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAg
Ym9vbCBjYW52YXNDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAg
Ym9vbCBjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAg
IGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9v
bCBkdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29sIGZv
cm1DcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9vbCBmcmFt
ZXNldENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29sIGhl
YWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9vbCBpZnJh
bWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7CisgICAgYm9vbCBpc2lu
ZGV4Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wgbWFw
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wgbmVzdGVk
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAgIGJvb2wgbmVzdGVk
UENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAgICBib29s
IG5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOworICAg
IGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKKyAg
ICBib29sIG5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwor
ICAgIGJvb2wgbm9sYXllckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsK
KyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OworICAgIGJvb2wgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4m
KTsKKyAgICBib29sIHBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRy
PE5vZGU+Jik7CisgICAgYm9vbCBycENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKKyAgICBib29sIHJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OworICAgIGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OworICAgIGJvb2wgdGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpOworICAgIGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0
cjxOb2RlPiYpOworICAgIGJvb2wgdGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKTsKKworICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7CisKKyAgICB2b2lk
IGxpbWl0RGVwdGgoaW50IHRhZ1ByaW9yaXR5KTsKKyAgICBib29sIGluc2VydE5vZGVBZnRlckxp
bWl0RGVwdGgoTm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGluc2VydE5vZGUo
Tm9kZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVycm9yKE5vZGUqLCBi
b29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkp
OworICAgIAorICAgIHZvaWQgcHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwg
aW50IGxldmVsKTsKKyAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBR
dWFsaWZpZWROYW1lJiBxTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSkgeyByZXR1cm4g
cG9wQmxvY2socU5hbWUubG9jYWxOYW1lKCksIHJlcG9ydEVycm9ycyk7IH0gLy8gQ29udmVuaWVu
Y2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgorICAgIHZvaWQgcG9wT25lQmxvY2soKTsKKyAg
ICB2b2lkIG1vdmVPbmVCbG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhlYWQpOworICAgIGlu
bGluZSBIVE1MU3RhY2tFbGVtKiBwb3BPbmVCbG9ja0NvbW1vbigpOworICAgIHZvaWQgcG9wSW5s
aW5lQmxvY2tzKCk7CisKKyAgICB2b2lkIGZyZWVCbG9jaygpOworCisgICAgdm9pZCBjcmVhdGVI
ZWFkKCk7CisKKyAgICBzdGF0aWMgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKTsKKyAgICBzdGF0aWMgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0
eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBoYW5kbGVSZXNpZHVh
bFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSopOworICAgIHZvaWQgcmVv
cGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSosIE5vZGUqIG1hbGZvcm1lZFRhYmxl
UGFyZW50KTsKKworICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lKTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0hlYWRpbmdUYWcoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKworICAgIGJvb2wgaXNJbmxpbmUoTm9kZSopIGNv
bnN0OworICAgIAorICAgIHZvaWQgc3RhcnRCb2R5KCk7IC8vIGluc2VydHMgdGhlIGlzaW5kZXgg
ZWxlbWVudAorICAgIFBhc3NSZWZQdHI8Tm9kZT4gaGFuZGxlSXNpbmRleChUb2tlbiopOworCisg
ICAgdm9pZCBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7CisgICAgYm9vbCBoYXNQRWxlbWVu
dEluU2NvcGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1faGFzUEVsZW1lbnRJblNjb3BlID09IFVu
a25vd24pCisgICAgICAgICAgICBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7CisgICAgICAg
IHJldHVybiBtX2hhc1BFbGVtZW50SW5TY29wZSA9PSBJblNjb3BlOworICAgIH0KKworICAgIHZv
aWQgcmVwb3J0RXJyb3IoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21p
Y1N0cmluZyogdGFnTmFtZTEgPSAwLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyID0gMCwg
Ym9vbCBjbG9zZVRhZ3MgPSBmYWxzZSkKKyAgICB7IGlmICghbV9yZXBvcnRFcnJvcnMpIHJldHVy
bjsgcmVwb3J0RXJyb3JUb0NvbnNvbGUoZXJyb3JDb2RlLCB0YWdOYW1lMSwgdGFnTmFtZTIsIGNs
b3NlVGFncyk7IH0KKworICAgIHZvaWQgcmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNlckVy
cm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5n
KiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpOworICAgIAorICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OworCisgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9uZSBuZXcg
ZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuIENhbiBiZSBhIGRvY3VtZW50IGZyYWdtZW50LCBh
IGRvY3VtZW50IG9yIGFuIGVsZW1lbnQuCisgICAgTm9kZSogbV9jdXJyZW50OworICAgIC8vIFdl
IGNhbid0IHJlZiBhIGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFudGx5IGNo
ZWNrIGlmIGEgbm9kZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZGVy
ZWYuCisgICAgYm9vbCBtX2RpZFJlZkN1cnJlbnQ7CisKKyAgICBIVE1MU3RhY2tFbGVtKiBtX2Js
b2NrU3RhY2s7CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlvcml0eSBtaW5C
bG9ja0xldmVsVGFnUHJpb3JpdHkgb3IgaGlnaGVyCisgICAgLy8gY3VycmVudGx5IGluIG1fYmxv
Y2tTdGFjay4gVGhlIHBhcnNlciBlbmZvcmNlcyBhIGNhcCBvbiB0aGlzIHZhbHVlIGJ5CisgICAg
Ly8gYWRkaW5nIHN1Y2ggbmV3IGVsZW1lbnRzIGFzIHNpYmxpbmdzIGluc3RlYWQgb2YgY2hpbGRy
ZW4gb25jZSBpdCBpcyByZWFjaGVkLgorICAgIHNpemVfdCBtX2Jsb2Nrc0luU3RhY2s7CisgICAg
Ly8gRGVwdGggb2YgdGhlIHRyZWUuCisgICAgdW5zaWduZWQgbV90cmVlRGVwdGg7CisKKyAgICBl
bnVtIEVsZW1lbnRJblNjb3BlU3RhdGUgeyBOb3RJblNjb3BlLCBJblNjb3BlLCBVbmtub3duIH07
IAorICAgIEVsZW1lbnRJblNjb3BlU3RhdGUgbV9oYXNQRWxlbWVudEluU2NvcGU7CisKKyAgICBS
ZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBtX2N1cnJlbnRGb3JtRWxlbWVudDsgLy8gY3VycmVudGx5
IGFjdGl2ZSBmb3JtCisgICAgUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBtX2N1cnJlbnRNYXBFbGVt
ZW50OyAvLyBjdXJyZW50IG1hcAorICAgIFJlZlB0cjxIVE1MSGVhZEVsZW1lbnQ+IG1faGVhZDsg
Ly8gaGVhZCBlbGVtZW50OyBuZWVkZWQgZm9yIEhUTUwgd2hpY2ggZGVmaW5lcyA8YmFzZT4gYWZ0
ZXIgPC9oZWFkPgorICAgIFJlZlB0cjxOb2RlPiBtX2lzaW5kZXhFbGVtZW50OyAvLyBhIHBvc3Np
YmxlIDxpc2luZGV4PiBlbGVtZW50IGluIHRoZSBoZWFkCisKKyAgICBib29sIG1faW5Cb2R5Owor
ICAgIGJvb2wgbV9oYXZlQ29udGVudDsKKyAgICBib29sIG1faGF2ZUZyYW1lU2V0OworCisgICAg
QXRvbWljU3RyaW5nIG1fc2tpcE1vZGVUYWc7IC8vIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2Fy
ZCBhbGwgdGFncyB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCisKKyAgICBib29s
IG1faXNQYXJzaW5nRnJhZ21lbnQ7CisgICAgYm9vbCBtX3JlcG9ydEVycm9yczsKKyAgICBib29s
IG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOworICAgIGludCBtX2luU3RyYXlU
YWJsZUNvbnRlbnQ7CisgICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fc2NyaXB0aW5n
UGVybWlzc2lvbjsKKworICAgIE93blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBtX3BhcnNlclF1aXJr
czsKK307CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpCitib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCop
OworI2Vsc2UKK2lubGluZSBib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCop
IHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCisvLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0
cmluZyB0byBhIGZsb2F0aW5nIG51bWJlci4KKy8vIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCB0
aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLiBUYWtlIGNhcmUgdGhhdCBsZWFkaW5nIG9yIHRyYWls
aW5nIHVubmVjZXNzYXJ5IGNoYXJhY3RlcnMgbWFrZSBmYWlsdXJlcy4gIFRoaXMgcmV0dXJucyBm
YWxzZSBmb3IgYW4gZW1wdHkgc3RyaW5nIGlucHV0LgorLy8gVGhlIGRvdWJsZSogcGFyYW1ldGVy
IG1heSBiZSAwLgorYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJpbmcm
LCBkb3VibGUqKTsKKy8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHRvIGEgc3RyaW5n
LiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mCisvLyBIVE1MNSdzICJhbGdvcml0aG0gdG8g
Y29udmVydCBhIG51bWJlciB0byBhIHN0cmluZyIgZm9yIE5VTUJFUi9SQU5HRSB0eXBlcy4KK1N0
cmluZyBzZXJpYWxpemVGb3JOdW1iZXJUeXBlKGRvdWJsZSk7CisKK30KKyAgICAKKyNlbmRpZiAv
LyBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9MZWdhY3lI
VE1MVHJlZUJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyLmgJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxU
cmVlQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsMTEgQEAgc3RydWN0IFRv
a2VuOwogICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9r
ZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciwgYW5kCiAgKiBidWlsZHMgdXAg
dGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0LgogICovCi1jbGFzcyBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIExlZ2FjeUhUTUxUcmVl
QnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3RvcihIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9ydEVycm9ycyk7Ci0gICAgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3RvcihEb2N1bWVudEZyYWdtZW50KiwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uID0gRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKTsKLSAgICB2aXJ0dWFsIH5M
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKCk7CisgICAgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKEhU
TUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKKyAgICBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXIoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9IEZyYWdt
ZW50U2NyaXB0aW5nQWxsb3dlZCk7CisgICAgdmlydHVhbCB+TGVnYWN5SFRNTFRyZWVCdWlsZGVy
KCk7CiAKICAgICAvKioKICAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBieSB0aGUg
dG9rZW5pemVyCkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiA2MTY3MikKKysrIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNvbnN0
cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzQ0ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAxOTk3IE1hcnRpbiBKb25lcyAobWpvbmVzQGtkZS5vcmcpCi0gICAgICAgICAg
ICAgIChDKSAxOTk3IFRvcmJlbiBXZWlzICh3ZWlzQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChD
KSAxOTk5LDIwMDEgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMp
IDIwMDAsMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yLmgi
Ci0KLSNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgi
Ci0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ29tbWVudC5oIgotI2luY2x1
ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiRnJhbWUu
aCIKLSNpbmNsdWRlICJIVE1MQm9keUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MRGl2RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxETGlzdEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKLSNpbmNsdWRlICJIVE1MRm9y
bUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1M
SFJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEh0bWxFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TElzSW5kZXhFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VyUXVpcmtzLmgiCi0jaW5jbHVkZSAi
SFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lI
VE1MRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dC5oIgot
I2luY2x1ZGUgIlRyZWVEZXB0aExpbWl0LmgiCi0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9kdG9hLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNNYXhSZWR1bmRh
bnRUYWdEZXB0aCA9IDIwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNSZXNpZHVhbFN0eWxlTWF4
RGVwdGggPSAyMDA7Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY1Jlc2lkdWFsU3R5bGVJdGVyYXRp
b25MaW1pdCA9IDU7Ci0KLQotc3RhdGljIGNvbnN0IGludCBtaW5CbG9ja0xldmVsVGFnUHJpb3Jp
dHkgPSAzOwotCi0vLyBBIGNhcCBvbiB0aGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlvcml0eSBt
aW5CbG9ja0xldmVsVGFnUHJpb3JpdHkgb3IgaGlnaGVyCi0vLyBhbGxvd2VkIGluIG1fYmxvY2tT
dGFjay4gVGhlIGNhcCBpcyBlbmZvcmNlZCBieSBhZGRpbmcgc3VjaCBuZXcgZWxlbWVudHMgYXMK
LS8vIHNpYmxpbmdzIGluc3RlYWQgb2YgY2hpbGRyZW4gb25jZSBpdCBpcyByZWFjaGVkLgotc3Rh
dGljIGNvbnN0IHNpemVfdCBjTWF4QmxvY2tEZXB0aCA9IDQwOTY7Ci0KLQotdHlwZWRlZiBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiBUYWdOYW1lU2V0OwotCi10ZW1wbGF0ZTwgc2l6ZV90IEFy
cmF5U2l6ZSA+Ci1zdGF0aWMgdm9pZCBhZGRUYWdzKFRhZ05hbWVTZXQmIHNldCwgUXVhbGlmaWVk
TmFtZSAoJm5hbWVzKVtBcnJheVNpemVdKQotewotICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwg
QXJyYXlTaXplOyB4KyspIHsKLSAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSA9IG5h
bWVzW3hdOwotICAgICAgICBzZXQuYWRkKG5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICB9
Ci19Ci0KLXN0cnVjdCBIVE1MU3RhY2tFbGVtIDogTm9uY29weWFibGUgewotICAgIEhUTUxTdGFj
a0VsZW0oY29uc3QgQXRvbWljU3RyaW5nJiB0LCBpbnQgbHZsLCBOb2RlKiBuLCBib29sIHIsIEhU
TUxTdGFja0VsZW0qIG54KQotICAgICAgICA6IHRhZ05hbWUodCkKLSAgICAgICAgLCBsZXZlbChs
dmwpCi0gICAgICAgICwgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpCi0gICAgICAgICwgbm9kZShu
KQotICAgICAgICAsIGRpZFJlZk5vZGUocikKLSAgICAgICAgLCBuZXh0KG54KQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGRlcmVmTm9kZSgpCi0gICAgewotICAgICAgICBpZiAoZGlkUmVmTm9k
ZSkKLSAgICAgICAgICAgIG5vZGUtPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgQXRvbWljU3RyaW5n
IHRhZ05hbWU7Ci0gICAgaW50IGxldmVsOwotICAgIGJvb2wgc3RyYXlUYWJsZUNvbnRlbnQ7Ci0g
ICAgTm9kZSogbm9kZTsKLSAgICBib29sIGRpZFJlZk5vZGU7Ci0gICAgSFRNTFN0YWNrRWxlbSog
bmV4dDsKLX07Ci0KLS8qKgotICogVGhlIHBhcnNlciBwYXJzZXMgdG9rZW5pemVkIGlucHV0IGlu
dG8gdGhlIGRvY3VtZW50LCBidWlsZGluZyB1cCB0aGUKLSAqIGRvY3VtZW50IHRyZWUuIElmIHRo
ZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZCwgcGFyc2luZyBpdCBpcyBzdHJhaWdodGZvcndhcmQu
Ci0gKgotICogVW5mb3J0dW5hdGVseSwgd2UgaGF2ZSB0byBoYW5kbGUgbWFueSBIVE1MIGRvY3Vt
ZW50cyB0aGF0IGFyZSBub3Qgd2VsbC1mb3JtZWQsCi0gKiBzbyB0aGUgcGFyc2VyIGhhcyB0byBi
ZSB0b2xlcmFudCBhYm91dCBlcnJvcnMuCi0gKgotICogV2UgaGF2ZSB0byB0YWtlIGNhcmUgb2Yg
YXQgbGVhc3QgdGhlIGZvbGxvd2luZyBlcnJvciBjb25kaXRpb25zOgotICoKLSAqIDEuIFRoZSBl
bGVtZW50IGJlaW5nIGFkZGVkIGlzIGV4cGxpY2l0bHkgZm9yYmlkZGVuIGluc2lkZSBzb21lIG91
dGVyIHRhZy4KLSAqICAgIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgY2xvc2UgYWxsIHRhZ3MgdXAg
dG8gdGhlIG9uZSwgd2hpY2ggZm9yYmlkcwotICogICAgdGhlIGVsZW1lbnQsIGFuZCBhZGQgaXQg
YWZ0ZXJ3YXJkcy4KLSAqCi0gKiAyLiBXZSBhcmUgbm90IGFsbG93ZWQgdG8gYWRkIHRoZSBlbGVt
ZW50IGRpcmVjdGx5LiBJdCBjb3VsZCBiZSB0aGF0Ci0gKiAgICB0aGUgcGVyc29uIHdyaXRpbmcg
dGhlIGRvY3VtZW50IGZvcmdvdCBzb21lIHRhZyBpbiBiZXR3ZWVuIChvciB0aGF0IHRoZQotICog
ICAgdGFnIGluIGJldHdlZW4gaXMgb3B0aW9uYWwpLiBUaGlzIGNvdWxkIGJlIHRoZSBjYXNlIHdp
dGggdGhlIGZvbGxvd2luZwotICogICAgdGFnczogSFRNTCBIRUFEIEJPRFkgVEJPRFkgVFIgVEQg
TEkgKGRpZCBJIGZvcmdldCBhbnk/KS4KLSAqCi0gKiAzLiBXZSB3YW50IHRvIGFkZCBhIGJsb2Nr
IGVsZW1lbnQgaW5zaWRlIHRvIGFuIGlubGluZSBlbGVtZW50LiBDbG9zZSBhbGwKLSAqICAgIGlu
bGluZSBlbGVtZW50cyB1cCB0byB0aGUgbmV4dCBoaWdoZXIgYmxvY2sgZWxlbWVudC4KLSAqCi0g
KiA0LiBJZiB0aGlzIGRvZXNuJ3QgaGVscCwgY2xvc2UgZWxlbWVudHMgdW50aWwgd2UgYXJlIGFs
bG93ZWQgdG8gYWRkIHRoZQotICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4KLSAqCi0g
Ki8KLQotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rv
cihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRFcnJvcnMpCi0gICAgOiBtX2RvY3VtZW50
KGRvYykKLSAgICAsIG1fY3VycmVudChkb2MpCi0gICAgLCBtX2RpZFJlZkN1cnJlbnQoZmFsc2Up
Ci0gICAgLCBtX2Jsb2NrU3RhY2soMCkKLSAgICAsIG1fYmxvY2tzSW5TdGFjaygwKQotICAgICwg
bV90cmVlRGVwdGgoMCkKLSAgICAsIG1faGFzUEVsZW1lbnRJblNjb3BlKE5vdEluU2NvcGUpCi0g
ICAgLCBtX2luQm9keShmYWxzZSkKLSAgICAsIG1faGF2ZUNvbnRlbnQoZmFsc2UpCi0gICAgLCBt
X2hhdmVGcmFtZVNldChmYWxzZSkKLSAgICAsIG1faXNQYXJzaW5nRnJhZ21lbnQoZmFsc2UpCi0g
ICAgLCBtX3JlcG9ydEVycm9ycyhyZXBvcnRFcnJvcnMpCi0gICAgLCBtX2hhbmRsaW5nUmVzaWR1
YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKLSAgICAsIG1faW5TdHJheVRhYmxlQ29udGVudCgw
KQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkK
LSAgICAsIG1fcGFyc2VyUXVpcmtzKG1fZG9jdW1lbnQtPnBhZ2UoKSA/IG1fZG9jdW1lbnQtPnBh
Z2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5jcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkgOiAwKQot
ewotfQotCi1MZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yKERvY3VtZW50RnJhZ21lbnQqIGZyYWcsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBz
Y3JpcHRpbmdQZXJtaXNzaW9uKQotICAgIDogbV9kb2N1bWVudChmcmFnLT5kb2N1bWVudCgpKQot
ICAgICwgbV9jdXJyZW50KGZyYWcpCi0gICAgLCBtX2RpZFJlZkN1cnJlbnQodHJ1ZSkKLSAgICAs
IG1fYmxvY2tTdGFjaygwKQotICAgICwgbV9ibG9ja3NJblN0YWNrKDApCi0gICAgLCBtX3RyZWVE
ZXB0aCgwKQotICAgICwgbV9oYXNQRWxlbWVudEluU2NvcGUoTm90SW5TY29wZSkKLSAgICAsIG1f
aW5Cb2R5KHRydWUpCi0gICAgLCBtX2hhdmVDb250ZW50KGZhbHNlKQotICAgICwgbV9oYXZlRnJh
bWVTZXQoZmFsc2UpCi0gICAgLCBtX2lzUGFyc2luZ0ZyYWdtZW50KHRydWUpCi0gICAgLCBtX3Jl
cG9ydEVycm9ycyhmYWxzZSkKLSAgICAsIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxv
Y2tzKGZhbHNlKQotICAgICwgbV9pblN0cmF5VGFibGVDb250ZW50KDApCi0gICAgLCBtX3Njcmlw
dGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICAsIG1fcGFyc2VyUXVpcmtz
KG1fZG9jdW1lbnQtPnBhZ2UoKSA/IG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVu
dCgpLT5jcmVhdGVIVE1MUGFyc2VyUXVpcmtzKCkgOiAwKQotewotICAgIGlmIChmcmFnKQotICAg
ICAgICBmcmFnLT5yZWYoKTsKLX0KLQotTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6fkxlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3IoKQotewotICAgIGZyZWVCbG9jaygpOwotICAgIGlmIChtX2Rp
ZFJlZkN1cnJlbnQpCi0gICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKLX0KLQotdm9pZCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZXNldCgpCi17Ci0gICAgQVNTRVJUKCFtX2lzUGFyc2lu
Z0ZyYWdtZW50KTsKLQotICAgIHNldEN1cnJlbnQobV9kb2N1bWVudCk7Ci0KLSAgICBmcmVlQmxv
Y2soKTsKLQotICAgIG1fdHJlZURlcHRoID0gMDsKLSAgICBtX2luQm9keSA9IGZhbHNlOwotICAg
IG1faGF2ZUZyYW1lU2V0ID0gZmFsc2U7Ci0gICAgbV9oYXZlQ29udGVudCA9IGZhbHNlOwotICAg
IG1faW5TdHJheVRhYmxlQ29udGVudCA9IDA7Ci0KLSAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9
IDA7Ci0gICAgbV9jdXJyZW50TWFwRWxlbWVudCA9IDA7Ci0gICAgbV9oZWFkID0gMDsKLSAgICBt
X2lzaW5kZXhFbGVtZW50ID0gMDsKLQotICAgIG1fc2tpcE1vZGVUYWcgPSBudWxsQXRvbTsKLSAg
ICAKLSAgICBpZiAobV9wYXJzZXJRdWlya3MpCi0gICAgICAgIG1fcGFyc2VyUXVpcmtzLT5yZXNl
dCgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnNldEN1cnJlbnQoTm9k
ZSogbmV3Q3VycmVudCkgCi17Ci0gICAgYm9vbCBkaWRSZWZOZXdDdXJyZW50ID0gbmV3Q3VycmVu
dCAmJiBuZXdDdXJyZW50ICE9IG1fZG9jdW1lbnQ7Ci0gICAgaWYgKGRpZFJlZk5ld0N1cnJlbnQp
IAotICAgICAgICBuZXdDdXJyZW50LT5yZWYoKTsgCi0gICAgaWYgKG1fZGlkUmVmQ3VycmVudCkg
Ci0gICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKLSAgICBtX2N1cnJlbnQgPSBuZXdDdXJyZW50
OwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGRpZFJlZk5ld0N1cnJlbnQ7Ci19Ci0KLWlubGluZSBz
dGF0aWMgaW50IHRhZ1ByaW9yaXR5T2ZOb2RlKE5vZGUqIG4pCi17Ci0gICAgcmV0dXJuIG4tPmlz
SFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPnRhZ1ByaW9yaXR5
KCkgOiAwOwotfQotCi1pbmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpsaW1p
dERlcHRoKGludCB0YWdQcmlvcml0eSkKLXsKLSAgICB3aGlsZSAobV90cmVlRGVwdGggPj0gbWF4
RE9NVHJlZURlcHRoKQotICAgICAgICBwb3BCbG9jayhtX2Jsb2NrU3RhY2stPnRhZ05hbWUpOwot
ICAgIGlmICh0YWdQcmlvcml0eSA+PSBtaW5CbG9ja0xldmVsVGFnUHJpb3JpdHkpIHsKLSAgICAg
ICAgd2hpbGUgKG1fYmxvY2tzSW5TdGFjayA+PSBjTWF4QmxvY2tEZXB0aCkKLSAgICAgICAgICAg
IHBvcEJsb2NrKG1fYmxvY2tTdGFjay0+dGFnTmFtZSk7Ci0gICAgfQotfQotCi1pbmxpbmUgYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppbnNlcnROb2RlQWZ0ZXJMaW1pdERlcHRoKE5v
ZGUqIG4sIGJvb2wgZmxhdCkKLXsKLSAgICBsaW1pdERlcHRoKHRhZ1ByaW9yaXR5T2ZOb2RlKG4p
KTsKLSAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKLX0KLQotUGFzc1JlZlB0cjxOb2Rl
PiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwYXJzZVRva2VuKFRva2VuKiB0KQotewotICAg
IGlmICghbV9za2lwTW9kZVRhZy5pc051bGwoKSkgewotICAgICAgICBpZiAoIXQtPmJlZ2luVGFn
ICYmIHQtPnRhZ05hbWUgPT0gbV9za2lwTW9kZVRhZykKLSAgICAgICAgICAgIC8vIEZvdW5kIHRo
ZSBlbmQgdGFnIGZvciB0aGUgY3VycmVudCBza2lwIG1vZGUsIHNvIHdlJ3JlIGRvbmUgc2tpcHBp
bmcuCi0gICAgICAgICAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207Ci0gICAgICAgIGVsc2Ug
aWYgKG1fY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gdC0+dGFnTmFtZSkKLSAgICAgICAgICAgIC8v
IERvIG5vdCBza2lwIDwvaWZyYW1lPi4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMg
dGhhdCBjb21tZW50IG1lYW4/IEhvdyBjYW4gaXQgYmUgcmlnaHQgdG8gcGFyc2UgYSB0b2tlbiB3
aXRob3V0IGNsZWFyaW5nIG1fc2tpcE1vZGVUYWc/Ci0gICAgICAgICAgICA7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEFwcGFyZW50bHkgc29t
ZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBvZiA8YnI+LiBCZSBjb21wYXRpYmxlIHdpdGggSUUg
YW5kIEZpcmVmb3ggYW5kIHRyZWF0IHRoaXMgbGlrZSA8YnI+LgotICAgIGlmICh0LT5pc0Nsb3Nl
VGFnKGJyVGFnKSAmJiBtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkgewotICAgICAgICByZXBv
cnRFcnJvcihNYWxmb3JtZWRCUkVycm9yKTsKLSAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwot
ICAgIH0KLQotICAgIGlmICghdC0+YmVnaW5UYWcpIHsKLSAgICAgICAgcHJvY2Vzc0Nsb3NlVGFn
KHQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgc3BhY2VzLCBp
ZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlLgotICAg
IC8vIERvIG5vdCBhbHRlciB0aGUgdGV4dCBpZiBpdCBpcyBwYXJ0IG9mIGEgc2NyaXB0VGFnLgot
ICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQgJiYgbV9jdXJyZW50LT5s
b2NhbE5hbWUoKSAhPSBzY3JpcHRUYWcpIHsKLSAgICAgICAgaWYgKG1faW5Cb2R5ICYmICFza2lw
TW9kZSgpICYmIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc3R5bGVUYWcgJiYKLSAgICAgICAg
ICAgIG1fY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdGl0bGVUYWcgJiYgIXQtPnRleHQtPmNvbnRh
aW5zT25seVdoaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIG1faGF2ZUNvbnRlbnQgPSB0cnVlOwot
ICAgICAgICAKLSAgICAgICAgUmVmUHRyPE5vZGU+IG47Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0g
dC0+dGV4dC5nZXQoKTsKLSAgICAgICAgdW5zaWduZWQgY2hhcnNMZWZ0ID0gdGV4dC5sZW5ndGgo
KTsKLSAgICAgICAgd2hpbGUgKGNoYXJzTGVmdCkgewotICAgICAgICAgICAgLy8gc3BsaXQgbGFy
Z2UgYmxvY2tzIG9mIHRleHQgdG8gbm9kZXMgb2YgbWFuYWdlYWJsZSBzaXplCi0gICAgICAgICAg
ICBuID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KG1fZG9jdW1lbnQsIHRleHQsIGNoYXJz
TGVmdCk7Ci0gICAgICAgICAgICBpZiAoIWluc2VydE5vZGVBZnRlckxpbWl0RGVwdGgobi5nZXQo
KSwgdC0+c2VsZkNsb3NpbmdUYWcpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBuOwotICAgIH0KLQotICAgIFJlZlB0cjxOb2RlPiBuID0gZ2V0
Tm9kZSh0KTsKLSAgICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50bHkg
dW5pbXBsZW1lbnRlZCBzdHVmZgotICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICAvLyBzZXQgYXR0cmlidXRlcwotICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAg
ICAgSFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4uZ2V0KCkpOwot
ICAgICAgICBpZiAobV9zY3JpcHRpbmdQZXJtaXNzaW9uID09IEZyYWdtZW50U2NyaXB0aW5nQWxs
b3dlZCB8fCB0LT50YWdOYW1lICE9IHNjcmlwdFRhZykKLSAgICAgICAgICAgIGUtPnNldEF0dHJp
YnV0ZU1hcCh0LT5hdHRycy5nZXQoKSwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKLQotICAgICAg
ICAvLyB0YWtlIGNhcmUgb2Ygb3B0aW9uYWwgY2xvc2UgdGFncwotICAgICAgICBpZiAoZS0+ZW5k
VGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNPcHRpb25hbCkKLSAgICAgICAgICAgIHBvcEJs
b2NrKHQtPnRhZ05hbWUpOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBub2RlIGRv
ZXMgbm90IGhhdmUgYSBmb3JiaWRkZW4gZW5kIHRhZyByZXF1aXJlbWVudCwgYW5kIGlmIHRoZSBi
cm9rZW4gWE1MIHNlbGYtY2xvc2luZwotICAgICAgICAvLyBzeW50YXggd2FzIHVzZWQsIHJlcG9y
dCBhbiBlcnJvci4KLSAgICAgICAgaWYgKHQtPmJyb2tlblhNTFN0eWxlICYmIGUtPmVuZFRhZ1Jl
cXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7Ci0gICAgICAgICAgICBpZiAodC0+
dGFnTmFtZSA9PSBzY3JpcHRUYWcpCi0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoSW5jb3Jy
ZWN0WE1MQ2xvc2VTY3JpcHRXYXJuaW5nKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihJbmNvcnJlY3RYTUxTZWxmQ2xvc2VFcnJvciwgJnQtPnRhZ05hbWUp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpbnNlcnROb2RlQWZ0ZXJMaW1pdERlcHRo
KG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkgewotICAgICAgICAvLyB3ZSBjb3VsZG4ndCBp
bnNlcnQgdGhlIG5vZGUKLQotICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAg
ICAgICAgICBFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4uZ2V0KCkpOwotICAg
ICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1fY3VycmVudE1hcEVsZW1lbnQgPT0gbikKLSAgICAgICAgICAgIG1fY3VycmVudE1hcEVsZW1l
bnQgPSAwOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRGb3JtRWxlbWVudCA9PSBuKQotICAgICAg
ICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSAwOwotCi0gICAgICAgIGlmIChtX2hlYWQgPT0g
bikKLSAgICAgICAgICAgIG1faGVhZCA9IDA7Ci0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHJldHVybiBuOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnBhcnNl
RG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKLXsKLSAgICAvLyBJZ25vcmUgYW55IGRvY3R5
cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3JlIGRvY3R5cGVzIGluIGZyYWdtZW50cy4KLSAgICBp
ZiAobV9kb2N1bWVudC0+ZG9jdHlwZSgpIHx8IG1faXNQYXJzaW5nRnJhZ21lbnQgfHwgbV9jdXJy
ZW50ICE9IG1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1ha2UgYSBuZXcg
ZG9jdHlwZSBub2RlIGFuZCBzZXQgaXQgYXMgb3VyIGRvY3R5cGUuCi0gICAgbV9kb2N1bWVudC0+
YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1bWVudCwgU3RyaW5nOjphZG9wdCh0
LT5tX25hbWUpLCBTdHJpbmc6OmFkb3B0KHQtPm1fcHVibGljSUQpLCBTdHJpbmc6OmFkb3B0KHQt
Pm1fc3lzdGVtSUQpKSk7Ci0gICAgaWYgKHQtPm1fZm9yY2VRdWlya3MpCi0gICAgICAgIG1fZG9j
dW1lbnQtPnNldFBhcnNlTW9kZShEb2N1bWVudDo6Q29tcGF0KTsKLX0KLQotc3RhdGljIGJvb2wg
aXNUYWJsZVNlY3Rpb24oY29uc3QgTm9kZSogbikKLXsKLSAgICByZXR1cm4gbi0+aGFzVGFnTmFt
ZSh0Ym9keVRhZykgfHwgbi0+aGFzVGFnTmFtZSh0Zm9vdFRhZykgfHwgbi0+aGFzVGFnTmFtZSh0
aGVhZFRhZyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzVGFibGVQYXJ0KGNvbnN0IE5vZGUqIG4pCi17
Ci0gICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodHJUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGRUYWcp
IHx8IG4tPmhhc1RhZ05hbWUodGhUYWcpCi0gICAgICAgIHx8IGlzVGFibGVTZWN0aW9uKG4pOwot
fQotCi1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZChjb25zdCBOb2RlKiBuKQotewotICAgIHJl
dHVybiBuLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fCBpc1RhYmxlUGFydChuKTsKLX0KLQotc3Rh
dGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKLXsKLSAg
ICByZXR1cm4gdGFnTmFtZSA9PSBhcHBsZXRUYWcgfHwgdGFnTmFtZSA9PSBjYXB0aW9uVGFnIHx8
IHRhZ05hbWUgPT0gdGRUYWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSB0aFRhZyB8fCB0YWdOYW1l
ID09IGJ1dHRvblRhZyB8fCB0YWdOYW1lID09IG1hcnF1ZWVUYWcKLSAgICAgICAgfHwgdGFnTmFt
ZSA9PSBvYmplY3RUYWcgfHwgdGFnTmFtZSA9PSB0YWJsZVRhZyB8fCB0YWdOYW1lID09IGh0bWxU
YWc7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6aW5zZXJ0Tm9kZShOb2Rl
KiBuLCBib29sIGZsYXQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3ROb2RlKG4pOwotCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBuLT5sb2NhbE5hbWUoKTsKLSAgICAK
LSAgICAvLyA8dGFibGU+IGlzIG5ldmVyIGFsbG93ZWQgaW5zaWRlIHN0cmF5IHRhYmxlIGNvbnRl
bnQuICBBbHdheXMgcG9wIG91dCBvZiB0aGUgc3RyYXkgdGFibGUgY29udGVudAotICAgIC8vIGFu
ZCBjbG9zZSB1cCB0aGUgZmlyc3QgdGFibGUsIGFuZCB0aGVuIHN0YXJ0IHRoZSBzZWNvbmQgdGFi
bGUgYXMgYSBzaWJsaW5nLgotICAgIGlmIChtX2luU3RyYXlUYWJsZUNvbnRlbnQgJiYgbG9jYWxO
YW1lID09IHRhYmxlVGFnKQotICAgICAgICBwb3BCbG9jayh0YWJsZVRhZyk7Ci0KLSAgICBpZiAo
bV9wYXJzZXJRdWlya3MgJiYgIW1fcGFyc2VyUXVpcmtzLT5zaG91bGRJbnNlcnROb2RlKG1fY3Vy
cmVudCwgbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB0YWdQcmlvcml0eSA9
IHRhZ1ByaW9yaXR5T2ZOb2RlKG4pOwotCi0gICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0
IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1l
bnQgaXMgd2VsbC1mb3JtZWQKLSAgICBOb2RlKiBuZXdOb2RlID0gbV9jdXJyZW50LT5hZGRDaGls
ZChuKTsKLSAgICBpZiAoIW5ld05vZGUpCi0gICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihuLCBm
bGF0LCBsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsgLy8gVHJ5IHRvIGhhbmRsZSB0aGUgZXJyb3Iu
Ci0KLSAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxp
bWc+KSBvbiB0aGUgc3RhY2sKLSAgICBib29sIHBhcmVudEF0dGFjaGVkID0gbV9jdXJyZW50LT5h
dHRhY2hlZCgpOwotICAgIGlmICh0YWdQcmlvcml0eSA+IDAgJiYgIWZsYXQpIHsKLSAgICAgICAg
aWYgKG5ld05vZGUgPT0gbV9jdXJyZW50KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNhc2Ugc2hv
dWxkIG9ubHkgYmUgaGl0IHdoZW4gYSBkZW1vdGVkIDxmb3JtPiBpcyBwbGFjZWQgaW5zaWRlIGEg
dGFibGUuCi0gICAgICAgICAgICBBU1NFUlQobG9jYWxOYW1lID09IGZvcm1UYWcpOwotICAgICAg
ICAgICAgcmVwb3J0RXJyb3IoRm9ybUluc2lkZVRhYmxlUGFydEVycm9yLCAmbV9jdXJyZW50LT5s
b2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIGZvcm0tPnNldERlbW90ZWQo
dHJ1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgcHVzaEJsb2NrIGZ1
bmN0aW9uIHRyYW5zZmVycyBvd25lcnNoaXAgb2YgY3VycmVudCB0byB0aGUgYmxvY2sgc3RhY2sK
LSAgICAgICAgICAgIC8vIHNvIHdlJ3JlIGd1YXJhbnRlZWQgdGhhdCBtX2RpZFJlZkN1cnJlbnQg
aXMgZmFsc2UuIFRoZSBjb2RlIGJlbG93IGlzIGFuCi0gICAgICAgICAgICAvLyBvcHRpbWl6ZWQg
dmVyc2lvbiBvZiBzZXRDdXJyZW50IHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoYXQgZmFjdCBh
bmQgYWxzbwotICAgICAgICAgICAgLy8gYXNzdW1lcyB0aGF0IG5ld05vZGUgaXMgbmVpdGhlciAw
IG5vciBhIHBvaW50ZXIgdG8gdGhlIGRvY3VtZW50LgotICAgICAgICAgICAgcHVzaEJsb2NrKGxv
Y2FsTmFtZSwgdGFnUHJpb3JpdHkpOwotICAgICAgICAgICAgbmV3Tm9kZS0+YmVnaW5QYXJzaW5n
Q2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9kaWRSZWZDdXJyZW50KTsKLSAgICAg
ICAgICAgIG5ld05vZGUtPnJlZigpOyAKLSAgICAgICAgICAgIG1fY3VycmVudCA9IG5ld05vZGU7
Ci0gICAgICAgICAgICBtX2RpZFJlZkN1cnJlbnQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNpbmdGcmFn
bWVudCkKLSAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChwYXJlbnRBdHRhY2hlZCAmJiAhbi0+YXR0YWNoZWQoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVu
dCkKLSAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICBuLT5maW5pc2hQYXJzaW5nQ2hp
bGRyZW4oKTsKLSAgICB9Ci0KLSAgICBpZiAobG9jYWxOYW1lID09IGh0bWxUYWcgJiYgbV9kb2N1
bWVudC0+ZnJhbWUoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgbV9kb2N1bWVu
dC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
OjpoYW5kbGVFcnJvcihOb2RlKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpCi17Ci0gICAgLy8gRXJyb3IgaGFuZGxpbmcgY29kZS4g
IFRoaXMgaXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50L2NoaWxkIGNv
bWJpbmF0aW9ucy4KLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotICAgIC8vIDEuIENoZWNr
IG91dCB0aGUgZWxlbWVudCdzIHRhZyBuYW1lIHRvIGRlY2lkZSBob3cgdG8gZGVhbCB3aXRoIGVy
cm9ycy4KLSAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50
KiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKLSAgICAgICAgaWYgKGgtPmhhc0xv
Y2FsTmFtZSh0clRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRoVGFnKSB8fCBoLT5oYXNMb2NhbE5h
bWUodGRUYWcpKSB7Ci0gICAgICAgICAgICBpZiAobV9pblN0cmF5VGFibGVDb250ZW50ICYmICFp
c1RhYmxlUmVsYXRlZChtX2N1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3Io
TWlzcGxhY2VkVGFibGVQYXJ0RXJyb3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFt
ZSgpKTsKLSAgICAgICAgICAgICAgICAvLyBwb3Agb3V0IHRvIHRoZSBuZWFyZXN0IGVuY2xvc2lu
ZyB0YWJsZS1yZWxhdGVkIHRhZy4KLSAgICAgICAgICAgICAgICB3aGlsZSAobV9ibG9ja1N0YWNr
ICYmICFpc1RhYmxlUmVsYXRlZChtX2N1cnJlbnQpKQotICAgICAgICAgICAgICAgICAgICBwb3BP
bmVCbG9jaygpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShoZWFkVGFnKSkgewot
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIW1fY3VycmVu
dC0+aGFzVGFnTmFtZShodG1sVGFnKSkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1p
c3BsYWNlZEhlYWRFcnJvcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShtZXRhVGFnKSB8fCBo
LT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGJhc2VUYWcpKSB7Ci0g
ICAgICAgICAgICBib29sIGNyZWF0ZWRIZWFkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW1f
aGVhZCkgewotICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAgICAgICBj
cmVhdGVkSGVhZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9oZWFk
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjcmVhdGVkSGVhZCkKLSAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkSGVhZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJm1f
Y3VycmVudC0+bG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChtX2hlYWQtPmFkZENo
aWxkKG4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiAhbV9p
c1BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShodG1sVGFnKSkgewotICAgICAgICAgICAgaWYg
KCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpICYmIG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2Nh
bE5hbWUpOwotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVs
ZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBh
dHRyaWJ1dGVzCi0gICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICBFbGVtZW50KiBleGlzdGluZ0hUTUwgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9kb2N1bWVu
dC0+ZG9jdW1lbnRFbGVtZW50KCkpOwotICAgICAgICAgICAgICAgICAgICBOYW1lZE5vZGVNYXAq
IGJtYXAgPSBleGlzdGluZ0hUTUwtPmF0dHJpYnV0ZXMoZmFsc2UpOwotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9IG1hcC0+YXR0cmlidXRl
SXRlbShsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYm1hcC0+Z2V0QXR0cmlidXRl
SXRlbShpdC0+bmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0hU
TUwtPnNldEF0dHJpYnV0ZShpdC0+bmFtZSgpLCBpdC0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZSh0aXRs
ZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUoc2Ny
aXB0VGFnKSkgewotICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKCFtX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAg
ICAgICAgICAgICAgY3JlYXRlZEhlYWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKG1faGVhZCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5ld05vZGUgPSBtX2hlYWQt
PmFkZENoaWxkKG4pOwotICAgICAgICAgICAgICAgIGlmICghbmV3Tm9kZSkgewotICAgICAgICAg
ICAgICAgICAgICBzZXRTa2lwTW9kZShoLT50YWdRTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoIWNyZWF0ZWRIZWFkKQotICAgICAgICAgICAgICAgICAgICByZXBv
cnRFcnJvcihNaXNwbGFjZWRIZWFkQ29udGVudEVycm9yLCAmbG9jYWxOYW1lLCAmbV9jdXJyZW50
LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHVzaEJs
b2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIG5ld05vZGUtPmJl
Z2luUGFyc2luZ0NoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgc2V0Q3VycmVudChuZXdOb2Rl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJh
Z21lbnQpCi0gICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1faW5Cb2R5KSB7
Ci0gICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoaC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgt
Pmhhc0xvY2FsTmFtZShib2R5VGFnKSkgewotICAgICAgICAgICAgaWYgKG1faW5Cb2R5ICYmIG1f
ZG9jdW1lbnQtPmJvZHkoKSAmJiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgewotICAgICAgICAgICAg
ICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8Qk9EWT4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRl
cyB0byBleGlzdGluZyBvbmUKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qg
b3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgIC8v
IHNvbWUgc2l0ZXMgdXNlIDxib2R5IGJnY29sb3I9cmlnaHRjb2xvcj4uLi48Ym9keSBiZ2NvbG9y
PXdyb25nY29sb3I+Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoUmVkdW5kYW50SFRNTEJv
ZHlFcnJvciwgJmxvY2FsTmFtZSk7Ci0gICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBtYXAg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7Ci0gICAgICAgICAg
ICAgICAgRWxlbWVudCogZXhpc3RpbmdCb2R5ID0gbV9kb2N1bWVudC0+Ym9keSgpOwotICAgICAg
ICAgICAgICAgIE5hbWVkTm9kZU1hcCogYm1hcCA9IGV4aXN0aW5nQm9keS0+YXR0cmlidXRlcyhm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFwICYmIGwgPCBt
YXAtPmxlbmd0aCgpOyArK2wpIHsKLSAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFibWFwLT5n
ZXRBdHRyaWJ1dGVJdGVtKGl0LT5uYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhp
c3RpbmdCb2R5LT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwgaXQtPnZhbHVlKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKCFtX2N1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShhcmVhVGFn
KSkgewotICAgICAgICAgICAgaWYgKG1fY3VycmVudE1hcEVsZW1lbnQpIHsKLSAgICAgICAgICAg
ICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRBcmVhRXJyb3IsICZtX2N1cnJlbnQtPmxvY2FsTmFt
ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50LT5hZGRDaGlsZChuKTsK
LSAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21l
bnQpCi0gICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotICAgICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xv
Y2FsTmFtZShjb2xncm91cFRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGNhcHRpb25UYWcpKSB7Ci0g
ICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgewotICAgICAgICAgICAg
ICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sgJiYgaXNUYWJsZVBhcnQobV9jdXJyZW50KSkKLSAgICAg
ICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5z
ZXJ0Tm9kZShuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobi0+
aXNDb21tZW50Tm9kZSgpICYmICFtX2hlYWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIDIuIE5leHQgd2UgZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50IHRvIGRv
IHNvbWUgZnVydGhlciBlcnJvciBoYW5kbGluZy4KLSAgICBpZiAobV9jdXJyZW50LT5pc0hUTUxF
bGVtZW50KCkpIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KG1fY3VycmVudCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3VycmVudFRh
Z05hbWUgPSBoLT5sb2NhbE5hbWUoKTsKLSAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShodG1s
VGFnKSkgewotICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsdCA9IG4tPmlzSFRNTEVsZW1lbnQo
KSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obikgOiAwOwotICAgICAgICAgICAgaWYgKGVs
dCAmJiAoZWx0LT5oYXNMb2NhbE5hbWUoc2NyaXB0VGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShz
dHlsZVRhZykgfHwKLSAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShtZXRhVGFnKSB8
fCBlbHQtPmhhc0xvY2FsTmFtZShsaW5rVGFnKSB8fAotICAgICAgICAgICAgICAgIGVsdC0+aGFz
TG9jYWxOYW1lKG9iamVjdFRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoZW1iZWRUYWcpIHx8Ci0g
ICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGVsdC0+aGFzTG9j
YWxOYW1lKGlzaW5kZXhUYWcpIHx8Ci0gICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUo
YmFzZVRhZykpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9oZWFkID0gSFRNTEhlYWRFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUobV9oZWFkLmdldCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFRleHQqIHQgPSBzdGF0aWNfY2FzdDxUZXh0Kj4obik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghbV9oYXZlRnJhbWVTZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJl
IHRoYXQgaGVhZCBleGlzdHMuCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBub3QgZm9yIG9s
ZGVyIHZlcnNpb25zIG9mIE1haWwsIHdoZXJlIHRoZSBpbXBsaWNpdCA8aGVhZD4gaXNuJ3QgZXhw
ZWN0ZWQgLSA8cmRhcjovL3Byb2JsZW0vNjg2Mzc5NT4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChtX2RvY3Vt
ZW50KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBwb3BCbG9jayhoZWFkVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRC
b2R5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEJvZHlFbGVtZW50Ojpj
cmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0
RXJyb3IoTWlzcGxhY2VkRnJhbWVzZXRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShoZWFkVGFnKSkgewot
ICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoaHRtbFRhZykpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICghbV9o
YXZlRnJhbWVTZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRUYWdOYW1l
ID09IGhlYWRUYWcpOwotICAgICAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFt
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICAgICAgICAgICAg
ICBpbnNlcnROb2RlKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1lc2V0Q29u
dGVudEVycm9yLCAmbG9jYWxOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoYWRkcmVzc1RhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGZvbnRUYWcp
Ci0gICAgICAgICAgICAgICAgICAgfHwgaC0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCBoLT5o
YXNMb2NhbE5hbWUodGl0bGVUYWcpKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFj
ZWRDb250ZW50UmV0cnlFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKLSAgICAg
ICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShjYXB0aW9uVGFnKSkgewot
ICAgICAgICAgICAgLy8gSWxsZWdhbCBjb250ZW50IGluIGEgY2FwdGlvbi4gQ2xvc2UgdGhlIGNh
cHRpb24gYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENh
cHRpb25Db250ZW50RXJyb3IsICZsb2NhbE5hbWUpOwotICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOwotICAgICAgICAgICAgaWYgKGlzVGFibGVQYXJ0KG4pKQotICAgICAgICAg
ICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4sIGZsYXQpOwotICAgICAgICB9IGVsc2UgaWYgKGgt
Pmhhc0xvY2FsTmFtZSh0YWJsZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRyVGFnKSB8fCBpc1Rh
YmxlU2VjdGlvbihoKSkgewotICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUodGFibGVUYWcp
KSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkVGFibGVFcnJvciwgJmN1
cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobV9pc1BhcnNpbmdGcmFnbWVudCAm
JiAhaC0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgLy8gZnJh
Z21lbnQgbWF5IGNvbnRhaW4gdGFibGUgcGFydHMgd2l0aG91dCA8dGFibGU+IGFuY2VzdG9yLCBw
b3AgdGhlbSBvbmUgYnkgb25lCi0gICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGgtPmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBlbmQgdGhl
IHRhYmxlCi0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4uYW5kIHN0
YXJ0IGEgbmV3IG9uZQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
OwotICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgICAgICAgICAvLyBBIHNjcmlwdCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBjdXJyZW50IG5v
ZGUncyBwYXJlbnQgZnJvbSB0aGUgRE9NCi0gICAgICAgICAgICAgICAgLy8gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEzNwotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiB3ZSBzaG91bGQgZG8gcmVhbCByZWNvdmVyeSBoZXJlIGFuZCByZS1wYXJlbnQgd2l0aCB0aGUg
Y29ycmVjdCBub2RlLgotICAgICAgICAgICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgTm9kZSogZ3JhbmRwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHRO
b2RlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZSh0clRhZykgJiYK
LSAgICAgICAgICAgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKHBhcmVudCkgJiYgZ3JhbmRwYXJl
bnQgJiYgZ3JhbmRwYXJlbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKSB8fAotICAgICAgICAgICAg
ICAgICAgICAgKCghbi0+aGFzVGFnTmFtZSh0ZFRhZykgJiYgIW4tPmhhc1RhZ05hbWUodGhUYWcp
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICFuLT5oYXNUYWdOYW1lKGZvcm1UYWcpICYmICFu
LT5oYXNUYWdOYW1lKHNjcmlwdFRhZykpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUpICYmCi0gICAg
ICAgICAgICAgICAgICAgICBwYXJlbnQtPmhhc1RhZ05hbWUodGFibGVUYWcpKSkgewotICAgICAg
ICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKSA/IG5vZGUg
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aGFzVGFnTmFtZSh0clRhZykp
ID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNh
biBoYXBwZW4gd2l0aCBmcmFnbWVudHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghcGFyZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShuLCBub2RlLCBlYyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghZWMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9y
dEVycm9yKFN0cmF5VGFibGVDb250ZW50RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50VGFnTmFt
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHRh
Z1ByaW9yaXR5ID4gMCAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0
YXR1c0ZvcmJpZGRlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5TdHJheVRhYmxlQ29udGVudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIWVjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnQtPmhhc1RhZ05hbWUo
dHJUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihUYWJsZVBhcnRS
ZXF1aXJlZEVycm9yLCAmbG9jYWxOYW1lLCAmdGRUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MVGFibGVDZWxsRWxlbWVudDo6Y3JlYXRlKHRk
VGFnLCBtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9jdXJyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgcmVwb3J0IGFuIGVycm9yIGluIHRoaXMgY2FzZSwgc2luY2UgbWFraW5nIGEg
PHRib2R5PiBoYXBwZW5zIGFsbCB0aGUgdGltZSB3aGVuIHlvdSBoYXZlIDx0YWJsZT48dHI+LAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGl0IGlzbid0IHJlYWxseSBhIHBhcnNlIGVy
cm9yIHBlciBzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQ6OmNyZWF0ZSh0Ym9keVRhZywgbV9kb2N1bWVudCkuZ2V0KCkpOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0
RXJyb3IoVGFibGVQYXJ0UmVxdWlyZWRFcnJvciwgJmxvY2FsTmFtZSwgJnRyVGFnLmxvY2FsTmFt
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTFRhYmxlUm93RWxl
bWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKG9iamVjdFRh
ZykpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRyeUVycm9y
LCAmbG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgcG9wQmxvY2sob2Jq
ZWN0VGFnKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShwVGFnKSB8fCBpc0hlYWRpbmdUYWcoY3VycmVudFRhZ05hbWUpKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzSW5saW5lKG4pKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShvcHRpb25UYWcp
IHx8IGgtPmhhc0xvY2FsTmFtZShvcHRncm91cFRhZykpIHsKLSAgICAgICAgICAgIGlmIChsb2Nh
bE5hbWUgPT0gb3B0Z3JvdXBUYWcpIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50
VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBzZWxlY3RUYWcpIHsKLSAgICAgICAgICAgICAgICAvLyBJ
RSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4gTGV0J3MgZG8gdGhlIHNhbWUK
LSAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShzZWxlY3RUYWcpKSB7Ci0gICAgICAgICAg
ICBpZiAobG9jYWxOYW1lID09IGlucHV0VGFnIHx8IGxvY2FsTmFtZSA9PSB0ZXh0YXJlYVRhZykg
ewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRyeUVycm9y
LCAmbG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgICAgIHBvcEJsb2Nr
KGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcp
KSB7Ci0gICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmICghaC0+aGFzTG9jYWxOYW1lKGJvZHlU
YWcpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbmxpbmUobV9jdXJyZW50KSkgewotICAgICAgICAg
ICAgICAgIHBvcElubGluZUJsb2NrcygpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2N1cnJlbnQtPmlz
RG9jdW1lbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewotICAgICAg
ICAgICAgVGV4dCogdCA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKLSAgICAgICAgICAgIGlmICh0
LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KSkgewotICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2Rv
Y3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIDMuIElmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJyb3IsIGp1c3Qg
cmV0dXJuIGZhbHNlIGFuZCBhdHRlbXB0IHRvIGVycm9yLWNvcnJlY3QgYWdhaW4uCi0gICAgaWYg
KCFoYW5kbGVkKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKElnbm9yZWRDb250ZW50RXJyb3IsICZs
b2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKLX0KLQotdHlwZWRlZiBib29sIChM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjoqQ3JlYXRlRXJyb3JDaGVja0Z1bmMpKFRva2VuKiB0
LCBSZWZQdHI8Tm9kZT4mKTsKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ3Jl
YXRlRXJyb3JDaGVja0Z1bmM+IEZ1bmN0aW9uTWFwOwotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnRleHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQgPSBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5n
ZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3Ry
dWN0b3I6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJl
c3VsdCkKLXsKLSAgICByZXN1bHQgPSBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwgdC0+dGV4
dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OmhlYWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1
bHQpCi17Ci0gICAgaWYgKCFtX2hlYWQgfHwgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBodG1s
VGFnKSB7Ci0gICAgICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1l
bnQpOwotICAgICAgICByZXN1bHQgPSBtX2hlYWQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlcG9y
dEVycm9yKE1pc3BsYWNlZEhlYWRFcnJvcik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmJvZHlDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwg
UmVmUHRyPE5vZGU+JikKLXsKLSAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhh
dmUgYSBmcmFtZXNldAotICAgIGlmIChtX2hhdmVGcmFtZVNldCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIC8vIEVuc3VyZSB0aGF0IGhlYWQgZXhpc3RzICh1bmxlc3MgcGFyc2lu
ZyBhIGZyYWdtZW50KS4KLSAgICAvLyBCdXQgbm90IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBNYWls
LCB3aGVyZSB0aGUgaW1wbGljaXQgPGhlYWQ+IGlzbid0IGV4cGVjdGVkIC0gPHJkYXI6Ly9wcm9i
bGVtLzY4NjM3OTU+Ci0gICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmIHNob3VsZENyZWF0
ZUltcGxpY2l0SGVhZChtX2RvY3VtZW50KSkKLSAgICAgICAgY3JlYXRlSGVhZCgpOwotICAgIAot
ICAgIHBvcEJsb2NrKGhlYWRUYWcpOwotICAgIHN0YXJ0Qm9keSgpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0Q3JlYXRlRXJy
b3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxvY2soaGVhZFRhZyk7
Ci0gICAgaWYgKG1faW5Cb2R5ICYmICFtX2hhdmVGcmFtZVNldCAmJiAhbV9oYXZlQ29udGVudCkg
ewotICAgICAgICBwb3BCbG9jayhib2R5VGFnKTsKLSAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZv
ciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQK
LSAgICAgICAgLy8gd2UgY2FuJ3QgaW1wbGVtZW50IHRoYXQgYmVoYXZpb3VyIG5vdyBiZWNhdXNl
IGl0IGNvdWxkIGNhdXNlIHRvbyBtYW55Ci0gICAgICAgIC8vIHJlZ3Jlc3Npb25zIGFuZCB0aGUg
aGVhZGFjaGVzIGFyZSBub3Qgd29ydGggdGhlIHdvcmsgYXMgbG9uZyBhcyB0aGVyZSBpcwotICAg
ICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcgb24gdGhhdCBkZXRhaWwgKERpcmspCi0g
ICAgICAgIGlmIChtX2RvY3VtZW50LT5ib2R5KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCi0g
ICAgICAgICAgICBtX2RvY3VtZW50LT5ib2R5KCktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJk
aXNwbGF5Om5vbmUiKTsKLSAgICAgICAgbV9pbkJvZHkgPSBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KChtX2hhdmVDb250ZW50IHx8IG1faGF2ZUZyYW1lU2V0KSAmJiBtX2N1cnJlbnQtPmxvY2FsTmFt
ZSgpID09IGh0bWxUYWcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2hhdmVGcmFtZVNl
dCA9IHRydWU7Ci0gICAgc3RhcnRCb2R5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
TGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQs
IFJlZlB0cjxOb2RlPiYgcmVzdWx0KQotewotICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0g
aWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAvLyBUaGlzIGlzIGNvbnNpc3Rl
bnQgd2l0aCBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCi0gICAgaWYgKCFtX2N1cnJlbnRGb3Jt
RWxlbWVudCkgewotICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9IEhUTUxGb3JtRWxlbWVu
dDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotICAgICAgICByZXN1bHQgPSBtX2N1cnJlbnRGb3JtRWxl
bWVudDsKLSAgICAgICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkK
LXsKLSAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgaWYgKCFtX2lu
Qm9keSkKLSAgICAgICAgbV9pc2luZGV4RWxlbWVudCA9IG4ucmVsZWFzZSgpOwotICAgIGVsc2Ug
ewotICAgICAgICB0LT5zZWxmQ2xvc2luZ1RhZyA9IHRydWU7Ci0gICAgICAgIHJlc3VsdCA9IG4u
cmVsZWFzZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3Vs
dCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayh0LCByZXN1bHQpOwotICAgIHBvcEJs
b2NrKGR0VGFnKTsKLSAgICBwb3BCbG9jayhkZFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZHRDcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVj
ayh0LCByZXN1bHQpOwotICAgIHBvcEJsb2NrKGRkVGFnKTsKLSAgICBwb3BCbG9jayhkdFRhZyk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
cnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBwb3BCbG9j
ayhycFRhZyk7Ci0gICAgcG9wQmxvY2socnRUYWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxvY2socnBUYWcpOwotICAgIHBvcEJsb2NrKHJ0
VGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mKQotewot
ICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JD
aGVjayh0LCByZXN1bHQpOwotICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFN0eWxlQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICByZXR1cm4gYWxs
b3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSk7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpCi17Ci0gICAgcG9wQmxvY2sodGRUYWcpOwotICAgIHBvcEJsb2NrKHRoVGFnKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjp0YWJs
ZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBw
b3BCbG9jayh0aGVhZFRhZyk7Ci0gICAgcG9wQmxvY2sodGJvZHlUYWcpOwotICAgIHBvcEJsb2Nr
KHRmb290VGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
Ci17Ci0gICAgc2V0U2tpcE1vZGUobm9lbWJlZFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBzZXRTa2lwTW9kZShub2ZyYW1lc1RhZyk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBp
ZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1
bWVudC0+ZnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+Y2Fu
RXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgc2V0
U2tpcE1vZGUobm9zY3JpcHRUYWcpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tl
biosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgpKQotICAg
ICAgICBwb3BCbG9jayhwVGFnKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yOjpwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKG1fZG9jdW1lbnQtPmluQ29tcGF0TW9kZSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoaGFzUEVsZW1lbnRJblNjb3BlKCkpCi0gICAg
ICAgIHBvcEJsb2NrKHBUYWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhU
TUxUcmVlQ29uc3RydWN0b3I6Om1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mIHJlc3VsdCkKLXsKLSAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gSFRNTE1hcEVsZW1lbnQ6
OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICByZXN1bHQgPSBtX2N1cnJlbnRNYXBFbGVtZW50Owot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgbWFwVGFnVG9GdW5jKEZ1bmN0aW9u
TWFwJiBtYXAsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgQ3JlYXRlRXJyb3JDaGVja0Z1bmMg
ZnVuYykKLXsKLSAgICBtYXAuc2V0KHRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGZ1bmMpOwotfQot
Ci10ZW1wbGF0ZTwgc2l6ZV90IEFycmF5U2l6ZSA+Ci1zdGF0aWMgdm9pZCBtYXBUYWdzVG9GdW5j
KEZ1bmN0aW9uTWFwJiBtYXAsIFF1YWxpZmllZE5hbWUgKCZuYW1lcylbQXJyYXlTaXplXSwgQ3Jl
YXRlRXJyb3JDaGVja0Z1bmMgZnVuYykKLXsKLSAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IEFy
cmF5U2l6ZTsgeCsrKSB7Ci0gICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUgPSBuYW1l
c1t4XTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKG1hcCwgbmFtZSwgZnVuYyk7Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmdldE5vZGUoVG9r
ZW4qIHQpCi17Ci0gICAgLy8gSW5pdCBvdXIgZXJyb3IgaGFuZGxpbmcgdGFibGUuCi0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgZ0Z1bmN0aW9uTWFwLCAoKSk7Ci0gICAgaWYg
KGdGdW5jdGlvbk1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRD
cmVhdGVFcnJvclRhZ3NbXSA9IHsgYVRhZywgYnV0dG9uVGFnLCBub2JyVGFnLCB0clRhZyB9Owot
ICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgbmVzdGVkQ3JlYXRlRXJyb3JUYWdz
LCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7Ci0K
LSAgICAgICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yVGFnc1tdID0geyBi
VGFnLCBiaWdUYWcsIGlUYWcsIHNUYWcsIHNtYWxsVGFnLCBzdHJpa2VUYWcsIHR0VGFnLCB1VGFn
IH07Ci0gICAgICAgIG1hcFRhZ3NUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBuZXN0ZWRTdHlsZUNyZWF0
ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFN0eWxlQ3JlYXRl
RXJyb3JDaGVjayk7Ci0KLSAgICAgICAgUXVhbGlmaWVkTmFtZSBwQ2xvc2VyQ3JlYXRlRXJyb3JU
YWdzW10gPSB7IGFkZHJlc3NUYWcsIGFydGljbGVUYWcsCi0gICAgICAgICAgICBhc2lkZVRhZywg
YmxvY2txdW90ZVRhZywgY2VudGVyVGFnLCBkaXJUYWcsIGRpdlRhZywgZGxUYWcsCi0gICAgICAg
ICAgICBmaWVsZHNldFRhZywgZm9vdGVyVGFnLCBoMVRhZywgaDJUYWcsIGgzVGFnLCBoNFRhZywg
aDVUYWcsIGg2VGFnLAotICAgICAgICAgICAgaGVhZGVyVGFnLCBoZ3JvdXBUYWcsIGhyVGFnLCBs
aXN0aW5nVGFnLCBtZW51VGFnLCBuYXZUYWcsIG9sVGFnLAotICAgICAgICAgICAgcFRhZywgcGxh
aW50ZXh0VGFnLCBwcmVUYWcsIHNlY3Rpb25UYWcsIHVsVGFnIH07Ci0gICAgICAgIG1hcFRhZ3NU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCBwQ2xvc2VyQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hlY2spOwotCi0gICAgICAgIG1hcFRh
Z1RvRnVuYyhnRnVuY3Rpb25NYXAsIGJvZHlUYWcsICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9y
Ojpib2R5Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIGRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6ZGRDcmVhdGVFcnJvckNoZWNr
KTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZHRUYWcsICZMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yOjpkdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1
bmMoZ0Z1bmN0aW9uTWFwLCBmb3JtVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6Zm9y
bUNyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBm
cmFtZXNldFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmZyYW1lc2V0Q3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGhlYWRUYWcsICZM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGlzaW5kZXhUYWcsICZMZWdhY3lIVE1MVHJlZUNv
bnN0cnVjdG9yOjppc2luZGV4Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIG1hcFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om1hcENy
ZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBsaVRh
ZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5lc3RlZFBDbG9zZXJDcmVhdGVFcnJvckNo
ZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9lbWJlZFRhZywgJkxl
Z2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6Om5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9mcmFtZXNUYWcsICZMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdU
b0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub3NjcmlwdFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0
b3I6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIHRhYmxlVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cENsb3NlclN0
cmljdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBycFRhZywgJkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OnJwQ3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHJ0VGFnLCAmTGVnYWN5SFRNTFRy
ZWVDb25zdHJ1Y3Rvcjo6cnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5j
KGdGdW5jdGlvbk1hcCwgc2VsZWN0VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6c2Vs
ZWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAs
IHRkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JD
aGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRoVGFnLCAmTGVnYWN5
SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIHRib2R5VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25z
dHJ1Y3Rvcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1Rv
RnVuYyhnRnVuY3Rpb25NYXAsIHRmb290VGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6
dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIHRoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGFibGVTZWN0
aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0KLSAgICAgICAgZ0Z1bmN0aW9uTWFwLnNldChjb21tZW50
QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpjb21tZW50Q3JlYXRlRXJy
b3JDaGVjayk7Ci0gICAgICAgIGdGdW5jdGlvbk1hcC5zZXQodGV4dEF0b20uaW1wbCgpLCAmTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6dGV4dENyZWF0ZUVycm9yQ2hlY2spOwotICAgIH0KLQot
ICAgIGJvb2wgcHJvY2VlZCA9IHRydWU7Ci0gICAgUmVmUHRyPE5vZGU+IHJlc3VsdDsKLSAgICBp
ZiAoQ3JlYXRlRXJyb3JDaGVja0Z1bmMgZXJyb3JDaGVja0Z1bmMgPSBnRnVuY3Rpb25NYXAuZ2V0
KHQtPnRhZ05hbWUuaW1wbCgpKSkKLSAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qZXJyb3JDaGVj
a0Z1bmMpKHQsIHJlc3VsdCk7Ci0gICAgaWYgKHByb2NlZWQpCi0gICAgICAgIHJlc3VsdCA9IEhU
TUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgdC0+dGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBtX2RvY3VtZW50LCBtX2N1cnJlbnRG
b3JtRWxlbWVudC5nZXQoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci19Ci0KLWJv
b2wgTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQotewotICAgIC8vIHd3dy5saWNlby5lZHUubXggaXMg
YW4gZXhhbXBsZSBvZiBhIHNpdGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgb2YK
LSAgICAvLyBhYm91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4gIFdlIHdp
bGwgb25seSBhbGxvdyBhdCBtb3N0IDIwCi0gICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUg
dHlwZSBiZWZvcmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KLSAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBtX2Jsb2NrU3RhY2s7Ci0g
ICAgICAgICBpIDwgY01heFJlZHVuZGFudFRhZ0RlcHRoICYmIGN1cnIgJiYgY3Vyci0+dGFnTmFt
ZSA9PSB0YWdOYW1lOwotICAgICAgICAgY3VyciA9IGN1cnItPm5leHQsIGkrKykgeyB9Ci0gICAg
cmV0dXJuIGkgIT0gY01heFJlZHVuZGFudFRhZ0RlcHRoOwotfQotCi12b2lkIExlZ2FjeUhUTUxU
cmVlQ29uc3RydWN0b3I6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiogdCkKLXsKLSAgICAvLyBTdXBw
b3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuCi0gICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJv
ZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBh
Y3R1YWwgZW5kIG9mIHRoZSBkb2MuCi0gICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2Fs
bCB0byBjbG9zZSB0aGluZ3MuCi0gICAgaWYgKHQtPnRhZ05hbWUgPT0gaHRtbFRhZyB8fCB0LT50
YWdOYW1lID09IGJvZHlUYWcgfHwgdC0+dGFnTmFtZSA9PSBjb21tZW50QXRvbSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIGJvb2wgY2hlY2tGb3JDbG9zZVRhZ0Vycm9ycyA9IHRydWU7Ci0g
ICAgaWYgKHQtPnRhZ05hbWUgPT0gZm9ybVRhZyAmJiBtX2N1cnJlbnRGb3JtRWxlbWVudCkgewot
ICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudCA9IDA7Ci0gICAgICAgIGNoZWNrRm9yQ2xvc2VU
YWdFcnJvcnMgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gbWFwVGFnKQot
ICAgICAgICBtX2N1cnJlbnRNYXBFbGVtZW50ID0gMDsKLSAgICBlbHNlIGlmICh0LT50YWdOYW1l
ID09IHBUYWcpCi0gICAgICAgIGNoZWNrRm9yQ2xvc2VUYWdFcnJvcnMgPSBmYWxzZTsKLSAgICAg
ICAgCi0gICAgSFRNTFN0YWNrRWxlbSogb2xkRWxlbSA9IG1fYmxvY2tTdGFjazsKLSAgICBwb3BC
bG9jayh0LT50YWdOYW1lLCBjaGVja0ZvckNsb3NlVGFnRXJyb3JzKTsKLSAgICBpZiAob2xkRWxl
bSA9PSBtX2Jsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBwVGFnKSB7Ci0gICAgICAgIC8vIFdl
IGVuY291bnRlcmVkIGEgc3RyYXkgPC9wPi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUsIGFuZCBN
YWNJRSBhbGwgdHJlYXQKLSAgICAgICAgLy8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBpLmUuLCA8
cD48L3A+LiAgU28gZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGVtcHR5Ci0gICAgICAgIC8vIHBhcmFn
cmFwaC4KLSAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwotICAgICAgICBwYXJzZVRva2VuKHQp
OwotICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICAgICAgcmVwb3J0RXJyb3IoU3Ry
YXlQYXJhZ3JhcGhDbG9zZUVycm9yKTsKLSAgICB9Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6aXNIZWFkaW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRhZ05hbWVTZXQsIGhlYWRpbmdUYWdzLCAoKSk7Ci0g
ICAgaWYgKGhlYWRpbmdUYWdzLmlzRW1wdHkoKSkgewotICAgICAgICBRdWFsaWZpZWROYW1lIHRh
Z05hbWVzW10gPSB7IGgxVGFnLCBoMlRhZywgaDNUYWcsIGg0VGFnLCBoNVRhZywgaDZUYWcgfTsK
LSAgICAgICAgYWRkVGFncyhoZWFkaW5nVGFncywgdGFnTmFtZXMpOwotICAgIH0KLSAgICByZXR1
cm4gaGVhZGluZ1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsKCkpOwotfQotCi1ib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0gICAg
aWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
bm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShh
VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9udFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHR0VGFn
KSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHVUYWcpIHx8IGUtPmhhc0xvY2FsTmFt
ZShiVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoaVRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xv
Y2FsTmFtZShzVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3RyaWtlVGFnKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoYmlnVGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHNtYWxsVGFnKSB8
fCBlLT5oYXNMb2NhbE5hbWUoZW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzdHJvbmdUYWcpIHx8
Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZGZuVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUo
Y29kZVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHNhbXBUYWcpIHx8Ci0gICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoa2JkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUodmFyVGFnKSB8fCBlLT5oYXNM
b2NhbE5hbWUoY2l0ZVRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhYmJyVGFn
KSB8fCBlLT5oYXNMb2NhbE5hbWUoYWNyb255bVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHN1YlRh
ZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzdXBUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZShzcGFuVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9iclRhZykgfHwKLSAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShub2ZyYW1lc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5vbGF5ZXJU
YWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSNpZiAhRU5BQkxFKFhIVE1MTVApCi0gICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUobm9zY3JpcHRUYWcpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KSB7Ci0gICAg
ICAgICAgICBGcmFtZSogZnJhbWUgPSBtX2RvY3VtZW50LT5mcmFtZSgpOwotICAgICAgICAgICAg
aWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRU
b0V4ZWN1dGVTY3JpcHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIExlZ2Fj
eUhUTUxUcmVlQ29uc3RydWN0b3I6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiwgcmVzaWR1YWxTdHlsZVRhZ3MsICgpKTsKLSAgICBpZiAocmVzaWR1YWxTdHls
ZVRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZXNbXSA9IHsg
YVRhZywgZm9udFRhZywgdHRUYWcsIHVUYWcsIGJUYWcsIGlUYWcsCi0gICAgICAgICAgICBzVGFn
LCBzdHJpa2VUYWcsIGJpZ1RhZywgc21hbGxUYWcsIGVtVGFnLCBzdHJvbmdUYWcsIGRmblRhZywK
LSAgICAgICAgICAgIGNvZGVUYWcsIHNhbXBUYWcsIGtiZFRhZywgdmFyVGFnLCBub2JyVGFnIH07
Ci0gICAgICAgIGFkZFRhZ3MocmVzaWR1YWxTdHlsZVRhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKLX0K
LQotYm9vbCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0
eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+LCB1bmFmZmVjdGVkVGFncywgKCkpOwotICAg
IGlmICh1bmFmZmVjdGVkVGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVkTmFtZSB0
YWdOYW1lc1tdID0geyBib2R5VGFnLCB0YWJsZVRhZywgdGhlYWRUYWcsIHRib2R5VGFnLAotICAg
ICAgICAgICAgdGZvb3RUYWcsIHRyVGFnLCB0aFRhZywgdGRUYWcsIGNhcHRpb25UYWcsIGNvbGdy
b3VwVGFnLCBjb2xUYWcsCi0gICAgICAgICAgICBvcHRpb25UYWcsIG9wdGdyb3VwVGFnLCBzZWxl
Y3RUYWcsIG9iamVjdFRhZywgZGF0YWdyaWRUYWcsIGRhdGFsaXN0VGFnIH07Ci0gICAgICAgIGFk
ZFRhZ3ModW5hZmZlY3RlZFRhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuICF1bmFm
ZmVjdGVkVGFncy5jb250YWlucyh0YWdOYW1lLmltcGwoKSk7Ci19Ci0KLXZvaWQgTGVnYWN5SFRN
TFRyZWVDb25zdHJ1Y3Rvcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tz
KEhUTUxTdGFja0VsZW0qIGVsZW0pCi17Ci0gICAgSFRNTFN0YWNrRWxlbSogbWF4RWxlbSA9IDA7
Ci0gICAgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOwotICAgIGJvb2wgc3RyYXlUYWJsZUNvbnRlbnQg
PSBlbGVtLT5zdHJheVRhYmxlQ29udGVudDsKLQotICAgIHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50
ID0gMDsKLQotICAgIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzID0gdHJ1ZTsK
LSAgICB3aGlsZSAoIWZpbmlzaGVkICYmIChpdGVyYXRpb25Db3VudCsrIDwgY1Jlc2lkdWFsU3R5
bGVJdGVyYXRpb25MaW1pdCkpIHsKLSAgICAgICAgLy8gRmluZCB0aGUgb3V0ZXJtb3N0IGVsZW1l
bnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwuIElmIHRoZXJlIGV4aXN0cyBh
bm90aGVyIGhpZ2hlci1sZXZlbAotICAgICAgICAvLyBlbGVtZW50LCB3ZSB3aWxsIGRvIGFub3Ro
ZXIgcGFzcywgdW50aWwgd2UgaGF2ZSBjb3JyZWN0ZWQgdGhlIGlubmVybW9zdCBvbmUuCi0gICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBIVE1MU3RhY2tFbGVtKiBjdXJyID0g
bV9ibG9ja1N0YWNrOwotICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2ID0gMDsKLSAgICAgICAg
SFRNTFN0YWNrRWxlbSogcHJldk1heEVsZW0gPSAwOwotICAgICAgICBtYXhFbGVtID0gMDsKLSAg
ICAgICAgZmluaXNoZWQgPSB0cnVlOwotICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IGVs
ZW0pIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5sZXZlbCA+IGVsZW0tPmxldmVsKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGN1cnItPnRhZ05hbWUp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKG1heEVs
ZW0pCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbmVlZCBhbm90aGVyIHBhc3MuCi0g
ICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbWF4
RWxlbSA9IGN1cnI7Ci0gICAgICAgICAgICAgICAgcHJldk1heEVsZW0gPSBwcmV2OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBwcmV2ID0gY3VycjsKLSAgICAgICAgICAgIGN1cnIgPSBj
dXJyLT5uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE5vZGUqIHJlc2lkdWFsRWxlbSA9IHByZXYt
Pm5vZGU7Ci0gICAgICAgIE5vZGUqIGJsb2NrRWxlbSA9IHByZXZNYXhFbGVtID8gcHJldk1heEVs
ZW0tPm5vZGUgOiBtX2N1cnJlbnQ7Ci0gICAgICAgIE5vZGUqIHBhcmVudEVsZW0gPSBlbGVtLT5u
b2RlOwotCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgcmVwYXJlbnRpbmcgdGhhdCBp
cyBnb2luZyB0byBvY2N1ciBpcyBhbGxvd2VkIGFjY29yZGluZyB0byB0aGUgRE9NLgotICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGVpdGhlciBhbHdheXMgYWxsb3cgaXQgb3IgcGVyZm9ybSBh
biBhZGRpdGlvbmFsIGZpeHVwIGluc3RlYWQgb2YKLSAgICAgICAgLy8ganVzdCBiYWlsaW5nIGhl
cmUuCi0gICAgICAgIC8vIEV4YW1wbGU6IDxwPjxmb250PjxjZW50ZXI+YmxhaDwvZm9udD48L2Nl
bnRlcj48L3A+IGlzbid0IGRvaW5nIGEgZml4dXAgcmlnaHQgbm93LgotICAgICAgICBpZiAoIXBh
cmVudEVsZW0tPmNoaWxkQWxsb3dlZChibG9ja0VsZW0pKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gVW5rbm93bjsKLQotICAgICAgICBpZiAo
bWF4RWxlbS0+bm9kZS0+cGFyZW50Tm9kZSgpICE9IGVsZW0tPm5vZGUpIHsKLSAgICAgICAgICAg
IC8vIFdhbGsgdGhlIHN0YWNrIGFuZCByZW1vdmUgYW55IGVsZW1lbnRzIHRoYXQgYXJlbid0IHJl
c2lkdWFsIHN0eWxlIHRhZ3MuICBUaGVzZQotICAgICAgICAgICAgLy8gYXJlIGJhc2ljYWxseSBq
dXN0IGJlaW5nIGNsb3NlZCB1cC4gIEV4YW1wbGU6Ci0gICAgICAgICAgICAvLyA8Zm9udD48c3Bh
bj5Nb288cD5Hb288L2ZvbnQ+PC9wPi4KLSAgICAgICAgICAgIC8vIEluIHRoZSBhYm92ZSBleGFt
cGxlLCB0aGUgPHNwYW4+IGRvZXNuJ3QgbmVlZCB0byBiZSByZW9wZW5lZC4gIEl0IGNhbiBqdXN0
IGNsb3NlLgotICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogY3VyckVsZW0gPSBtYXhFbGVtLT5u
ZXh0OwotICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0gPSBtYXhFbGVtOwotICAg
ICAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKLSAgICAgICAgICAgICAgICBIVE1M
U3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAgICAgIGlm
ICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT50YWdOYW1lKSkgewotICAgICAgICAgICAg
ICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IG5leHRFbGVtOwotICAgICAgICAgICAgICAgICAgICBw
cmV2RWxlbS0+ZGVyZWZOb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZFbGVtLT5ub2Rl
ID0gY3VyckVsZW0tPm5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIHByZXZFbGVtLT5kaWRSZWZO
b2RlID0gY3VyckVsZW0tPmRpZFJlZk5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBj
dXJyRWxlbTsKLSAgICAgICAgICAgICAgICAgICAgbV90cmVlRGVwdGgtLTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0gPSBjdXJyRWxlbTsKLSAg
ICAgICAgICAgICAgICBjdXJyRWxlbSA9IG5leHRFbGVtOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIHJlb3BlbiByZXNpZHVhbCB0YWdzIGluIGJldHdlZW4gbWF4
RWxlbSBhbmQgZWxlbS4gIEFuIGV4YW1wbGUgb2YgdGhpcyBjYXNlIGlzOgotICAgICAgICAgICAg
Ly8gPGZvbnQ+PGk+TW9vPHA+Rm9vPC9mb250Pi4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgY2Fz
ZSwgd2UgbmVlZCB0byB0cmFuc2Zvcm0gdGhlIHBhcnQgYmVmb3JlIHRoZSA8cD4gaW50bzoKLSAg
ICAgICAgICAgIC8vIDxmb250PjxpPk1vbzwvaT48L2ZvbnQ+PGk+Ci0gICAgICAgICAgICAvLyBz
byB0aGF0IHRoZSA8aT4gd2lsbCByZW1haW4gb3Blbi4gIFRoaXMgaW52b2x2ZXMgdGhlIG1vZGlm
aWNhdGlvbiBvZiBlbGVtZW50cwotICAgICAgICAgICAgLy8gaW4gdGhlIGJsb2NrIHN0YWNrLgot
ICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGFsc28gYWZmZWN0IGhvdyB3ZSB1bHRpbWF0ZWx5IHJl
cGFyZW50IHRoZSBibG9jaywgc2luY2Ugd2Ugd2FudCBpdCB0byBlbmQgdXAKLSAgICAgICAgICAg
IC8vIHVuZGVyIHRoZSByZW9wZW5lZCByZXNpZHVhbCB0YWdzIChlLmcuLCB0aGUgPGk+IGluIHRo
ZSBhYm92ZSBleGFtcGxlLikKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2Tm9kZSA9IDA7
Ci0gICAgICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07Ci0gICAgICAgICAgICB3aGlsZSAoY3Vy
ckVsZW0tPm5vZGUgIT0gcmVzaWR1YWxFbGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVz
aWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+bm9kZS0+bG9jYWxOYW1lKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgZWxlbWVudC4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY2FsbCByZWxlYXNlUmVmIHRvIGdldCBhIHJhdyBwb2ludGVyIHNpbmNl
IHdlIHBsYW4gdG8gaGFuZCBvdmVyIG93bmVyc2hpcCB0byBjdXJyRWxlbS4KLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSogY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNl
KS5yZWxlYXNlUmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlc2lkdWFs
U3R5bGVFcnJvciwgJmN1cnJOb2RlLT5sb2NhbE5hbWUoKSk7Ci0gICAgCi0gICAgICAgICAgICAg
ICAgICAgIC8vIENoYW5nZSB0aGUgc3RhY2sgZWxlbWVudCdzIG5vZGUgdG8gcG9pbnQgdG8gdGhl
IGNsb25lLgotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3RhY2sgZWxlbWVudCBhZG9wdHMg
dGhlIHJlZmVyZW5jZSB3ZSBvYnRhaW5lZCBhYm92ZSBieSBjYWxsaW5nIHJlbGVhc2UoKS4KLSAg
ICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICAgICAgICAg
ICAgICBjdXJyRWxlbS0+bm9kZSA9IGN1cnJOb2RlOwotICAgICAgICAgICAgICAgICAgICBjdXJy
RWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQXR0YWNo
IHRoZSBwcmV2aW91cyBub2RlIGFzIGEgY2hpbGQgb2YgdGhpcyBuZXcgbm9kZS4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZOb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck5v
ZGUtPmFwcGVuZENoaWxkKHByZXZOb2RlLCBlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
Ly8gVGhlIG5ldyBwYXJlbnQgZm9yIHRoZSBibG9jayBlbGVtZW50IGlzIGdvaW5nIHRvIGJlIHRo
ZSBpbm5lcm1vc3QgY2xvbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtID0g
Y3Vyck5vZGU7ICAvLyBGSVhNRTogV2Ugc2hpZnRlZCBwYXJlbnRFbGVtIHRvIGJlIGEgcmVzaWR1
YWwgaW5saW5lLiAgV2UgbmV2ZXIgY2hlY2tlZCB0byBzZWUgaWYgYmxvY2tFbGVtIGNvdWxkIGJl
IGxlZ2FsbHkgcGxhY2VkIGluc2lkZSB0aGUgaW5saW5lIHRob3VnaC4KLQotICAgICAgICAgICAg
ICAgICAgICBwcmV2Tm9kZSA9IGN1cnJOb2RlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGN1cnJFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGNoYWluIG9mIG5ldyByZXNpZHVhbCBzdHlsZSBl
bGVtZW50cyBpZiBvbmUgZXhpc3RzLgotICAgICAgICAgICAgaWYgKHByZXZOb2RlKQotICAgICAg
ICAgICAgICAgIGVsZW0tPm5vZGUtPmFwcGVuZENoaWxkKHByZXZOb2RlLCBlYyk7ICAvLyBGSVhN
RTogVGhpcyBhcHBlbmQgY2FuIHJlc3VsdCBpbiB3ZWlyZCBzdHVmZiBoYXBwZW5pbmcsIGxpa2Ug
YW4gaW5saW5lIGNoYWluIGJlaW5nIHB1dCBpbnRvIGEgdGFibGUgc2VjdGlvbi4KLSAgICAgICAg
fQotCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSBibG9jayBpcyBzdGlsbCBpbiB0aGUgdHJlZS4g
SWYgaXQgaXNuJ3QsIHRoZW4gd2UgZG9uJ3QKLSAgICAgICAgLy8gd2FudCB0byByZW1vdmUgaXQg
ZnJvbSBpdHMgcGFyZW50ICh0aGF0IHdvdWxkIGNyYXNoKSBvciBpbnNlcnQgaXQgaW50bwotICAg
ICAgICAvLyBhIG5ldyBwYXJlbnQgbGF0ZXIuIFNlZSBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02Nzc4Ci0gICAgICAgIGJvb2wgaXNCbG9ja1N0aWxsSW5UcmVlID0gYmxv
Y2tFbGVtLT5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIGEgY2xv
bmUgb2YgfHJlc2lkdWFsRWxlbXwgYW5kIHBsYWNlIGl0IGp1c3QgaW5zaWRlIHxibG9ja0VsZW18
LgotICAgICAgICAvLyBBbGwgY29udGVudCBvZiB8YmxvY2tFbGVtfCBpcyByZXBhcmVudGVkIHRv
IGJlIHVuZGVyIHRoaXMgY2xvbmUuICBXZSB0aGVuCi0gICAgICAgIC8vIHJlcGFyZW50IHxibG9j
a0VsZW18IHVzaW5nIHJlYWwgRE9NIGNhbGxzIHNvIHRoYXQgYXR0YWNobWVudC9kZXRhY2htZW50
IHdpbGwKLSAgICAgICAgLy8gYmUgcGVyZm9ybWVkIHRvIGZpeCB1cCB0aGUgcmVuZGVyaW5nIHRy
ZWUuCi0gICAgICAgIC8vIFNvIGZvciB0aGlzIGV4YW1wbGU6IDxiPi4uLjxwPkZvbzwvYj5Hb288
L3A+Ci0gICAgICAgIC8vIFRoZSBlbmQgcmVzdWx0IHdpbGwgYmU6IDxiPi4uLjwvYj48cD48Yj5G
b288L2I+R29vPC9wPgotICAgICAgICAvLwotICAgICAgICAvLyBTdGVwIDE6IFJlbW92ZSB8Ymxv
Y2tFbGVtfCBmcm9tIGl0cyBwYXJlbnQsIGRvaW5nIGEgYmF0Y2ggZGV0YWNoIG9mIGFsbCB0aGUg
a2lkcy4KLSAgICAgICAgaWYgKGlzQmxvY2tTdGlsbEluVHJlZSkKLSAgICAgICAgICAgIGJsb2Nr
RWxlbS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChibG9ja0VsZW0sIGVjKTsKLQotICAgICAg
ICBOb2RlKiBuZXdOb2RlUHRyID0gMDsKLSAgICAgICAgaWYgKGJsb2NrRWxlbS0+Zmlyc3RDaGls
ZCgpKSB7Ci0gICAgICAgICAgICAvLyBTdGVwIDI6IENsb25lIHxyZXNpZHVhbEVsZW18LgotICAg
ICAgICAgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSByZXNpZHVhbEVsZW0tPmNsb25lTm9kZShm
YWxzZSk7IC8vIFNoYWxsb3cgY2xvbmUuIFdlIGRvbid0IHBpY2sgdXAgdGhlIHNhbWUga2lkcy4K
LSAgICAgICAgICAgIG5ld05vZGVQdHIgPSBuZXdOb2RlLmdldCgpOwotICAgICAgICAgICAgcmVw
b3J0RXJyb3IoUmVzaWR1YWxTdHlsZUVycm9yLCAmbmV3Tm9kZS0+bG9jYWxOYW1lKCkpOwotCi0g
ICAgICAgICAgICAvLyBTdGVwIDM6IFBsYWNlIHxibG9ja0VsZW18J3MgY2hpbGRyZW4gdW5kZXIg
fG5ld05vZGV8LiAgUmVtb3ZlIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgfGJsb2NrRWxlbXwKLSAg
ICAgICAgICAgIC8vIGJlZm9yZSB3ZSd2ZSBwdXQgfG5ld0VsZW18IGludG8gdGhlIGRvY3VtZW50
LiAgVGhhdCB3YXkgd2UnbGwgb25seSBkbyBvbmUgYXR0YWNobWVudCBvZiBhbGwKLSAgICAgICAg
ICAgIC8vIHRoZSBuZXcgY29udGVudCAoaW5zdGVhZCBvZiBhIGJ1bmNoIG9mIGluZGl2aWR1YWwg
YXR0YWNobWVudHMpLgotICAgICAgICAgICAgTm9kZSogY3Vyck5vZGUgPSBibG9ja0VsZW0tPmZp
cnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyTm9kZSkgewotICAgICAgICAgICAg
ICAgIE5vZGUqIG5leHROb2RlID0gY3Vyck5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAg
ICAgICAgbmV3Tm9kZS0+YXBwZW5kQ2hpbGQoY3Vyck5vZGUsIGVjKTsKLSAgICAgICAgICAgICAg
ICBjdXJyTm9kZSA9IG5leHROb2RlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBT
dGVwIDQ6IFBsYWNlIHxuZXdOb2RlfCB1bmRlciB8YmxvY2tFbGVtfC4gIHxibG9ja0VsZW18IGlz
IHN0aWxsIG91dCBvZiB0aGUgZG9jdW1lbnQsIHNvIG5vCi0gICAgICAgICAgICAvLyBhdHRhY2ht
ZW50IGNhbiBvY2N1ciB5ZXQuCi0gICAgICAgICAgICBibG9ja0VsZW0tPmFwcGVuZENoaWxkKG5l
d05vZGUucmVsZWFzZSgpLCBlYyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmluaXNo
ZWQgPSB0cnVlOwotCi0gICAgICAgIC8vIFN0ZXAgNTogUmVwYXJlbnQgfGJsb2NrRWxlbXwuICBO
b3cgdGhlIGZ1bGwgYXR0YWNobWVudCBvZiB0aGUgZml4ZWQgdXAgdHJlZSB0YWtlcyBwbGFjZS4K
LSAgICAgICAgaWYgKGlzQmxvY2tTdGlsbEluVHJlZSkKLSAgICAgICAgICAgIHBhcmVudEVsZW0t
PmFwcGVuZENoaWxkKGJsb2NrRWxlbSwgZWMpOwotCi0gICAgICAgIC8vIFN0ZXAgNjogUHVsbCB8
ZWxlbXwgb3V0IG9mIHRoZSBzdGFjaywgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIGVuY2xvc2luZyB1
cy4gIEFsc28gdXBkYXRlCi0gICAgICAgIC8vIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUg
cHJldmlvdXMgc3RhY2sgZWxlbWVudCBzbyB0aGF0IHdoZW4gaXQgZ2V0cyBwb3BwZWQsCi0gICAg
ICAgIC8vIGl0IGRvZXNuJ3QgbWFrZSB0aGUgcmVzaWR1YWwgZWxlbWVudCB0aGUgbmV4dCBjdXJy
ZW50IG5vZGUuCi0gICAgICAgIEhUTUxTdGFja0VsZW0qIGN1cnJFbGVtID0gbWF4RWxlbTsKLSAg
ICAgICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0gPSAwOwotICAgICAgICB3aGlsZSAoY3VyckVs
ZW0gIT0gZWxlbSkgewotICAgICAgICAgICAgcHJldkVsZW0gPSBjdXJyRWxlbTsKLSAgICAgICAg
ICAgIGN1cnJFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcHJldkVs
ZW0tPm5leHQgPSBlbGVtLT5uZXh0OwotICAgICAgICBwcmV2RWxlbS0+ZGVyZWZOb2RlKCk7Ci0g
ICAgICAgIHByZXZFbGVtLT5ub2RlID0gZWxlbS0+bm9kZTsKLSAgICAgICAgcHJldkVsZW0tPmRp
ZFJlZk5vZGUgPSBlbGVtLT5kaWRSZWZOb2RlOwotICAgICAgICBtX3RyZWVEZXB0aC0tOwotICAg
ICAgICBpZiAoIWZpbmlzaGVkKSB7Ci0gICAgICAgICAgICAvLyBSZXB1cnBvc2UgfGVsZW18IHRv
IHJlcHJlc2VudCB8bmV3Tm9kZXwgYW5kIGluc2VydCBpdCBhdCB0aGUgYXBwcm9wcmlhdGUgcG9z
aXRpb24KLSAgICAgICAgICAgIC8vIGluIHRoZSBzdGFjay4gV2UgZG8gbm90IGRvIHRoaXMgZm9y
IHRoZSBpbm5lcm1vc3QgYmxvY2ssIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSBuZXcKLSAgICAg
ICAgICAgIC8vIG5vZGUgaXMgZWZmZWN0aXZlbHkgbm8gbG9uZ2VyIG9wZW4uCi0gICAgICAgICAg
ICBlbGVtLT5uZXh0ID0gbWF4RWxlbTsKLSAgICAgICAgICAgIGVsZW0tPm5vZGUgPSBwcmV2TWF4
RWxlbS0+bm9kZTsKLSAgICAgICAgICAgIGVsZW0tPmRpZFJlZk5vZGUgPSBwcmV2TWF4RWxlbS0+
ZGlkUmVmTm9kZTsKLSAgICAgICAgICAgIGVsZW0tPnN0cmF5VGFibGVDb250ZW50ID0gZmFsc2U7
Ci0gICAgICAgICAgICBwcmV2TWF4RWxlbS0+bmV4dCA9IGVsZW07Ci0gICAgICAgICAgICBBU1NF
UlQobmV3Tm9kZVB0cik7Ci0gICAgICAgICAgICBwcmV2TWF4RWxlbS0+bm9kZSA9IG5ld05vZGVQ
dHI7Ci0gICAgICAgICAgICBuZXdOb2RlUHRyLT5yZWYoKTsKLSAgICAgICAgICAgIHByZXZNYXhF
bGVtLT5kaWRSZWZOb2RlID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fdHJlZURlcHRoKys7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZGVsZXRlIGVsZW07Ci0gICAgfQotCi0gICAgLy8gRklY
TUU6IElmIHdlIGV2ZXIgbWFrZSBhIGNhc2UgbGlrZSB0aGlzIHdvcms6Ci0gICAgLy8gPHRhYmxl
PjxiPjxpPjxmb3JtPjwvYj48L2Zvcm0+PC9pPjwvdGFibGU+Ci0gICAgLy8gVGhlbiB0aGlzIGNo
ZWNrIHdpbGwgYmUgdG9vIHNpbXBsaXN0aWMuICBSaWdodCBub3cgdGhlIDxpPjxmb3JtPiBjaGFp
biB3aWxsIGVuZCB1cCBpbnNpZGUgdGhlIDx0Ym9keT4sIHdoaWNoIGlzIHByZXR0eSBjcmF6eS4K
LSAgICBpZiAoc3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAgIG1faW5TdHJheVRhYmxlQ29udGVu
dC0tOwotCi0gICAgLy8gU3RlcCA3OiBSZW9wZW4gaW50ZXJtZWRpYXRlIGlubGluZXMsIGUuZy4s
IDxiPjxwPjxpPkZvbzwvYj5Hb288L3A+LgotICAgIC8vIEluIHRoZSBhYm92ZSBleGFtcGxlLCBH
b28gc2hvdWxkIHN0YXkgaXRhbGljLgotICAgIC8vIFdlIGNhcCB0aGUgbnVtYmVyIG9mIHRhZ3Mg
d2UncmUgd2lsbGluZyB0byByZW9wZW4gYmFzZWQgb2ZmIGNSZXNpZHVhbFN0eWxlTWF4RGVwdGgu
Ci0gICAgCi0gICAgSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKLSAgICBIVE1M
U3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAwOwotICAgIHVuc2lnbmVkIHN0YWNrRGVw
dGggPSAxOwotICAgIHVuc2lnbmVkIHJlZHVuZGFudFN0eWxlQ291bnQgPSAwOwotICAgIHdoaWxl
IChjdXJyICYmIGN1cnIgIT0gbWF4RWxlbSkgewotICAgICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5
IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcKLSAgICAgICAgLy8gYWZ0ZXIgd2UgY29t
cGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgotICAgICAgICBpZiAoaXNSZXNp
ZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpICYmIHN0YWNrRGVwdGgrKyA8IGNSZXNpZHVhbFN0
eWxlTWF4RGVwdGgpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQgdGhlIHVzZSBv
ZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKLSAgICAgICAgICAgIC8v
IHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxl
cy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKLSAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRv
IG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRv
IHJlb3BlbgotICAgICAgICAgICAgLy8gZnJvbSB0aGUgb3V0ZXJtb3N0IHRvIHRoZSBpbm5lcm1v
c3QsIGkuZS4sIHJlc2lkdWFsU3R5bGVTdGFjayB3aWxsIGVuZCB1cCBwb2ludGluZwotICAgICAg
ICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcgd2UgbmVlZCB0byByZW9wZW4uCi0gICAgICAg
ICAgICAvLyBXZSBhbHNvIHNldCBjdXJyLT5ub2RlIHRvIGJlIHRoZSBhY3R1YWwgZWxlbWVudCB0
aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KLSAgICAgICAgICAgIC8vIGN1cnIt
PmlkIHJhdGhlciB0aGFuIHRoZSBub2RlIHRoYXQgeW91IHNob3VsZCBwb3AgdG8gd2hlbiB0aGUg
ZWxlbWVudCBnZXRzIHB1bGxlZCBvZmYKLSAgICAgICAgICAgIC8vIHRoZSBzdGFjay4KLSAgICAg
ICAgICAgIGlmIChyZXNpZHVhbFN0eWxlU3RhY2sgJiYgY3Vyci0+dGFnTmFtZSA9PSByZXNpZHVh
bFN0eWxlU3RhY2stPnRhZ05hbWUgJiYgY3Vyci0+bm9kZS0+YXR0cmlidXRlcygpLT5tYXBzRXF1
aXZhbGVudChyZXNpZHVhbFN0eWxlU3RhY2stPm5vZGUtPmF0dHJpYnV0ZXMoKSkpCi0gICAgICAg
ICAgICAgICAgcmVkdW5kYW50U3R5bGVDb3VudCsrOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQgPSAwOwotCi0gICAgICAgICAgICBpZiAocmVk
dW5kYW50U3R5bGVDb3VudCA8IGNNYXhSZWR1bmRhbnRUYWdEZXB0aCkKLSAgICAgICAgICAgICAg
ICBtb3ZlT25lQmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBwb3BPbmVCbG9jaygpOwotCi0gICAgICAgIGN1cnIgPSBtX2Jsb2NrU3RhY2s7Ci0g
ICAgfQotCi0gICAgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MocmVzaWR1YWxTdHlsZVN0YWNrLCAw
KTsgLy8gU3RyYXkgdGFibGUgY29udGVudCBjYW4ndCBiZSBhbiBpc3N1ZSBoZXJlLCBzaW5jZSBz
b21lIGVsZW1lbnQgYWJvdmUgd2lsbCBhbHdheXMgYmVjb21lIHRoZSByb290IG9mIG5ldyBzdHJh
eSB0YWJsZSBjb250ZW50LgotCi0gICAgbV9oYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9j
a3MgPSBmYWxzZTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpyZW9wZW5S
ZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBOb2RlKiBtYWxmb3JtZWRUYWJs
ZVBhcmVudCkKLXsKLSAgICAvLyBMb29wIGZvciBlYWNoIHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJl
b3BlbmVkLgotICAgIHdoaWxlIChlbGVtKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhIHNoYWxsb3cg
Y2xvbmUgb2YgdGhlIERPTSBub2RlIGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICAgIFJlZlB0cjxO
b2RlPiBuZXdOb2RlID0gZWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsgCi0gICAgICAgIHJl
cG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5ld05vZGUtPmxvY2FsTmFtZSgpKTsKLQot
ICAgICAgICAvLyBBcHBlbmQgdGhlIG5ldyBub2RlLiBJbiB0aGUgbWFsZm9ybWVkIHRhYmxlIGNh
c2UsIHdlIG5lZWQgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGFibGUsCi0gICAgICAgIC8vIHdoaWNo
IHdpbGwgYmUgdGhlIGxhc3QgY2hpbGQuCi0gICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICBpZiAobWFsZm9ybWVkVGFibGVQYXJlbnQpCi0gICAgICAgICAgICBtYWxmb3JtZWRU
YWJsZVBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld05vZGUsIG1hbGZvcm1lZFRhYmxlUGFyZW50LT5s
YXN0Q2hpbGQoKSwgZWMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2N1cnJlbnQtPmFw
cGVuZENoaWxkKG5ld05vZGUsIGVjKTsKLSAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBP
SyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KLQotICAgICAgICAvLyBOb3cgcHVzaCBh
IG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAg
ICBwdXNoQmxvY2soZWxlbS0+dGFnTmFtZSwgZWxlbS0+bGV2ZWwpOwotICAgICAgICBuZXdOb2Rl
LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgICAgIC8vIFNldCBvdXIgc3RyYXlUYWJs
ZUNvbnRlbnQgYm9vbGVhbiBpZiBuZWVkZWQsIHNvIHRoYXQgdGhlIHJlb3BlbmVkIHRhZyBhbHNv
IGtub3dzCi0gICAgICAgIC8vIHRoYXQgaXQgaXMgaW5zaWRlIGEgbWFsZm9ybWVkIHRhYmxlLgot
ICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gbWFsZm9ybWVkVGFibGVQ
YXJlbnQgIT0gMDsKLSAgICAgICAgaWYgKG1fYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQp
Ci0gICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQrKzsKLQotICAgICAgICAvLyBDbGVh
ciBvdXIgbWFsZm9ybWVkIHRhYmxlIHBhcmVudCB2YXJpYWJsZS4KLSAgICAgICAgbWFsZm9ybWVk
VGFibGVQYXJlbnQgPSAwOwotCi0gICAgICAgIC8vIFVwZGF0ZSB8Y3VycmVudHwgbWFudWFsbHkg
dG8gcG9pbnQgdG8gdGhlIG5ldyBub2RlLgotICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUuZ2V0
KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gQWR2YW5jZSB0byB0aGUgbmV4dCB0YWcgdGhhdCBu
ZWVkcyB0byBiZSByZW9wZW5lZC4KLSAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dCA9IGVsZW0t
Pm5leHQ7Ci0gICAgICAgIGVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICBkZWxldGUgZWxlbTsK
LSAgICAgICAgZWxlbSA9IG5leHQ7Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3I6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBsZXZl
bCkKLXsKLSAgICBtX2Jsb2NrU3RhY2sgPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBsZXZl
bCwgbV9jdXJyZW50LCBtX2RpZFJlZkN1cnJlbnQsIG1fYmxvY2tTdGFjayk7Ci0gICAgaWYgKGxl
dmVsID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkKLSAgICAgICAgbV9ibG9ja3NJblN0YWNr
Kys7Ci0gICAgbV90cmVlRGVwdGgrKzsKLSAgICBtX2RpZFJlZkN1cnJlbnQgPSBmYWxzZTsKLSAg
ICBpZiAodGFnTmFtZSA9PSBwVGFnKQotICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29wZSA9IElu
U2NvcGU7Ci0gICAgZWxzZSBpZiAoaXNTY29waW5nVGFnKHRhZ05hbWUpKQotICAgICAgICBtX2hh
c1BFbGVtZW50SW5TY29wZSA9IE5vdEluU2NvcGU7Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVD
b25zdHJ1Y3Rvcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIHJl
cG9ydEVycm9ycykKLXsKLSAgICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwot
Ci0gICAgaWYgKG1fcGFyc2VyUXVpcmtzICYmIGVsZW0gJiYgIW1fcGFyc2VyUXVpcmtzLT5zaG91
bGRQb3BCbG9jayhlbGVtLT50YWdOYW1lLCB0YWdOYW1lKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaW50IG1heExldmVsID0gMDsKLQotICAgIHdoaWxlIChlbGVtICYmIChlbGVtLT50YWdOYW1l
ICE9IHRhZ05hbWUpKSB7Ci0gICAgICAgIGlmIChtYXhMZXZlbCA8IGVsZW0tPmxldmVsKQotICAg
ICAgICAgICAgbWF4TGV2ZWwgPSBlbGVtLT5sZXZlbDsKLSAgICAgICAgZWxlbSA9IGVsZW0tPm5l
eHQ7Ci0gICAgfQotCi0gICAgaWYgKCFlbGVtKSB7Ci0gICAgICAgIGlmIChyZXBvcnRFcnJvcnMp
Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihTdHJheUNsb3NlVGFnRXJyb3IsICZ0YWdOYW1lLCAw
LCB0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtYXhMZXZlbCA+IGVs
ZW0tPmxldmVsKSB7Ci0gICAgICAgIC8vIFdlIGRpZG4ndCBtYXRjaCBiZWNhdXNlIHRoZSB0YWcg
aXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCi0gICAgICAgIC8vIDxiPjxwPkZvbzwvYj4u
ICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5
bGVUYWcodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJldHVybiBoYW5k
bGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoZWxlbSk7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoZWxlbS0+
dGFnTmFtZSk7Ci0gICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0gMDsKLSAg
ICBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7Ci0gICAgCi0gICAgZWxlbSA9IG1fYmxv
Y2tTdGFjazsKLSAgICB1bnNpZ25lZCBzdGFja0RlcHRoID0gMTsKLSAgICB1bnNpZ25lZCByZWR1
bmRhbnRTdHlsZUNvdW50ID0gMDsKLSAgICB3aGlsZSAoZWxlbSkgewotICAgICAgICBpZiAoZWxl
bS0+dGFnTmFtZSA9PSB0YWdOYW1lKSB7Ci0gICAgICAgICAgICBpbnQgc3RyYXlUYWJsZSA9IG1f
aW5TdHJheVRhYmxlQ29udGVudDsKLSAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAg
ICAgICBlbGVtID0gMDsKLQotICAgICAgICAgICAgLy8gVGhpcyBlbGVtZW50IHdhcyB0aGUgcm9v
dCBvZiBzb21lIG1hbGZvcm1lZCBjb250ZW50IGp1c3QgaW5zaWRlIGFuIGltcGxpY2l0IG9yCi0g
ICAgICAgICAgICAvLyBleHBsaWNpdCA8dGJvZHk+IG9yIDx0cj4uCi0gICAgICAgICAgICAvLyBJ
ZiB3ZSBlbmQgdXAgbmVlZGluZyB0byByZW9wZW4gcmVzaWR1YWwgc3R5bGUgdGFncywgdGhlIHJv
b3Qgb2YgdGhlIHJlb3BlbmVkIGNoYWluCi0gICAgICAgICAgICAvLyBtdXN0IGFsc28ga25vdyB0
aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBhIDx0Ym9keT4v
PHRyPi4KLSAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChtX2luU3RyYXlUYWJsZUNvbnRl
bnQgPCBzdHJheVRhYmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKLSAgICAgICAgICAgICAg
ICBOb2RlKiBjdXJyID0gbV9jdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyICYm
ICFjdXJyLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgY3VyciA9
IGN1cnItPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVu
dCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKG1fY3VycmVudEZvcm1FbGVtZW50
ICYmIGVsZW0tPnRhZ05hbWUgPT0gZm9ybVRhZykKLSAgICAgICAgICAgICAgICAvLyBBIDxmb3Jt
PiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0aGlzIGlzCi0gICAgICAgICAgICAg
ICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSB0byBj
bGVhciBvdXQgaXRzCi0gICAgICAgICAgICAgICAgLy8gYm90dG9tIG1hcmdpbi4KLSAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRGb3JtRWxlbWVudC0+c2V0TWFsZm9ybWVkKHRydWUpOwotCi0gICAg
ICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCi0gICAgICAgICAgICAv
LyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxvY2suCi0gICAg
ICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKGVsZW0t
PnRhZ05hbWUpICYmIHN0YWNrRGVwdGgrKyA8IGNSZXNpZHVhbFN0eWxlTWF4RGVwdGgpIHsKLSAg
ICAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVu
dHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgLy8gc3RydWN0IHdp
dGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVh
ZCBvZiBjaGFpbmluZwotICAgICAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRvIG91dGVy
bW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJlb3Bl
bgotICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG91dGVybW9zdCB0byB0aGUgaW5uZXJtb3N0
LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sgd2lsbCBlbmQgdXAgcG9pbnRpbmcKLSAgICAgICAg
ICAgICAgICAvLyB0byB0aGUgb3V0ZXJtb3N0IHRhZyB3ZSBuZWVkIHRvIHJlb3Blbi4KLSAgICAg
ICAgICAgICAgICAvLyBXZSBhbHNvIHNldCBlbGVtLT5ub2RlIHRvIGJlIHRoZSBhY3R1YWwgZWxl
bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBJRCBzdG9yZWQgaW4KLSAgICAgICAgICAgICAg
ICAvLyBlbGVtLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0IHlvdSBzaG91bGQgcG9wIHRv
IHdoZW4gdGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCi0gICAgICAgICAgICAgICAgLy8gdGhl
IHN0YWNrLgotICAgICAgICAgICAgICAgIGlmIChyZXNpZHVhbFN0eWxlU3RhY2sgJiYgZWxlbS0+
dGFnTmFtZSA9PSByZXNpZHVhbFN0eWxlU3RhY2stPnRhZ05hbWUgJiYgZWxlbS0+bm9kZS0+YXR0
cmlidXRlcygpLT5tYXBzRXF1aXZhbGVudChyZXNpZHVhbFN0eWxlU3RhY2stPm5vZGUtPmF0dHJp
YnV0ZXMoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQrKzsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291
bnQgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlZHVuZGFudFN0eWxlQ291bnQgPCBjTWF4
UmVkdW5kYW50VGFnRGVwdGgpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVPbmVCbG9ja1RvU3Rh
Y2socmVzaWR1YWxTdHlsZVN0YWNrKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBwb3BPbmVCbG9jaygpOwotICAgICAgICAgICAgZWxlbSA9IG1fYmxvY2tTdGFjazsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5
bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQpOwotfQotCi1pbmxpbmUgSFRNTFN0YWNrRWxl
bSogTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcjo6cG9wT25lQmxvY2tDb21tb24oKQotewotICAg
IEhUTUxTdGFja0VsZW0qIGVsZW0gPSBtX2Jsb2NrU3RhY2s7Ci0KLSAgICAvLyBGb3JtIGVsZW1l
bnRzIHJlc3RvcmUgdGhlaXIgc3RhdGUgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuCi0gICAg
Ly8gQWxzbywgYSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0PikgbmVlZCB0byBrbm93
IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWlsYWJsZS4KLSAgICBp
ZiAobV9jdXJyZW50ICYmIGVsZW0tPm5vZGUgIT0gbV9jdXJyZW50KQotICAgICAgICBtX2N1cnJl
bnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKG1fYmxvY2tTdGFjay0+bGV2
ZWwgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7Ci0gICAgICAgIEFTU0VSVChtX2Jsb2Nr
c0luU3RhY2sgPiAwKTsKLSAgICAgICAgbV9ibG9ja3NJblN0YWNrLS07Ci0gICAgfQotICAgIG1f
dHJlZURlcHRoLS07Ci0gICAgbV9ibG9ja1N0YWNrID0gZWxlbS0+bmV4dDsKLSAgICBtX2N1cnJl
bnQgPSBlbGVtLT5ub2RlOwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGVsZW0tPmRpZFJlZk5vZGU7
Ci0KLSAgICBpZiAoZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAgIG1faW5TdHJheVRh
YmxlQ29udGVudC0tOwotCi0gICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gcFRhZykKLSAgICAgICAg
bV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwotICAgIGVsc2UgaWYgKGlzU2NvcGlu
Z1RhZyhlbGVtLT50YWdOYW1lKSkKLSAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBVbmtu
b3duOwotCi0gICAgcmV0dXJuIGVsZW07Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvcjo6cG9wT25lQmxvY2soKQotewotICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IG5vZGUgYmVm
b3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCi0gICAgTm9kZSogbGFzdEN1cnJl
bnQgPSBtX2N1cnJlbnQ7Ci0gICAgYm9vbCBkaWRSZWZMYXN0Q3VycmVudCA9IG1fZGlkUmVmQ3Vy
cmVudDsKLQotICAgIGRlbGV0ZSBwb3BPbmVCbG9ja0NvbW1vbigpOwotCi0gICAgaWYgKGRpZFJl
Zkxhc3RDdXJyZW50KQotICAgICAgICBsYXN0Q3VycmVudC0+ZGVyZWYoKTsKLX0KLQotdm9pZCBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjptb3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxTdGFja0Vs
ZW0qJiBoZWFkKQotewotICAgIC8vIFdlJ2xsIGJlIHVzaW5nIHRoZSBzdGFjayBlbGVtZW50IHdl
J3JlIHBvcHBpbmcsIGJ1dCBmb3IgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAvLyBTZWUgdGhlIHR3
byBjYWxsZXJzIGZvciBkZXRhaWxzLgotCi0gICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgbm9kZSBi
ZWZvcmUgcG9wT25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBpdC4KLSAgICBOb2RlKiBsYXN0Q3Vy
cmVudCA9IG1fY3VycmVudDsKLSAgICBib29sIGRpZFJlZkxhc3RDdXJyZW50ID0gbV9kaWRSZWZD
dXJyZW50OwotCi0gICAgLy8gUG9wIHRoZSBibG9jaywgYnV0IGRvbid0IGRlcmVmIHRoZSBjdXJy
ZW50IG5vZGUgYXMgcG9wT25lQmxvY2sgZG9lcyBiZWNhdXNlCi0gICAgLy8gd2UnbGwgYmUgdXNp
bmcgdGhlIHBvaW50ZXIgaW4gdGhlIG5ldyBzdGFjayBlbGVtZW50LgotICAgIEhUTUxTdGFja0Vs
ZW0qIGVsZW0gPSBwb3BPbmVCbG9ja0NvbW1vbigpOwotCi0gICAgLy8gVHJhbnNmZXIgdGhlIGN1
cnJlbnQgbm9kZSBpbnRvIHRoZSBzdGFjayBlbGVtZW50LgotICAgIC8vIE5vIG5lZWQgdG8gZGVy
ZWYgdGhlIG9sZCBlbGVtLT5ub2RlIGJlY2F1c2UgcG9wT25lQmxvY2tDb21tb24gdHJhbnNmZXJy
ZWQKLSAgICAvLyBpdCBpbnRvIHRoZSBtX2N1cnJlbnQvbV9kaWRSZWZDdXJyZW50IGZpZWxkcy4K
LSAgICBlbGVtLT5ub2RlID0gbGFzdEN1cnJlbnQ7Ci0gICAgZWxlbS0+ZGlkUmVmTm9kZSA9IGRp
ZFJlZkxhc3RDdXJyZW50OwotICAgIGVsZW0tPm5leHQgPSBoZWFkOwotICAgIGhlYWQgPSBlbGVt
OwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmNoZWNrSWZIYXNQRWxlbWVu
dEluU2NvcGUoKQotewotICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKLSAg
ICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwotICAgIHdoaWxlIChlbGVtKSB7
Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IGVsZW0tPnRhZ05hbWU7Ci0g
ICAgICAgIGlmICh0YWdOYW1lID09IHBUYWcpIHsKLSAgICAgICAgICAgIG1faGFzUEVsZW1lbnRJ
blNjb3BlID0gSW5TY29wZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlm
IChpc1Njb3BpbmdUYWcodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVs
ZW0gPSBlbGVtLT5uZXh0OwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yOjpwb3BJbmxpbmVCbG9ja3MoKQotewotICAgIHdoaWxlIChtX2Jsb2NrU3RhY2sgJiYgaXNJ
bmxpbmUobV9jdXJyZW50KSkKLSAgICAgICAgcG9wT25lQmxvY2soKTsKLX0KLQotdm9pZCBMZWdh
Y3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmcmVlQmxvY2soKQotewotICAgIHdoaWxlIChtX2Jsb2Nr
U3RhY2spCi0gICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgQVNTRVJUKCFtX2Jsb2Nrc0luU3Rh
Y2spOwotICAgIEFTU0VSVCghbV90cmVlRGVwdGgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVl
Q29uc3RydWN0b3I6OmNyZWF0ZUhlYWQoKQotewotICAgIGlmIChtX2hlYWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgJiYgIW1faXNQ
YXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2RvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKSB8fCBtX2lzUGFyc2luZ0ZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBtX2hl
YWQgPSBIVE1MSGVhZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLQotICAgIGlmIChtX2lz
UGFyc2luZ0ZyYWdtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIVE1MRWxlbWVudCogYm9k
eSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBt
X2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKG1faGVhZC5nZXQoKSwg
Ym9keSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgbV9oZWFkID0gMDsKLSAgICAgICAgCi0g
ICAgLy8gSWYgdGhlIGJvZHkgZG9lcyBub3QgZXhpc3QgeWV0LCB0aGVuIHRoZSA8aGVhZD4gc2hv
dWxkIGJlIHB1c2hlZCBhcyB0aGUgY3VycmVudCBibG9jay4KLSAgICBpZiAobV9oZWFkICYmICFi
b2R5KSB7Ci0gICAgICAgIHB1c2hCbG9jayhtX2hlYWQtPmxvY2FsTmFtZSgpLCBtX2hlYWQtPnRh
Z1ByaW9yaXR5KCkpOwotICAgICAgICBzZXRDdXJyZW50KG1faGVhZC5nZXQoKSk7Ci0gICAgfQot
fQotCi1QYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6OmhhbmRsZUlz
aW5kZXgoVG9rZW4qIHQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IG4gPSBIVE1MRGl2RWxlbWVudDo6
Y3JlYXRlKG1fZG9jdW1lbnQpOwotCi0gICAgTmFtZWROb2RlTWFwKiBhdHRycyA9IHQtPmF0dHJz
LmdldCgpOwotCi0gICAgUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4gaXNJbmRleCA9IEhUTUxJ
c0luZGV4RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIG1fY3VycmVudEZvcm1FbGVtZW50Lmdl
dCgpKTsKLSAgICBpc0luZGV4LT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMpOwotICAgIGlzSW5kZXgt
PnNldEF0dHJpYnV0ZSh0eXBlQXR0ciwgImtodG1sX2lzaW5kZXgiKTsKLQotICAgIFN0cmluZyB0
ZXh0ID0gc2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCk7Ci0gICAgaWYgKGF0dHJzKSB7Ci0g
ICAgICAgIGlmIChBdHRyaWJ1dGUqIGEgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShwcm9tcHRB
dHRyKSkKLSAgICAgICAgICAgIHRleHQgPSBhLT52YWx1ZSgpLnN0cmluZygpICsgIiAiOwotICAg
ICAgICB0LT5hdHRycyA9IDA7Ci0gICAgfQotCi0gICAgbi0+YWRkQ2hpbGQoSFRNTEhSRWxlbWVu
dDo6Y3JlYXRlKG1fZG9jdW1lbnQpKTsKLSAgICBuLT5hZGRDaGlsZChUZXh0OjpjcmVhdGUobV9k
b2N1bWVudCwgdGV4dCkpOwotICAgIG4tPmFkZENoaWxkKGlzSW5kZXgucmVsZWFzZSgpKTsKLSAg
ICBuLT5hZGRDaGlsZChIVE1MSFJFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkpOwotCi0gICAg
cmV0dXJuIG4ucmVsZWFzZSgpOwotfQotCi12b2lkIExlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3I6
OnN0YXJ0Qm9keSgpCi17Ci0gICAgaWYgKG1faW5Cb2R5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2luQm9keSA9IHRydWU7Ci0KLSAgICBpZiAobV9pc2luZGV4RWxlbWVudCkgewotICAgICAg
ICBpbnNlcnROb2RlKG1faXNpbmRleEVsZW1lbnQuZ2V0KCksIHRydWUgLyogZG9uJ3QgZGVzY2Vu
ZCBpbnRvIHRoaXMgbm9kZSAqLyk7Ci0gICAgICAgIG1faXNpbmRleEVsZW1lbnQgPSAwOwotICAg
IH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yOjpmaW5pc2hlZCgpCi17Ci0g
ICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3Mg
dGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgotICAgIGlmIChtX2N1cnJlbnQg
JiYgbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKSkKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2Rv
Y3VtZW50KS5nZXQoKSk7Ci0KLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCAiY3VycmVudCIgaXMg
bm90IGxlZnQgcG9pbnRpbmcgdG8gYSBub2RlIHdoZW4gdGhlIGRvY3VtZW50IGlzIGRlc3Ryb3ll
ZC4KLSAgICBmcmVlQmxvY2soKTsKLSAgICBzZXRDdXJyZW50KDApOwotCi0gICAgLy8gV2Fybmlu
ZywgdGhpcyBtYXkgZGVsZXRlIHRoZSBwYXJzZXIsIHNvIGRvbid0IHRyeSB0byBkbyBhbnl0aGlu
ZyBlbHNlIGFmdGVyIHRoaXMuCi0gICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAg
ICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJl
ZUNvbnN0cnVjdG9yOjpyZXBvcnRFcnJvclRvQ29uc29sZShIVE1MUGFyc2VyRXJyb3JDb2RlIGVy
cm9yQ29kZSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5n
KiB0YWdOYW1lMiwgYm9vbCBjbG9zZVRhZ3MpCi17ICAgIAotICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciogaHRtbFRva2VuaXplciA9IHN0YXRpY19j
YXN0PExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcio+KG1fZG9jdW1lbnQtPnBhcnNlcigpKTsKLSAg
ICBpbnQgbGluZU51bWJlciA9IGh0bWxUb2tlbml6ZXItPmxpbmVOdW1iZXIoKSArIDE7Ci0KLSAg
ICBBdG9taWNTdHJpbmcgdGFnMTsKLSAgICBBdG9taWNTdHJpbmcgdGFnMjsKLSAgICBpZiAodGFn
TmFtZTEpIHsKLSAgICAgICAgaWYgKCp0YWdOYW1lMSA9PSAiI3RleHQiKQotICAgICAgICAgICAg
dGFnMSA9ICJUZXh0IjsKLSAgICAgICAgZWxzZSBpZiAoKnRhZ05hbWUxID09ICIjY29tbWVudCIp
Ci0gICAgICAgICAgICB0YWcxID0gIjwhLS0gY29tbWVudCAtLT4iOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0YWcxID0gKGNsb3NlVGFncyA/ICI8LyIgOiAiPCIpICsgKnRhZ05hbWUxICsg
Ij4iOwotICAgIH0KLSAgICBpZiAodGFnTmFtZTIpIHsKLSAgICAgICAgaWYgKCp0YWdOYW1lMiA9
PSAiI3RleHQiKQotICAgICAgICAgICAgdGFnMiA9ICJUZXh0IjsKLSAgICAgICAgZWxzZSBpZiAo
KnRhZ05hbWUyID09ICIjY29tbWVudCIpCi0gICAgICAgICAgICB0YWcyID0gIjwhLS0gY29tbWVu
dCAtLT4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0YWcyID0gKGNsb3NlVGFncyA/ICI8
LyIgOiAiPCIpICsgKnRhZ05hbWUyICsgIj4iOwotICAgIH0KLSAgICAgICAgCi0gICAgY29uc3Qg
Y2hhciogZXJyb3JNc2cgPSBodG1sUGFyc2VyRXJyb3JNZXNzYWdlVGVtcGxhdGUoZXJyb3JDb2Rl
KTsKLSAgICBpZiAoIWVycm9yTXNnKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFN0
cmluZyBtZXNzYWdlOwotICAgIGlmIChodG1sVG9rZW5pemVyLT5wcm9jZXNzaW5nQ29udGVudFdy
aXR0ZW5CeVNjcmlwdCgpKQotICAgICAgICBtZXNzYWdlICs9IGh0bWxQYXJzZXJEb2N1bWVudFdy
aXRlTWVzc2FnZSgpOwotICAgIG1lc3NhZ2UgKz0gZXJyb3JNc2c7Ci0gICAgbWVzc2FnZS5yZXBs
YWNlKCIldGFnMSIsIHRhZzEpOwotICAgIG1lc3NhZ2UucmVwbGFjZSgiJXRhZzIiLCB0YWcyKTsK
LQotICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgCi0gICAgICAgIGlzV2FybmluZyhlcnJvckNvZGUp
ID8gV2FybmluZ01lc3NhZ2VMZXZlbCA6IEVycm9yTWVzc2FnZUxldmVsLAotICAgICAgICBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBtX2RvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7Ci19Ci0KLSNpZmRl
ZiBCVUlMRElOR19PTl9MRU9QQVJECi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAKLSAgICBTZXR0
aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+c2V0
dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVkc0xlb3Bh
cmRNYWlsUXVpcmtzKCkgOiB0cnVlOwotfQotI2VsaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikKLWJvb2wgc2hvdWxkQ3JlYXRlSW1wbGljaXRIZWFkKERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIAotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRv
Y3VtZW50LT5wYWdlKCkgPyBkb2N1bWVudC0+cGFnZSgpLT5zZXR0aW5ncygpIDogMDsKLSAgICBy
ZXR1cm4gc2V0dGluZ3MgPyAhc2V0dGluZ3MtPm5lZWRzVGlnZXJNYWlsUXVpcmtzKCkgOiB0cnVl
OwotfQotI2VuZGlmCi0KLQotU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51
bWJlcikKLXsKLSAgICAvLyBBY2NvcmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXByZXNlbnRh
dGlvbiBvZiB0aGUgbnVtYmVyIG4gYXMgYSBmbG9hdGluZwotICAgIC8vIHBvaW50IG51bWJlciIg
aXMgYSBzdHJpbmcgcHJvZHVjZWQgYnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgotICAgIER0
b2FCdWZmZXIgYnVmZmVyOwotICAgIHVuc2lnbmVkIGxlbmd0aDsKLSAgICBkb3VibGVUb1N0cmlu
Z0luSmF2YVNjcmlwdEZvcm1hdChudW1iZXIsIGJ1ZmZlciwgJmxlbmd0aCk7Ci0gICAgcmV0dXJu
IFN0cmluZyhidWZmZXIsIGxlbmd0aCk7Ci19Ci0KLWJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJl
clR5cGUoY29uc3QgU3RyaW5nJiBzcmMsIGRvdWJsZSogb3V0KQotewotICAgIC8vIFNlZSBIVE1M
NSAyLjQuNC4zIGBSZWFsIG51bWJlcnMuJwotCi0gICAgaWYgKHNyYy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBTdHJpbmc6OnRvRG91YmxlKCkgYWNjZXB0cyBsZWFk
aW5nICsgXHQgXG4gXHYgXGYgXHIgYW5kIFNQQUNFLCB3aGljaCBhcmUgaW52YWxpZCBpbiBIVE1M
NS4KLSAgICAvLyBTbywgY2hlY2sgdGhlIGZpcnN0IGNoYXJhY3Rlci4KLSAgICBpZiAoc3JjWzBd
ICE9ICctJyAmJiAoc3JjWzBdIDwgJzAnIHx8IHNyY1swXSA+ICc5JykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJvb2wgdmFsaWQgPSBmYWxzZTsKLSAgICBkb3VibGUgdmFsdWUgPSBz
cmMudG9Eb3VibGUoJnZhbGlkKTsKLSAgICBpZiAoIXZhbGlkKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgLy8gTmFOIGFuZCBJbmZpbml0eSBhcmUgbm90IHZhbGlkIG51bWJlcnMgYWNjb3Jk
aW5nIHRvIHRoZSBzdGFuZGFyZC4KLSAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIC8vIC0wIC0+IDAKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICB2
YWx1ZSA9IDA7Ci0gICAgaWYgKG91dCkKLSAgICAgICAgKm91dCA9IHZhbHVlOwotICAgIHJldHVy
biB0cnVlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDYxNjcyKQorKysgV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxUcmVlQ29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAgICBDb3B5
cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKLSAgICAgICAgICAg
ICAgKEMpIDE5OTcgVG9yYmVuIFdlaXMgKHdlaXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMp
IDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotICAgICAgICAgICAgICAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2lmbmRlZiBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yX2gKLSNkZWZpbmUgTGVn
YWN5SFRNTFRyZWVDb25zdHJ1Y3Rvcl9oCi0KLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24uaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIgotI2luY2x1ZGUg
IlF1YWxpZmllZE5hbWUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRG9jdHlwZVRva2VuOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBEb2N1bWVu
dEZyYWdtZW50OwotY2xhc3MgSFRNTERvY3VtZW50OwotY2xhc3MgSFRNTEZvcm1FbGVtZW50Owot
Y2xhc3MgSFRNTEhlYWRFbGVtZW50OwotY2xhc3MgSFRNTE1hcEVsZW1lbnQ7Ci1jbGFzcyBIVE1M
UGFyc2VyUXVpcmtzOwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEhUTUxTdGFja0VsZW07Ci1zdHJ1
Y3QgVG9rZW47Ci0KLS8qKgotICogVGhlIHBhcnNlciBmb3IgSFRNTC4gSXQgcmVjZWl2ZXMgYSBz
dHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlciwgYW5kCi0g
KiBidWlsZHMgdXAgdGhlIERvY3VtZW50IHN0cnVjdHVyZSBmcm9tIGl0LgotICovCi1jbGFzcyBM
ZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLXB1YmxpYzoK
LSAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0
RXJyb3JzKTsKLSAgICBMZWdhY3lIVE1MVHJlZUNvbnN0cnVjdG9yKERvY3VtZW50RnJhZ21lbnQq
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQp
OwotICAgIHZpcnR1YWwgfkxlZ2FjeUhUTUxUcmVlQ29uc3RydWN0b3IoKTsKLQotICAgIC8qKgot
ICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tlbml6ZXIKLSAgICAg
Ki8KLSAgICBQYXNzUmVmUHRyPE5vZGU+IHBhcnNlVG9rZW4oVG9rZW4qKTsKLSAgICAKLSAgICAv
LyBQYXJzZXMgYSBkb2N0eXBlIHRva2VuLgotICAgIHZvaWQgcGFyc2VEb2N0eXBlVG9rZW4oRG9j
dHlwZVRva2VuKik7Ci0KLSAgICAvKioKLSAgICAgKiB0b2tlbml6ZXIgc2F5cyBpdCdzIG5vdCBn
b2luZyB0byBiZSBzZW5kaW5nIHVzIGFueSBtb3JlIHRva2VucwotICAgICAqLwotICAgIHZvaWQg
ZmluaXNoZWQoKTsKLQotICAgIC8qKgotICAgICAqIHJlc2V0cyB0aGUgcGFyc2VyCi0gICAgICov
Ci0gICAgdm9pZCByZXNldCgpOwotCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJu
ICFtX3NraXBNb2RlVGFnLmlzTnVsbCgpOyB9Ci0gICAgYm9vbCBpc0hhbmRsaW5nUmVzaWR1YWxT
dHlsZUFjcm9zc0Jsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxpbmdSZXNpZHVhbFN0eWxl
QWNyb3NzQmxvY2tzOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBzZXRDdXJyZW50KE5vZGUqKTsK
LSAgICB2b2lkIGRlcmVmQ3VycmVudCgpOwotICAgIHZvaWQgc2V0U2tpcE1vZGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgcU5hbWUpIHsgbV9za2lwTW9kZVRhZyA9IHFOYW1lLmxvY2FsTmFtZSgpOyB9
Ci0KLSAgICBQYXNzUmVmUHRyPE5vZGU+IGdldE5vZGUoVG9rZW4qKTsKLSAgICBib29sIGJvZHlD
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBjYW52YXND
cmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBjb21tZW50
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgZGRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBkdENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIGZvcm1DcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBmcmFtZXNldENyZWF0ZUVy
cm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIGhlYWRDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBpZnJhbWVDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBpc2luZGV4Q3JlYXRlRXJy
b3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbWFwQ3JlYXRlRXJyb3JD
aGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbmVzdGVkQ3JlYXRlRXJyb3JD
aGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbmVzdGVkUENsb3NlckNyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5lc3RlZFN0eWxl
Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbm9lbWJl
ZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5vZnJh
bWVzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgbm9s
YXllckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIG5v
c2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wg
cENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29s
IHBDbG9zZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0g
ICAgYm9vbCBycENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIHJ0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wg
c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wg
dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJv
b2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwot
ICAgIGJvb2wgdGV4dENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLQot
ICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFnKFRva2VuKik7Ci0KLSAgICB2b2lkIGxpbWl0RGVwdGgo
aW50IHRhZ1ByaW9yaXR5KTsKLSAgICBib29sIGluc2VydE5vZGVBZnRlckxpbWl0RGVwdGgoTm9k
ZSosIGJvb2wgZmxhdCA9IGZhbHNlKTsKLSAgICBib29sIGluc2VydE5vZGUoTm9kZSosIGJvb2wg
ZmxhdCA9IGZhbHNlKTsKLSAgICBib29sIGhhbmRsZUVycm9yKE5vZGUqLCBib29sIGZsYXQsIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpOwotICAgIAotICAg
IHZvaWQgcHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IGxldmVsKTsK
LSAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgYm9vbCByZXBv
cnRFcnJvcnMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwb3BCbG9jayhjb25zdCBRdWFsaWZpZWROYW1l
JiBxTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMgPSBmYWxzZSkgeyByZXR1cm4gcG9wQmxvY2socU5h
bWUubG9jYWxOYW1lKCksIHJlcG9ydEVycm9ycyk7IH0gLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24g
Zm9yIHJlYWRhYmlsaXR5LgotICAgIHZvaWQgcG9wT25lQmxvY2soKTsKLSAgICB2b2lkIG1vdmVP
bmVCbG9ja1RvU3RhY2soSFRNTFN0YWNrRWxlbSomIGhlYWQpOwotICAgIGlubGluZSBIVE1MU3Rh
Y2tFbGVtKiBwb3BPbmVCbG9ja0NvbW1vbigpOwotICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7
Ci0KLSAgICB2b2lkIGZyZWVCbG9jaygpOwotCi0gICAgdm9pZCBjcmVhdGVIZWFkKCk7Ci0KLSAg
ICBzdGF0aWMgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKTsKLSAgICBzdGF0aWMgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgdm9pZCBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VU
YWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSopOwotICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxT
dHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSosIE5vZGUqIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKLQot
ICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKTsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRpbmdUYWcoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lKTsKLQotICAgIGJvb2wgaXNJbmxpbmUoTm9kZSopIGNvbnN0OwotICAgIAot
ICAgIHZvaWQgc3RhcnRCb2R5KCk7IC8vIGluc2VydHMgdGhlIGlzaW5kZXggZWxlbWVudAotICAg
IFBhc3NSZWZQdHI8Tm9kZT4gaGFuZGxlSXNpbmRleChUb2tlbiopOwotCi0gICAgdm9pZCBjaGVj
a0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7Ci0gICAgYm9vbCBoYXNQRWxlbWVudEluU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1faGFzUEVsZW1lbnRJblNjb3BlID09IFVua25vd24pCi0gICAg
ICAgICAgICBjaGVja0lmSGFzUEVsZW1lbnRJblNjb3BlKCk7Ci0gICAgICAgIHJldHVybiBtX2hh
c1BFbGVtZW50SW5TY29wZSA9PSBJblNjb3BlOwotICAgIH0KLQotICAgIHZvaWQgcmVwb3J0RXJy
b3IoSFRNTFBhcnNlckVycm9yQ29kZSBlcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFn
TmFtZTEgPSAwLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyID0gMCwgYm9vbCBjbG9zZVRh
Z3MgPSBmYWxzZSkKLSAgICB7IGlmICghbV9yZXBvcnRFcnJvcnMpIHJldHVybjsgcmVwb3J0RXJy
b3JUb0NvbnNvbGUoZXJyb3JDb2RlLCB0YWdOYW1lMSwgdGFnTmFtZTIsIGNsb3NlVGFncyk7IH0K
LQotICAgIHZvaWQgcmVwb3J0RXJyb3JUb0NvbnNvbGUoSFRNTFBhcnNlckVycm9yQ29kZSwgY29u
c3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMSwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdOYW1lMiwg
Ym9vbCBjbG9zZVRhZ3MpOwotICAgIAotICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotCi0gICAg
Ly8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9uZSBuZXcgZWxlbWVudHMgd2ls
bCBiZSBhZGRlZCB0bykuIENhbiBiZSBhIGRvY3VtZW50IGZyYWdtZW50LCBhIGRvY3VtZW50IG9y
IGFuIGVsZW1lbnQuCi0gICAgTm9kZSogbV9jdXJyZW50OwotICAgIC8vIFdlIGNhbid0IHJlZiBh
IGRvY3VtZW50LCBidXQgd2UgZG9uJ3Qgd2FudCB0byBjb25zdGFudGx5IGNoZWNrIGlmIGEgbm9k
ZSBpcyBhIGRvY3VtZW50IGp1c3QgdG8gZGVjaWRlIHdoZXRoZXIgdG8gZGVyZWYuCi0gICAgYm9v
bCBtX2RpZFJlZkN1cnJlbnQ7Ci0KLSAgICBIVE1MU3RhY2tFbGVtKiBtX2Jsb2NrU3RhY2s7Ci0K
LSAgICAvLyBUaGUgbnVtYmVyIG9mIHRhZ3Mgd2l0aCBwcmlvcml0eSBtaW5CbG9ja0xldmVsVGFn
UHJpb3JpdHkgb3IgaGlnaGVyCi0gICAgLy8gY3VycmVudGx5IGluIG1fYmxvY2tTdGFjay4gVGhl
IHBhcnNlciBlbmZvcmNlcyBhIGNhcCBvbiB0aGlzIHZhbHVlIGJ5Ci0gICAgLy8gYWRkaW5nIHN1
Y2ggbmV3IGVsZW1lbnRzIGFzIHNpYmxpbmdzIGluc3RlYWQgb2YgY2hpbGRyZW4gb25jZSBpdCBp
cyByZWFjaGVkLgotICAgIHNpemVfdCBtX2Jsb2Nrc0luU3RhY2s7Ci0gICAgLy8gRGVwdGggb2Yg
dGhlIHRyZWUuCi0gICAgdW5zaWduZWQgbV90cmVlRGVwdGg7Ci0KLSAgICBlbnVtIEVsZW1lbnRJ
blNjb3BlU3RhdGUgeyBOb3RJblNjb3BlLCBJblNjb3BlLCBVbmtub3duIH07IAotICAgIEVsZW1l
bnRJblNjb3BlU3RhdGUgbV9oYXNQRWxlbWVudEluU2NvcGU7Ci0KLSAgICBSZWZQdHI8SFRNTEZv
cm1FbGVtZW50PiBtX2N1cnJlbnRGb3JtRWxlbWVudDsgLy8gY3VycmVudGx5IGFjdGl2ZSBmb3Jt
Ci0gICAgUmVmUHRyPEhUTUxNYXBFbGVtZW50PiBtX2N1cnJlbnRNYXBFbGVtZW50OyAvLyBjdXJy
ZW50IG1hcAotICAgIFJlZlB0cjxIVE1MSGVhZEVsZW1lbnQ+IG1faGVhZDsgLy8gaGVhZCBlbGVt
ZW50OyBuZWVkZWQgZm9yIEhUTUwgd2hpY2ggZGVmaW5lcyA8YmFzZT4gYWZ0ZXIgPC9oZWFkPgot
ICAgIFJlZlB0cjxOb2RlPiBtX2lzaW5kZXhFbGVtZW50OyAvLyBhIHBvc3NpYmxlIDxpc2luZGV4
PiBlbGVtZW50IGluIHRoZSBoZWFkCi0KLSAgICBib29sIG1faW5Cb2R5OwotICAgIGJvb2wgbV9o
YXZlQ29udGVudDsKLSAgICBib29sIG1faGF2ZUZyYW1lU2V0OwotCi0gICAgQXRvbWljU3RyaW5n
IG1fc2tpcE1vZGVUYWc7IC8vIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncyB1
bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCi0KLSAgICBib29sIG1faXNQYXJzaW5n
RnJhZ21lbnQ7Ci0gICAgYm9vbCBtX3JlcG9ydEVycm9yczsKLSAgICBib29sIG1faGFuZGxpbmdS
ZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzOwotICAgIGludCBtX2luU3RyYXlUYWJsZUNvbnRlbnQ7
Ci0gICAgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIG1fc2NyaXB0aW5nUGVybWlzc2lvbjsK
LQotICAgIE93blB0cjxIVE1MUGFyc2VyUXVpcmtzPiBtX3BhcnNlclF1aXJrczsKLX07Ci0KLSNp
ZiBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpCi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCopOwotI2Vsc2UKLWlu
bGluZSBib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChEb2N1bWVudCopIHsgcmV0dXJuIHRy
dWU7IH0KLSNlbmRpZgotCi0vLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIHN0cmluZyB0byBhIGZs
b2F0aW5nIG51bWJlci4KLS8vIElmIHRoZSBjb252ZXJzaW9uIGZhaWxzLCB0aGUgcmV0dXJuIHZh
bHVlIGlzIGZhbHNlLiBUYWtlIGNhcmUgdGhhdCBsZWFkaW5nIG9yIHRyYWlsaW5nIHVubmVjZXNz
YXJ5IGNoYXJhY3RlcnMgbWFrZSBmYWlsdXJlcy4gIFRoaXMgcmV0dXJucyBmYWxzZSBmb3IgYW4g
ZW1wdHkgc3RyaW5nIGlucHV0LgotLy8gVGhlIGRvdWJsZSogcGFyYW1ldGVyIG1heSBiZSAwLgot
Ym9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJpbmcmLCBkb3VibGUqKTsK
LS8vIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHRvIGEgc3RyaW5nLiBUaGlzIGlzIGFu
IGltcGxlbWVudGF0aW9uIG9mCi0vLyBIVE1MNSdzICJhbGdvcml0aG0gdG8gY29udmVydCBhIG51
bWJlciB0byBhIHN0cmluZyIgZm9yIE5VTUJFUi9SQU5HRSB0eXBlcy4KLVN0cmluZyBzZXJpYWxp
emVGb3JOdW1iZXJUeXBlKGRvdWJsZSk7Ci0KLX0KLSAgICAKLSNlbmRpZiAvLyBMZWdhY3lIVE1M
VHJlZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCShyZXZpc2lvbiA2MTY3MikKKysr
IFdlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3
IEBACiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkxl
Z2FjeUhUTUxUcmVlQnVpbGRlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIApJbmRleDogV2ViQ29yZS9odG1sL1ZhbGlkaXR5U3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAkocmV2
aXNpb24gNjE2NzIpCisrKyBXZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUNvbnN0cnVj
dG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZWd1bGFyRXhw
cmVzc2lvbi5oIgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiA2
MTY3MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJMZWdhY3lI
VE1MVHJlZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
</data>
<flag name="review"
          id="46383"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>