<?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>184200</bug_id>
          
          <creation_ts>2018-03-30 16:07:57 -0700</creation_ts>
          <short_desc>Add pointer profiling support in baseline JIT and supporting files.</short_desc>
          <delta_ts>2018-03-31 00:05:07 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1410753</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 16:07:57 -0700</bug_when>
    <thetext>Patch coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410754</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-30 16:08:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/39057300&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410759</commentid>
    <comment_count>2</comment_count>
      <attachid>336895</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 16:28:43 -0700</bug_when>
    <thetext>Created attachment 336895
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410776</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 17:05:05 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #2)
&gt; Created attachment 336895 [details]
&gt; proposed patch.

Looks like I will most certainly have 32-bit bugs.  Working on those now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410804</commentid>
    <comment_count>4</comment_count>
      <attachid>336907</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 21:12:23 -0700</bug_when>
    <thetext>Created attachment 336907
proposed patch.

Let&apos;s get some EWS testing on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410807</commentid>
    <comment_count>5</comment_count>
      <attachid>336910</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 22:01:10 -0700</bug_when>
    <thetext>Created attachment 336910
patch for landing w/ Windows build fix.

Thanks for the review.  The WPE EWS reveals some unneeded code.  This patch for landing removes those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410817</commentid>
    <comment_count>6</comment_count>
      <attachid>336915</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-30 23:06:06 -0700</bug_when>
    <thetext>Created attachment 336915
patch for landing w/ wincairo build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1410832</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-31 00:05:07 -0700</bug_when>
    <thetext>Landed in r230129: &lt;http://trac.webkit.org/r230129&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336895</attachid>
            <date>2018-03-30 16:28:43 -0700</date>
            <delta_ts>2018-03-30 17:48:24 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184200.patch</filename>
            <type>text/plain</type>
            <size>165802</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBA
QAorMjAxOC0wMy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgaW4gYmFzZWxpbmUgSklUIGFuZCBzdXBwb3J0
aW5nIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg0MjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTA1NzMwMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxsKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29k
ZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAgIChKU0M6OlNsb3dQYXRoQ2Fs
bEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRBZGRJQyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmFkZEpJVFN1YklDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjphZGRKSVRO
ZWdJQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6YWRkTWF0aElDKToKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3Bw
OgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXApOgorICAgICAg
ICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAgIChKU0M6OkxMSW50Q2Fs
bExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRp
b25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFs
dWVBZGQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhT
dWIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0pOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25TdHJpbmcp
OgorICAgICAgICAqIGRpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHA6CisgICAgICAg
IChKU0M6OnRyeVRvRGlzYXNzZW1ibGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVmFsdWVB
ZGQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlVW5hcnlN
YXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQmlu
YXJ5TWF0aElDKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUFyaXRoQWRkT3JTdWIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAqIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuaDoK
KyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmVTZXQ6Om1hcmspOgorICAgICAgICAqIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmNhbGxF
eGNlcHRpb25GdXp6KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwp
OgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6QXNzZW1i
bHlIZWxwZXJzOjplbWl0RnVuY3Rpb25Qcm9sb2d1ZSk6CisgICAgICAgICogaml0L0NDYWxsSGVs
cGVycy5jcHA6CisgICAgICAgIChKU0M6OkNDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCk6CisgICAgICAgICogaml0L0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpD
Q2FsbEhlbHBlcnM6OnByZXBhcmVGb3JUYWlsQ2FsbFNsb3cpOgorICAgICAgICAqIGppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVw
YXJlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjpqaXRXcml0ZVRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAg
ICAgICAoSlNDOjpwZXJmb3JtSklUTWVtY3B5KToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlV2l0aG91dExpbmtpbmcpOgorICAgICAgICAoSlNDOjpK
SVQ6OmxpbmspOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25lZ2F0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9hZGQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tdWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3ViKToKKyAgICAgICAgKiBqaXQvSklUQ29kZS5jcHA6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpKSVRDb2Rl
V2l0aENvZGVSZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQpOgorICAgICAgICAoSlNDOjpO
YXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCk6CisgICAgICAgICogaml0L0pJVEV4Y2VwdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmljVW53aW5kKToKKyAgICAgICAgKiBqaXQvSklU
TWF0aElDLmg6CisgICAgICAgIChKU0M6OmlzUHJvZmlsZUVtcHR5KToKKyAgICAgICAgKEpTQzo6
SklUQmluYXJ5TWF0aElDOjpKSVRCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpKSVRVbmFy
eU1hdGhJQzo6SklUVW5hcnlNYXRoSUMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3By
b3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OnRyeUdldEJ5VmFsT3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9p
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQpOgorICAgICAgICAqIGppdC9KSVRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpKSVRU
aHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAg
ICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVwYXRjaEdldEJ5
SUQpOgorICAgICAgICAoSlNDOjphcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNo
UHV0QnlJRCk6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRD
YWxsKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6
OnJlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OnJlc2V0UHV0QnlJRCk6CisgICAgICAgICog
aml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBqaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oOgorICAg
ICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6
OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmNhbGxEb3VibGVUb0RvdWJsZSk6CisgICAgICAgICogaml0
L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmVtaXRQb2ludGVyVmFsaWRhdGlv
bik6CisgICAgICAgIChKU0M6OnRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OnNsb3dQYXRoRm9yKToKKyAgICAgICAgKEpTQzo6bGlua0NhbGxU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnZpcnR1YWxUaHVua0Zv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5hdGl2ZUZvckdlbmVyYXRvcik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Om5hdGl2ZUNhbGxHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpuYXRpdmVUYWlsQ2FsbEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5h
dGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFnc0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6Om5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmludGVybmFsRnVuY3Rpb25DYWxsR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
aW50ZXJuYWxGdW5jdGlvbkNvbnN0cnVjdEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp1bnJlYWNo
YWJsZUdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnN0cmluZ0NoYXJMb2FkKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2hhclRvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
Y2hhckF0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpmcm9tQ2hhckNv
ZGVUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmNsejMyVGh1bmtHZW5l
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dHJ1
bmNUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJvdW5kVGh1bmtHZW5l
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpleHBUaHVua0dlbmVyYXRvcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OmxvZ1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6YWJzVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppbXVsVGh1
bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpyYW5kb21UaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdl
bmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoKKyAgICAg
ICAgKEpTQzo6TExJbnQ6OmluaXRpYWxpemUpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0YS5o
OgorICAgICAgICAoSlNDOjpMTEludDo6Z2V0Q29kZVB0cik6CisgICAgICAgICogbGxpbnQvTExJ
bnRFbnRyeXBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEV2YWxFbnRyeXBvaW50
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAg
KEpTQzo6TExJbnQ6OnNldE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgor
ICAgICAgICAqIGxsaW50L0xMSW50VGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6Omdl
bmVyYXRlVGh1bmtXaXRoSnVtcFRvKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlQmFzZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmg6CisgICAgICAgIChKU0M6OlRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uOjpUYWdnZWROYXRpdmVGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlRh
Z2dlZE5hdGl2ZUZ1bmN0aW9uOjpvcGVyYXRvciBOYXRpdmVGdW5jdGlvbik6CisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpzZXRD
dXN0b20pOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldENhY2hlYWJsZUN1c3RvbSk6
CisgICAgICAgICogcnVudGltZS9QdHJUYWcuaDoKKyAgICAgICAgKiBydW50aW1lL1B1dFByb3Bl
cnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbVZhbHVl
KToKKyAgICAgICAgKEpTQzo6UHV0UHJvcGVydHlTbG90OjpzZXRDdXN0b21BY2Nlc3Nvcik6Cisg
ICAgICAgICogcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ft
cGxpbmdQcm9maWxlcjo6dGFrZVNhbXBsZSk6CisgICAgICAgICogcnVudGltZS9WTVRyYXBzLmNw
cDoKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6U2lnbmFsQ29udGV4dCk6CisgICAgICAg
IChKU0M6OlZNVHJhcHM6OnRyeUluc3RhbGxUcmFwQnJlYWtwb2ludHMpOgorICAgICAgICAqIHRv
b2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjppbnN0YWxsQ3Jhc2hI
YW5kbGVyKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZVRyeVJlYWRVbmljb2RlQ2hhcmFjdGVySGVscGVyKToK
KyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRlcik6CisKIDIw
MTgtMDMtMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBCeXRl
Y29kZSBnZW5lcmF0b3Igc2hvdWxkIG5vdCBnZXRfZnJvbV9zY29wZSBzb21ldGhpbmcgdGhhdCBt
YXkgYmUgYSBob2xlIGludG8gYSB2YXJpYWJsZSB0aGF0IGlzIGFscmVhZHkgbGl2ZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NzIsNyArODcyLDYgQEAgcHVibGljOgogICAgICAgICBBc3NlbWJsZXJUeXBlOjpsaW5rUG9pbnRl
cihjb2RlLCBsYWJlbCwgdmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgfQogCi0gICAg
Ly8gRklYTUU6IHJlbW92ZSB0aGUgZGVmYXVsdCBQdHJUYWcgdmFsdWUgb25jZSB3ZSd2ZSB0YWdn
ZWQgYWxsIHRoZSBjbGllbnRzLgogICAgIHN0YXRpYyB2b2lkKiBnZXRMaW5rZXJBZGRyZXNzKHZv
aWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCBQdHJUYWcgdGFnID0gTm9QdHJUYWcpCiAg
ICAgewogICAgICAgICByZXR1cm4gdGFnQ29kZVB0cihBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0
ZWRBZGRyZXNzKGNvZGUsIGxhYmVsKSwgdGFnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTgyLDcgKzE4Miw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxh
Z1NldChDYWxsOjpMaW5rYWJsZSkpOwogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2Fs
bDo6TmVhcikpOwotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3Nl
bWJsZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwp
LCBOZWFyQ2FsbFB0clRhZyksCisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25OZWFyQ2FsbChN
YWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGNhbGwu
bV9sYWJlbCkpLAogICAgICAgICAgICAgY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6VGFpbCkgPyBOZWFy
Q2FsbE1vZGU6OlRhaWwgOiBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgIH0KIApAQCAtMTkx
LDcgKzE5MSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1h
Y3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoanVtcC5t
X2p1bXAubV9sYWJlbCkpKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBkZWZh
dWx0IFB0clRhZyB2YWx1ZSBvbmNlIHdlJ3ZlIHRhZ2dlZCBhbGwgdGhlIGNsaWVudHMuCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihMYWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5v
UHRyVGFnKQogICAgIHsKICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKE1hY3JvQXNz
ZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQobGFiZWwubV9sYWJl
bCksIHRhZykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzc0LDcgKzM3NzQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRnVuY3Rpb25Q
dHIgcmVhZENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihBc3NlbWJsZXI6
OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSwgQ29kZUVudHJ5UHRyVGFnKTsK
KyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRyKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihBc3NlbWJs
ZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIHZvaWQgcmVwbGFjZVdpdGhWTUhhbHQoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rp
b25TdGFydCkKQEAgLTQ0NDIsMTAgKzQ0NDIsMTMgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAg
ICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSkKICAgICAgICAgICAgIEFzc2VtYmxl
cjo6bGlua1BvaW50ZXIoY29kZSwgY2FsbC5tX2xhYmVsLmxhYmVsQXRPZmZzZXQoUkVQQVRDSF9P
RkZTRVRfQ0FMTF9UT19QT0lOVEVSKSwgZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpKQorICAgICAgICBlbHNl
IGlmIChjYWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkgeworICAgICAgICAgICAgYXNzZXJ0SXNO
b3RUYWdnZWQoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgICAgICBBc3Nl
bWJsZXI6OmxpbmtKdW1wKGNvZGUsIGNhbGwubV9sYWJlbCwgZnVuY3Rpb24uZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFz
c2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAg
ICAgQXNzZW1ibGVyOjpsaW5rQ2FsbChjb2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQ2FjaGVkVGVtcFJlZ2lz
dGVyIG1fZGF0YU1lbW9yeVRlbXBSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODY3LDcgKzg2Nyw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dl
bmUKICNlbmRpZgogICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCAmdm0udG9wQ2FsbEZyYW1lKTsKIAotICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgICAg
ICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhHZXR0ZXJTZXR0ZXJQdHJUYWcsIG5leHRQdHJUYWdJ
RCgpKTsKICAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwgPSBqaXQuY2FsbChjYWxsVGFnKTsKICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25Q
dHIodGhpcy0+YXM8R2V0dGVyU2V0dGVyQWNjZXNzQ2FzZT4oKS5tX2N1c3RvbUFjY2Vzc29yLm9w
YXF1ZSwgY2FsbFRhZykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwCShyZXZpc2lvbiAyMzAx
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZVNuaXBwZXRQ
YXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDEwICs2MSwxMSBAQCBwdWJsaWM6CiAKICAgICAg
ICAgaml0LnNldHVwQXJndW1lbnRzPEZ1bmN0aW9uVHlwZT4oc3RkOjpnZXQ8QXJndW1lbnRzSW5k
ZXg+KG1fYXJndW1lbnRzKS4uLik7CiAKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIG9wZXJh
dGlvbkNhbGwgPSBqaXQuY2FsbChOb1B0clRhZyk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJU
YWcoSklUT3BlcmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwodGFnKTsKICAgICAgICAgYXV0byBm
dW5jdGlvbiA9IG1fZnVuY3Rpb247CiAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRp
b25DYWxsLCBGdW5jdGlvblB0cihmdW5jdGlvbikpOworICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmN0aW9uLCB0YWcpKTsKICAgICAgICAg
fSk7CiAKICAgICAgICAgaml0LnNldHVwUmVzdWx0cyhtX3Jlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjMwMTEx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MzAsMjQgKzE0MzAsMjQgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVC
bG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoYWNjZXNzVHlwZSk7
CiB9CiAKLUpJVEFkZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKQorSklUQWRkSUMqIENvZGVCbG9jazo6YWRkSklUQWRkSUMoQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICByZXR1cm4g
bV9hZGRJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0
aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKIH0KIAotSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklU
TXVsSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCitKSVRNdWxJQyogQ29kZUJsb2NrOjph
ZGRKSVRNdWxJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uKQogewotICAgIHJldHVybiBtX211bElDcy5hZGQoYXJpdGhQcm9maWxlKTsKKyAgICBy
ZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogfQogCi1KSVRT
dWJJQyogQ29kZUJsb2NrOjphZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkK
K0pJVFN1YklDKiBDb2RlQmxvY2s6OmFkZEpJVFN1YklDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9m
aWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fc3ViSUNzLmFk
ZChhcml0aFByb2ZpbGUpOworICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbik7CiB9CiAKLUpJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKQorSklUTmVnSUMqIENvZGVCbG9jazo6YWRkSklUTmVnSUMo
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsK
LSAgICByZXR1cm4gbV9uZWdJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIG1fbmVn
SUNzLmFkZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKIH0KIAogU3RydWN0dXJlU3R1Yklu
Zm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIz
MDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjQ4LDIyICsyNDgsMjIgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0QnlW
YWxJbmZvTWFwKEJ5VmFsSW5mb01hcCYgcmVzdWx0KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQot
ICAgIEpJVEFkZElDKiBhZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBKSVRNdWxJQyog
YWRkSklUTXVsSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTmVnSUMqIGFkZEpJVE5lZ0lDKEFy
aXRoUHJvZmlsZSopOwotICAgIEpJVFN1YklDKiBhZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqKTsK
KyAgICBKSVRBZGRJQyogYWRkSklUQWRkSUMoQXJpdGhQcm9maWxlKiwgSW5zdHJ1Y3Rpb24qKTsK
KyAgICBKSVRNdWxJQyogYWRkSklUTXVsSUMoQXJpdGhQcm9maWxlKiwgSW5zdHJ1Y3Rpb24qKTsK
KyAgICBKSVROZWdJQyogYWRkSklUTmVnSUMoQXJpdGhQcm9maWxlKiwgSW5zdHJ1Y3Rpb24qKTsK
KyAgICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKiwgSW5zdHJ1Y3Rpb24qKTsK
IAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwgSklUQWRkR2VuZXJhdG9yPjo6
dmFsdWU+Ojp0eXBlPgotICAgIEpJVEFkZElDKiBhZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9m
aWxlKSB7IHJldHVybiBhZGRKSVRBZGRJQyhwcm9maWxlKTsgfQorICAgIEpJVEFkZElDKiBhZGRN
YXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIHsg
cmV0dXJuIGFkZEpJVEFkZElDKHByb2ZpbGUsIGluc3RydWN0aW9uKTsgfQogCiAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRNdWxHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+
Ci0gICAgSklUTXVsSUMqIGFkZE1hdGhJQyhBcml0aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJu
IGFkZEpJVE11bElDKHByb2ZpbGUpOyB9CisgICAgSklUTXVsSUMqIGFkZE1hdGhJQyhBcml0aFBy
b2ZpbGUqIHByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikgeyByZXR1cm4gYWRkSklU
TXVsSUMocHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOyB9CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
R2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2Ft
ZTxHZW5lcmF0b3IsIEpJVE5lZ0dlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBKSVROZWdJ
QyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklUTmVnSUMo
cHJvZmlsZSk7IH0KKyAgICBKSVROZWdJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmls
ZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJldHVybiBhZGRKSVROZWdJQyhwcm9maWxl
LCBpbnN0cnVjdGlvbik7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5
cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVyYXRvciwg
SklUU3ViR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVFN1YklDKiBhZGRNYXRoSUMo
QXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlKTsgfQor
ICAgIEpJVFN1YklDKiBhZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlLCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGFkZEpJVFN1YklDKHByb2ZpbGUsIGluc3RydWN0aW9u
KTsgfQogCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKEFjY2Vzc1R5cGUpOwog
ICAgIGF1dG8gc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0K
QEAgLTMxMCw2ICszMTAsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAu
Z2V0KCk7CiAgICAgfQogICAgIAorICAgIHR5cGVkZWYgSlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVj
dGlvbjsKKyAgICB0eXBlZGVmIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNv
biwgSW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3RydWN0aW9uczsKKwogICAgIHN0YXRpYyB2b2lk
IGNsZWFyTExJbnRHZXRCeUlkQ2FjaGUoSW5zdHJ1Y3Rpb24qKTsKIAogICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQpAQCAtMzE4LDkgKzMyMSw2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3RydWN0aW9uKj4ocmV0
dXJuQWRkcmVzcykgLSBpbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIH0KIAotICAgIHR5cGVk
ZWYgSlNDOjpJbnN0cnVjdGlvbiBJbnN0cnVjdGlvbjsKLSAgICB0eXBlZGVmIFBvaXNvbmVkUmVm
Q291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1Y3Rpb24+JiBVbnBhY2tlZEluc3Ry
dWN0aW9uczsKLQogICAgIHVuc2lnbmVkIG51bWJlck9mSW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgpOyB9CiAgICAgUG9pc29uZWRSZWZDb3VudGVkQXJy
YXk8Q29kZUJsb2NrUG9pc29uLCBJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgY29uc3QgUG9pc29uZWRSZWZDb3VudGVkQXJyYXk8Q29k
ZUJsb2NrUG9pc29uLCBJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHJ1Y3Rpb25zOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
MCw3ICsyOTAsNyBAQCB2b2lkIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChTdHJ1CiAg
ICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgIGxpbmtCdWZmZXIu
bGluayhqdW1wLCB0YXJnZXQpOwogCi0gICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRD
b2RlUHRyVGFnLCAiSW5saW5lQWNjZXNzOiBsaW5raW5nIGNvbnN0YW50IGp1bXAiKTsKKyAgICBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLCAiSW5saW5lQWNjZXNzOiBs
aW5raW5nIGNvbnN0YW50IGp1bXAiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTExJbnRDYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xM
SW50Q2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgc3RydWN0
IExMSW50Q2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUgogICAgIHsKICAgICAgICAgY2FsbGVl
LmNsZWFyKCk7CiAgICAgICAgIG1hY2hpbmVDb2RlVGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCk7Ci0gICAgICAgIGNhbGxQdHJUYWcgPSBOb1B0clRhZzsKICAgICAgICAgaWYgKGlzT25M
aXN0KCkpCiAgICAgICAgICAgICByZW1vdmUoKTsKICAgICB9CkBAIC01OSw3ICs1OCw2IEBAIHN0
cnVjdCBMTEludENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1IKICAgICBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+IGNhbGxlZTsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IGxhc3RTZWVuQ2Fs
bGVlOwogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtYWNoaW5lQ29kZVRhcmdldDsKLSAgICBQ
dHJUYWcgY2FsbFB0clRhZyB7IE5vUHRyVGFnIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3Jw
aGljQWNjZXNzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDEw
ICsxOTksMTEgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmVtaXRFeHBsaWNpdAogICAg
ICAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaml0LT5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShsb29rdXBFeGNlcHRpb25IYW5kbGVyKT4oQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZtX3ZtKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwgPSBqaXQtPmNhbGwoTm9QdHJU
YWcpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgbG9va3VwRXhjZXB0aW9u
SGFuZGxlckNhbGwgPSBqaXQtPmNhbGwodGFnKTsKICAgICAgICAgaml0LT5hZGRMaW5rVGFzaygK
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubGluayhsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgbG9va3VwRXhj
ZXB0aW9uSGFuZGxlciwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhsb29rdXBFeGNlcHRpb25IYW5kbGVyQ2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9u
SGFuZGxlciwgdGFnKSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgaml0LT5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKG1fdm0pOwogICAgIH0KQEAgLTUzOCw3ICs1MzksNyBAQCBBY2Nlc3NHZW5l
cmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGp1bXBUb09TUkV4aXRFeGNlcHRpb25IYW5kbGVyLCBvbGRIYW5kbGVyLm5hdGl2ZUNv
ZGUpOwogCiAgICAgICAgICAgICAgICAgSGFuZGxlckluZm8gaGFuZGxlclRvUmVnaXN0ZXIgPSBv
bGRIYW5kbGVyOwotICAgICAgICAgICAgICAgIGhhbmRsZXJUb1JlZ2lzdGVyLm5hdGl2ZUNvZGUg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobWFrZXNoaWZ0Q2F0Y2hIYW5kbGVyLCBOb1B0clRhZyk7
CisgICAgICAgICAgICAgICAgaGFuZGxlclRvUmVnaXN0ZXIubmF0aXZlQ29kZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihtYWtlc2hpZnRDYXRjaEhhbmRsZXIsIE5lYXJKdW1wUHRyVGFnKTsKICAg
ICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5zdGFydCA9IG5ld0V4Y2VwdGlvbkhhbmRs
aW5nQ2FsbFNpdGUuYml0cygpOwogICAgICAgICAgICAgICAgIGhhbmRsZXJUb1JlZ2lzdGVyLmVu
ZCA9IG5ld0V4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUuYml0cygpICsgMTsKICAgICAgICAgICAg
ICAgICBjb2RlQmxvY2stPmFwcGVuZEV4Y2VwdGlvbkhhbmRsZXIoaGFuZGxlclRvUmVnaXN0ZXIp
OwpAQCAtNTY4LDcgKzU2OSw3IEBAIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgUG9seW1vcnBoaWNB
Y2Nlc3MKICAgICAgICAgZGF0YUxvZyhGdWxsQ29kZU9yaWdpbihjb2RlQmxvY2ssIHN0dWJJbmZv
LmNvZGVPcmlnaW4pLCAiOiBHZW5lcmF0aW5nIHBvbHltb3JwaGljIGFjY2VzcyBzdHViIGZvciAi
LCBsaXN0RHVtcChjYXNlcyksICJcbiIpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNv
ZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBO
b1B0clRhZywKKyAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVyLCBOZWFySnVtcFB0clRhZywK
ICAgICAgICAgIiVzIiwgdG9DU3RyaW5nKCJBY2Nlc3Mgc3R1YiBmb3IgIiwgKmNvZGVCbG9jaywg
IiAiLCBzdHViSW5mby5jb2RlT3JpZ2luLCAiIHdpdGggcmV0dXJuIHBvaW50ICIsIHN1Y2Nlc3NM
YWJlbCwgIjogIiwgbGlzdER1bXAoY2FzZXMpKS5kYXRhKCkpOwogCiAgICAgYm9vbCBkb2VzQ2Fs
bHMgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2OSw4ICsz
NzY5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBi
b29sIG5lZWRzU2NyYXRjaEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uID0gJmJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleF07CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAgIGF1dG8g
cmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZTsKICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkOwogICAgIApAQCAtNDQz
NCw4ICs0NDM2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QK
ICAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgSklU
U3ViSUMqIHN1YklDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgp
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CisgICAg
ICAgIEpJVFN1YklDKiBzdWJJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRTdWJJQyhhcml0
aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24g
PSBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViOwogICAgICAgICAKQEAgLTQ1MjMsOCArNDUyNywx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhOZWdhdGUoCiAgICAgfQogICAg
ICAgICAKICAgICBkZWZhdWx0OiB7Ci0gICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9j
aygpLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gbV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXhdOworICAgICAgICBKSVROZWdJQyogbmVnSUMgPSBtX2ppdC5j
b2RlQmxvY2soKS0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiAgICAg
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uQXJpdGhOZWdhdGVPcHRpbWl6
ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5l
Z2F0ZTsKICAgICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hHUFJSZWcgPSB0cnVlOwpAQCAtNDc4OCw4
ICs0Nzk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAg
ICAgICAgYm9vbCBuZWVkc1NjcmF0Y2hGUFJSZWcgPSB0cnVlOwogI2VuZGlmCiAKLSAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgSklUTXVs
SUMqIG11bElDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSk7
CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CisgICAgICAg
IEpJVE11bElDKiBtdWxJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVRNdWxJQyhhcml0aFBy
b2ZpbGUsIGluc3RydWN0aW9uKTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5j
dGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwogICAgICAgICAKQEAgLTk5MDAsNyArOTkwOCw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgbV9qaXQueG9yNjQocG9pc29uU2NyYXRjaCwgc2NyYXRjaCk7CiAjZW5kaWYKLSAg
ICBtX2ppdC5qdW1wKHNjcmF0Y2gsIE5vUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOworICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgdGFn
KTsKICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwogfQogCkBAIC05OTI1LDcgKzk5
MzQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMiA9IHRlbXAyLmdwcigpOwogCiAgICAgICAgIHZhbHVlLnVzZSgpOwot
ICAgICAgICAKKworICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0gbV9qaXQuY29kZUJs
b2NrKCktPnN3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKICAgICAgICAg
YXV0byBub3RJbnQzMiA9IG1faml0LmJyYW5jaElmTm90SW50MzIodmFsdWVSZWdzKTsKICAgICAg
ICAgZW1pdFN3aXRjaEludEp1bXAoZGF0YSwgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgc2NyYXRj
aCwgc2NyYXRjaDIpOwogICAgICAgICBub3RJbnQzMi5saW5rKCZtX2ppdCk7CkBAIC05OTM0LDcg
Kzk5NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZSwg
c2NyYXRjaCwgdmFsdWVSZWdzLCBkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKICAgICAgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycygpOwogCi0gICAgICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgTm9Q
dHJUYWcpOworICAgICAgICBtX2ppdC5qdW1wKHNjcmF0Y2gsIHRhZyk7CiAgICAgICAgIG5vUmVz
dWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTEwMTkyLDEyICsxMDIwMywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
U3dpdGNoU3RyaW5nT25TCiAgICAgICAgIHRvdGFsTGVuZ3RoICs9IHN0cmluZy0+bGVuZ3RoKCk7
CiAgICAgfQogICAgIAorICAgIGF1dG8qIGNvZGVCbG9jayA9IG1faml0LmNvZGVCbG9jaygpOwog
ICAgIGlmICghY2FuRG9CaW5hcnlTd2l0Y2ggfHwgdG90YWxMZW5ndGggPiBPcHRpb25zOjptYXhp
bXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgoKSkgeworICAgICAgICBTdHJpbmdKdW1w
VGFibGUmIHRhYmxlID0gY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dp
dGNoVGFibGVJbmRleCk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQ
dHJUYWcsICZ0YWJsZSk7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIGNhbGxP
cGVyYXRpb24oCiAgICAgICAgICAgICBvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgbV9qaXQuanVtcChzdHJpbmcsIE5v
UHRyVGFnKTsKKyAgICAgICAgbV9qaXQuanVtcChzdHJpbmcsIHRhZyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xMDIzMCwxMiArMTAyNDQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uUwogICAgIGVtaXRCaW5hcnlTd2l0Y2hTdHJpbmdSZWN1
cnNlKAogICAgICAgICBkYXRhLCBjYXNlcywgMCwgMCwgY2FzZXMuc2l6ZSgpLCBzdHJpbmcsIGxl
bmd0aEdQUiwgdGVtcEdQUiwgMCwgZmFsc2UpOwogICAgIAorICAgIFN0cmluZ0p1bXBUYWJsZSYg
dGFibGUgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJs
ZUluZGV4KTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmdGFi
bGUpOworCiAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKICAgICBzaWxlbnRTcGlsbEFsbFJl
Z2lzdGVycyhzdHJpbmcpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5n
LCBzdHJpbmcsIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+c3dpdGNoVGFibGVJbmRleCksIHN0
cmluZyk7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycygpOwogICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7Ci0gICAgbV9qaXQuanVtcChzdHJpbmcsIE5vUHRyVGFnKTsKKyAgICBtX2ppdC5q
dW1wKHN0cmluZywgdGFnKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0
cmluZyhOb2RlKiBub2RlLCBTd2l0Y2hEYXRhKiBkYXRhKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJ
KHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIv
QVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDcgKzM3LDcgQEAg
Ym9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibAogewogICAgIEE2NERPcGNv
ZGUgYXJtNjRPcGNvZGU7CiAKLSAgICB1aW50MzJfdCogY3VycmVudFBDID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgdWludDMy
X3QqIGN1cnJlbnRQQyA9IHJlbW92ZUNvZGVQdHJUYWc8dWludDMyX3QqPihjb2RlUHRyLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogICAgIHNpemVfdCBieXRlQ291bnQgPSBzaXplOwogCiAgICAgd2hp
bGUgKGJ5dGVDb3VudCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODA1LDE0ICsx
ODA1LDE3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAgICAgewot
ICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fZnRsU3RhdGUuZ3JhcGguYmFz
ZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcml0aFByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1fZnRsU3RhdGUuZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVttX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsK
ICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1ZUFkZE9wdGlt
aXplOwogICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
QWRkOwotICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVEFkZEdlbmVyYXRvcj4oYXJpdGhQ
cm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAg
ICAgIGNvbXBpbGVCaW5hcnlNYXRoSUM8SklUQWRkR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIGlu
c3RydWN0aW9uLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KLSAgICB2b2lkIGNvbXBp
bGVVbmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgRnVuY3Rpb25QdHIgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBGdW5jdGlvblB0ciBub25SZXBhdGNoaW5nRnVuY3Rpb24pCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgRnVuYzEsIHR5cGVuYW1lIEZ1
bmMyLAorICAgICAgICB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19mdW5jdGlv
bjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPEZ1bmMxPjo6dHlwZT46OnZhbHVlICYmIHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMj46OnR5cGU+
Ojp2YWx1ZT4+CisgICAgdm9pZCBjb21waWxlVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgRnVuYzEgcmVwYXRjaGluZ0Z1bmN0
aW9uLCBGdW5jMiBub25SZXBhdGNoaW5nRnVuY3Rpb24pCiAgICAgewogICAgICAgICBOb2RlKiBu
b2RlID0gbV9ub2RlOwogCkBAIC0xODM4LDcgKzE4NDEsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAK
ICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPiBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRlPjo6Y3JlYXRlKCk7Ci0gICAgICAg
ICAgICAgICAgSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDID0gaml0LmNvZGVCbG9j
aygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUpOworICAgICAgICAgICAgICAg
IEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
TWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiAgICAgICAgICAg
ICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihKU1ZhbHVlUmVncyhwYXJhbXNb
MF0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNo
KDApKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9IGZhbHNl
OwpAQCAtMTg5Niw4ICsxODk5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShwYXRj
aHBvaW50KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yPgotICAg
IHZvaWQgY29tcGlsZUJpbmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgRnVu
Y3Rpb25QdHIgcmVwYXRjaGluZ0Z1bmN0aW9uLCBGdW5jdGlvblB0ciBub25SZXBhdGNoaW5nRnVu
Y3Rpb24pCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgRnVuYzEs
IHR5cGVuYW1lIEZ1bmMyLAorICAgICAgICB0eXBlbmFtZSA9IHN0ZDo6ZW5hYmxlX2lmX3Q8c3Rk
Ojppc19mdW5jdGlvbjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPEZ1bmMxPjo6dHlwZT46
OnZhbHVlICYmIHN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxG
dW5jMj46OnR5cGU+Ojp2YWx1ZT4+CisgICAgdm9pZCBjb21waWxlQmluYXJ5TWF0aElDKEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIEZ1bmMxIHJl
cGF0Y2hpbmdGdW5jdGlvbiwgRnVuYzIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogICAgIHsKICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKICAgICAgICAgCkBAIC0xOTMxLDcgKzE5MzUsNyBA
QCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAgICAgICAgICAgICBCb3g8TWF0aElDR2VuZXJhdGlv
blN0YXRlPiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBCb3g8TWF0aElDR2VuZXJhdGlvblN0YXRl
Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4q
IG1hdGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9m
aWxlKTsKKyAgICAgICAgICAgICAgICBKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
ID0gaml0LmNvZGVCbG9jaygpLT5hZGRNYXRoSUM8R2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIGlu
c3RydWN0aW9uKTsKICAgICAgICAgICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJh
dG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIo
KSksCiAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpT
VmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5mcFNjcmF0Y2goMCksCiAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCksIElu
dmFsaWRGUFJSZWcpOwpAQCAtMjA2MiwxMCArMjA2NiwxMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKVttX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKICAgICAgICAg
ICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZTsK
ICAgICAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVT
dWI7Ci0gICAgICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJp
dGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7Cisg
ICAgICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVFN1YkdlbmVyYXRvcj4oYXJpdGhQcm9m
aWxlLCBpbnN0cnVjdGlvbiwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rp
b24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjE1NiwxMCArMjE2Miwx
MiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0g
ICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fZnRsU3RhdGUuZ3JhcGgu
YmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcml0aFByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRl
LmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJh
c2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4XTsKICAgICAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3Bl
cmF0aW9uVmFsdWVNdWxPcHRpbWl6ZTsKICAgICAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7Ci0gICAgICAgICAgICBjb21waWxlQmluYXJ5TWF0
aElDPEpJVE11bEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBhdGNoaW5nRnVuY3Rpb24sIG5v
blJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJ
VE11bEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbiwgcmVwYXRjaGluZ0Z1bmN0
aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMjczNywxMCArMjc0NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9u
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSwgbV9ub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkpOwotICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0
bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
KS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
ID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYyk7CisgICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2Vs
aW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemU7CiAgICAgICAgICAgICBhdXRv
IG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwotICAgICAgICAg
ICAgY29tcGlsZVVuYXJ5TWF0aElDPEpJVE5lZ0dlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCByZXBh
dGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CisgICAgICAgICAgICBjb21w
aWxlVW5hcnlNYXRoSUM8SklUTmVnR2VuZXJhdG9yPihhcml0aFByb2ZpbGUsIGluc3RydWN0aW9u
LCByZXBhdGNoaW5nRnVuY3Rpb24sIG5vblJlcGF0Y2hpbmdGdW5jdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSklUU3R1YlJvdXRpbmVTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRl
QWRkcmVzcykKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUFkZHJlc3MpOworICAgICAgICB1aW50cHRyX3QgYWRk
cmVzcyA9IHJlbW92ZUNvZGVQdHJUYWc8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKICAg
ICAgICAgaWYgKCFKSVRTdHViUm91dGluZTo6cGFzc2VzRmlsdGVyKGFkZHJlc3MpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ2
LDggKzM0Niw5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eigKICNl
bHNlCiAgICAgbW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKICNlbmRpZgotICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIo
b3BlcmF0aW9uRXhjZXB0aW9uRnV6eiwgU2xvd1BhdGhQdHJUYWcpKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKLSAgICBjYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUiwgU2xvd1BhdGhQdHJUYWcpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUT3Bl
cmF0aW9uUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRh
Z0NGdW5jdGlvblB0cihvcGVyYXRpb25FeGNlcHRpb25GdXp6LCB0YWcpKSwgR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBjYWxsKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUiwgdGFnKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihi
dWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpyZWdUMCk7
CkBAIC05NDAsOCArOTQxLDkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmRlYnVnQ2FsbChWTSYg
dm0sIAogI2Vsc2UKICNlcnJvciAiSklUIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4i
CiAjZW5kaWYKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGZ1bmN0aW9u
LCBTbG93UGF0aFB0clRhZykpLCBzY3JhdGNoKTsKLSAgICBjYWxsKHNjcmF0Y2gsIFNsb3dQYXRo
UHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRhZywgbmV4
dFB0clRhZ0lEKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIoZnVu
Y3Rpb24sIHRhZykpLCBzY3JhdGNoKTsKKyAgICBjYWxsKHNjcmF0Y2gsIHRhZyk7CiAKICAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWRkcmVzc09mQWN0aXZlTGVuZ3RoKCkp
LCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwg
R1BSSW5mbzo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjksNiArNTI5LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBlbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgeworICAgICAg
ICB0YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgIHB1c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lz
dGVyLCBsaW5rUmVnaXN0ZXIpOwogICAgICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBm
cmFtZVBvaW50ZXJSZWdpc3Rlcik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1
OSw5IEBAIHZvaWQgQ0NhbGxIZWxwZXJzOjplbnN1cmVTaGFkb3dDaGlja2VuUGEKICAgICBsb2Fk
UHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdHUFIpLCBzaGFkb3dQYWNrZXQpOwogICAgIEp1bXAg
b2sgPSBicmFuY2hQdHIoQmVsb3csIHNoYWRvd1BhY2tldCwgVHJ1c3RlZEltbVB0cih2bS5zaGFk
b3dDaGlja2VuKCkubG9nRW5kKCkpKTsKICAgICBzZXR1cEFyZ3VtZW50czxkZWNsdHlwZShvcGVy
YXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZyk+KCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRy
KHRhZ0NGdW5jdGlvblB0cihvcGVyYXRpb25Qcm9jZXNzU2hhZG93Q2hpY2tlbkxvZywgU2xvd1Bh
dGhQdHJUYWcpKSwgc2NyYXRjaDFOb25BcmdHUFIpOwotICAgIGNhbGwoc2NyYXRjaDFOb25BcmdH
UFIsIFNsb3dQYXRoUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0YWdDRnVu
Y3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIHRhZykpLCBzY3JhdGNo
MU5vbkFyZ0dQUik7CisgICAgY2FsbChzY3JhdGNoMU5vbkFyZ0dQUiwgdGFnKTsKICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIodm0uc2hhZG93Q2hpY2tlbigpLmFkZHJlc3NPZkxvZ0N1cnNvcigpKSwg
c2NyYXRjaDFOb25BcmdHUFIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoMU5vbkFyZ0dQ
UiksIHNoYWRvd1BhY2tldCk7CiAgICAgb2subGluayh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTg2
LDggKzU4NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGN1cnJl
bnQgZnJhbWUgYmV5b25kIHRoaXMgcG9pbnQuIE1hc3F1ZXJhZGUgYXMgb3VyCiAgICAgICAgIC8v
IGNhbGxlci4KICNpZiBDUFUoQVJNKSB8fCBDUFUoQVJNNjQpCi0gICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQqKSksIGxpbmtSZWdpc3Rlcik7
CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1l
OjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1JlZ2lzdGVyKTsKICAgICAgICAgc3ViUHRyKFRydXN0
ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSksIG5ld0ZyYW1lU2l6ZUdQUik7CisjaWYgVVNFKFBP
SU5URVJfUFJPRklMSU5HKQorICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgdGVt
cEdQUik7CisgICAgICAgIHVudGFnUHRyKGxpbmtSZWdpc3RlciwgdGVtcEdQUik7CisjZW5kaWYK
ICNlbGlmIENQVShNSVBTKQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIHNpemVvZih2b2lkKikpLCByZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwogICAgICAgICBz
dWJQdHIoVHJ1c3RlZEltbTMyKDIgKiBzaXplb2Yodm9pZCopKSwgbmV3RnJhbWVTaXplR1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
Y3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0Niw4ICs0NDYsMTQgQEAgdm9p
ZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYQogCiAgICAgLy8gV2UgbG9hZCB0
aGUgbGluayByZWdpc3RlciBtYW51YWxseSBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgb25l
CiAjaWYgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KQotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBzaXpl
b2Yodm9pZCopKSwKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1h
Y3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09m
ZnNldCgpKSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtSZWdpc3Rlcik7CisjaWYgVVNF
KFBPSU5URVJfUFJPRklMSU5HKQorICAgIG1faml0LmFkZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgbV9qaXQudW50YWdQdHIoTWFjcm9Bc3NlbWJsZXI6Omxp
bmtSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBt
X2ppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworI2VuZGlm
CisKICNlbGlmIENQVShNSVBTKQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yodm9pZCop
KSwKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldHVybkFkZHJlc3NSZWdpc3Rlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw2ICsyMzgsNyBAQCBwcml2
YXRlOgogCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKIAorICAgICAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih3cml0YWJsZUFkZHIpLCB4Nyk7CiAgICAgICAgIGppdC5hZGRQdHIoeDcsIHgwKTsKIApA
QCAtMjk4LDcgKzI5OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHRvIGFwcGVhciBpbiB0aGUg
Y29uc29sZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVy
LgogICAgICAgICAvLyBUaGUgc2Vjb25kIGlzIHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBj
b2RlIGlzIHJlYWRhYmxlIHdoZW4gdXNpbmcgdGhlCiAgICAgICAgIC8vIGFzeW5jRGlzYXNzZW1i
bHkgb3B0aW9uIGFzIG91ciBjYWxsZXIgd2lsbCBzZXQgb3VyIHBhZ2VzIGV4ZWN1dGUgb25seS4K
LSAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5
KE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRXcml0ZVRodW5rUHRy
VGFnLCAmaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24pOworICAgICAgICByZXR1cm4gbGlu
a0J1ZmZlci5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkodGFnKTsKICAgICB9CiAjZWxz
ZSAvLyBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQog
ICAgIHN0YXRpYyB2b2lkIGdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKG9mZl90IG9mZnNldCwgY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDIzMDExMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSklU
Q29tcGlsYXRpb25FZmZvcnQuaCIKKyNpbmNsdWRlICJQdHJUYWcuaCIKICNpbmNsdWRlIDxzdGRk
ZWYuaD4gLy8gZm9yIHB0cmRpZmZfdAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtOTAsNyArOTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQqIHBlcmZv
cm1KSVRNZW1jcHkodm9pCiAgICAgICAgICAgICAvLyBVc2UgZXhlY3V0ZS1vbmx5IHdyaXRlIHRo
dW5rIGZvciB3cml0ZXMgaW5zaWRlIHRoZSBKSVQgcmVnaW9uLiBUaGlzIGlzIGEgdmFyaWFudCBv
ZgogICAgICAgICAgICAgLy8gbWVtY3B5IHRoYXQgdGFrZXMgYW4gb2Zmc2V0IGludG8gdGhlIEpJ
VCByZWdpb24gYXMgaXRzIGRlc3RpbmF0aW9uIChmaXJzdCkgcGFyYW1ldGVyLgogICAgICAgICAg
ICAgb2ZmX3Qgb2Zmc2V0ID0gKG9mZl90KSgodWludHB0cl90KWRzdCAtIHN0YXJ0T2ZGaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sKTsKLSAgICAgICAgICAgIGppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1
bmN0aW9uKG9mZnNldCwgc3JjLCBuKTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
SklUV3JpdGVUaHVua1B0clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKKyAg
ICAgICAgICAgIHJldGFnQ29kZVB0cihqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbiwgdGFn
LCBDRnVuY3Rpb25QdHJUYWcpKG9mZnNldCwgc3JjLCBuKTsKICAgICAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0OSw4ICs2NDksOSBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRM
aW5raW5nKEpJVENvbXBpCiAgICAgCiAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIuYXBw
ZW5kSXRlbShsYWJlbCgpLCBDb2RlT3JpZ2luKDAsIG51bGxwdHIpKTsKIAorICAgIExhYmVsIGVu
dHJ5TGFiZWwodGhpcyk7CiAgICAgaWYgKG1fZGlzYXNzZW1ibGVyKQotICAgICAgICBtX2Rpc2Fz
c2VtYmxlci0+c2V0U3RhcnRPZkNvZGUobGFiZWwoKSk7CisgICAgICAgIG1fZGlzYXNzZW1ibGVy
LT5zZXRTdGFydE9mQ29kZShlbnRyeUxhYmVsKTsKIAogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxl
IGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCiAgICAgaWYgKHJhbmRvbSgpICYgMSkK
QEAgLTczNSwxNSArNzM2LDMzIEBAIHZvaWQgSklUOjpjb21waWxlV2l0aG91dExpbmtpbmcoSklU
Q29tcGkKICAgICAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCks
IHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgYnJhbmNoVGVzdDMyKFplcm8sIHJldHVy
blZhbHVlR1BSKS5saW5rVG8oYmVnaW5MYWJlbCwgdGhpcyk7CisjaWYgQ1BVKEFSTTY0KSAmJiBV
U0UoUE9JTlRFUl9QUk9GSUxJTkcpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVS
ZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwgbGlua1JlZ2lzdGVyKTsKKyAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxs
RnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgICAgICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJl
Z1QxKTsKKyAgICAgICAgUHRyVGFnIHRlbXBUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKHRlbXBUYWcpLCByZWdU
MSk7CisgICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgc3RvcmVQ
dHIobGlua1JlZ2lzdGVyLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJl
dHVyblBDT2Zmc2V0KCkpKTsKKyNlbmRpZgogICAgICAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENU
SVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikuY29kZSgpKTsKKyAgICAgICAgZW1pdE5ha2VkQ2Fs
bChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZShwdHJU
YWcoSklUVGh1bmtQdHJUYWcsIG1fdm0pLCBOZWFyQ2FsbFB0clRhZykpOworI2lmIENQVShBUk02
NCkgJiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rl
cik7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0ZW1wVGFnKSwgcmVnVDEpOworICAgICAg
ICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEp
OworICAgICAgICB0YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIHN0b3JlUHRy
KGxpbmtSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1
cm5QQ09mZnNldCgpKSk7CisjZW5kaWYKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAg
bV9ieXRlY29kZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsg
Ly8gUmVzZXQgdGhpcywgaW4gb3JkZXIgdG8gZ3VhcmQgaXRzIHVzZSB3aXRoIEFTU0VSVHMuCiAj
ZW5kaWYKIAogICAgICAgICBqdW1wKGJlZ2luTGFiZWwpOwotICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9hcml0eUNoZWNrID0gZW50cnlMYWJlbDsgLy8gTm90IGEgZnVuY3Rpb24uCiAKICAg
ICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkpOwogICAgIApAQCAtNzg0LDIzICs4MDMsMjgg
QEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgICAgIEFTU0VSVChyZWNv
cmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0
Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7IAogICAgICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFi
bGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5zaXplKCkpOwogCi0gICAgICAgICAgICBy
ZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVy
LmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNl
dF0sIE5vUHRyVGFnKTsKKyAgICAgICAgICAgIGF1dG8qIHNpbXBsZUp1bXBUYWJsZSA9IHJlY29y
ZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlOworICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0
clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc2ltcGxlSnVtcFRhYmxlKTsKKyAgICAgICAgICAgIHNp
bXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJl
bHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0sIHRhZyk7CiAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1
bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG9mZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hP
ZmZzZXRzW2pdOwotICAgICAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRh
YmxlLT5jdGlPZmZzZXRzW2pdID0gb2Zmc2V0ID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xh
YmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0sIE5vUHRyVGFnKSA6IHJlY29yZC5qdW1wVGFi
bGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHNpbXBsZUp1
bXBUYWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldAorICAgICAgICAgICAgICAgICAgICA/IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCB0
YWcpCisgICAgICAgICAgICAgICAgICAgIDogc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0Owog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHJlY29y
ZC50eXBlID09IFN3aXRjaFJlY29yZDo6U3RyaW5nKTsKIAogICAgICAgICAgICAgYXV0byogc3Ry
aW5nSnVtcFRhYmxlID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGU7CisgICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBzdHJpbmdKdW1wVGFi
bGUpOwogICAgICAgICAgICAgc3RyaW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0KLSAgICAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
cmVjb3JkLmRlZmF1bHRPZmZzZXRdLCBOb1B0clRhZyk7CisgICAgICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0
T2Zmc2V0XSwgdGFnKTsKIAogICAgICAgICAgICAgZm9yIChhdXRvJiBsb2NhdGlvbiA6IHN0cmlu
Z0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBvZmZzZXQgPSBsb2NhdGlvbi5icmFuY2hPZmZzZXQ7CiAgICAgICAgICAgICAgICAgbG9j
YXRpb24uY3RpT2Zmc2V0ID0gb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCArIG9mZnNldF0sIE5vUHRyVGFn
KQorICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNb
Ynl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCB0YWcpCiAgICAgICAgICAgICAgICAgICAgIDogc3Ry
aW5nSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04
MzIsOSArODU2LDkgQEAgQ29tcGlsYXRpb25SZXN1bHQgSklUOjpsaW5rKCkKICAgICAgICAgICAg
IGlmIChKdW1wKHBhdGNoYWJsZU5vdEluZGV4SnVtcCkuaXNTZXQoKSkKICAgICAgICAgICAgICAg
ICBub3RJbmRleEp1bXAgPSBDb2RlTG9jYXRpb25KdW1wKHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
cGF0Y2hhYmxlTm90SW5kZXhKdW1wKSk7CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGJh
ZFR5cGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFs
Q29tcGlsYXRpb25JbmZvLmJhZFR5cGVKdW1wKSk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBkb25lVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBpbGF0aW9u
SW5mby5kb25lVGFyZ2V0LCBOb1B0clRhZyk7Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBuZXh0SG90UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxh
dGlvbkluZm8ubmV4dEhvdFBhdGhUYXJnZXQsIE5vUHRyVGFnKTsKLSAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZh
bENvbXBpbGF0aW9uSW5mby5zbG93UGF0aFRhcmdldCwgTm9QdHJUYWcpOworICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlW
YWxDb21waWxhdGlvbkluZm8uZG9uZVRhcmdldCk7CisgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBuZXh0SG90UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21w
aWxhdGlvbkluZm8ubmV4dEhvdFBhdGhUYXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd1BhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGls
YXRpb25JbmZvLnNsb3dQYXRoVGFyZ2V0KTsKICAgICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwg
cmV0dXJuQWRkcmVzcyA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlvbklu
Zm8ucmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgICAgICpieVZhbENvbXBpbGF0aW9uSW5mby5i
eVZhbEluZm8gPSBCeVZhbEluZm8oCkBAIC04NjUsOSArODg5LDcgQEAgQ29tcGlsYXRpb25SZXN1
bHQgSklUOjpsaW5rKCkKICAgICB9CiAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAoaml0
Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdp
dGhBcml0eUNoZWNrOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpCi0gICAgICAgIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2FyaXR5Q2hlY2ssIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1f
YXJpdHlDaGVjaywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOwogCiAgICAgaWYgKE9w
dGlvbnM6OmR1bXBEaXNhc3NlbWJseSgpKSB7CiAgICAgICAgIG1fZGlzYXNzZW1ibGVyLT5kdW1w
KHBhdGNoQnVmZmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxNCw3ICs1MTQsNyBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiwgCiB2b2lkIEpJVDo6ZW1pdF9v
cF9uZWdhdGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVROZWdJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAg
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlD
KTsKICAgICBlbWl0TWF0aElDRmFzdChuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7CiB9CkBAIC02
NjIsNyArNjYyLDcgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgT3BlcmFuZFR5cGVzIGdldE9wZQog
dm9pZCBKSVQ6OmVtaXRfb3BfYWRkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yUEMoY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRBZGRJQyogYWRkSUMg
PSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBh
ZGRJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3QoYWRkSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGQpOwogfQpAQCAtNzA1LDEx
ICs3MDUsMTIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPAogCiAg
ICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhp
cywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKICAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUp
IHsKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1cnJlbnRJbnN0
cnVjdGlvbik7CiAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKICAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1
bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywg
cmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJU
YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKICAg
ICB9IGVsc2UKICAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoSnVtcHMpOwogCkBAIC03NzgsMTEgKzc3OSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zh
c3QoSklUQmluYXJ5TWF0aElDCiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9w
MSwgbGVmdFJlZ3MpOwogICAgICAgICBlbHNlIGlmIChyaWdodE9wZXJhbmQuaXNDb25zdCgpKQog
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7CisgICAg
ICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9m
aWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygp
KQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
Tm9QdHJUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0
YWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVk
RnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRh
ZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7CiAgICAgfSBlbHNlCiAgICAgICAg
IGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKIApAQCAt
ODE3LDE0ICs4MTksMTUgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElD
PAogICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7CiAjZW5kaWYKIAorICAgIFB0clRh
ZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIEFy
aXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKICAgICBp
ZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBpZiAo
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRjaCkKLSAgICAgICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihwcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fRUpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBzcmNS
ZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
YXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQocHJvZmlsZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgdGFnLCByZXN1bHRS
ZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwogICAgIH0gZWxzZQotICAgICAgICBtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVp
bnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgTm9Q
dHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VKTWljPihyZXBhdGNoRnVu
Y3Rpb24pLCB0YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7
CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFi
ZWwoKTsKQEAgLTg4MywxNCArODg2LDE1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRC
aW5hcnlNYXRoSUMKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAK
KyAgICBQdHJUYWcgY2FsbFRhZyA9IHB0clRhZyhNYXRoSUNQdHJUYWcsIGN1cnJlbnRJbnN0cnVj
dGlvbik7CiAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOwogICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7
CiAgICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2hvdWxkU2xvd1BhdGhSZXBhdGNo
KQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHBy
b2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgICAgICBtYXRoSUNHZW5l
cmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lz
ZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCBj
YWxsVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1h
dGhJQykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
Tm9QdHJUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgY2FsbFRhZywgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRy
KG1hdGhJQykpOworICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1p
Yz4ocmVwYXRjaEZ1bmN0aW9uKSwgY2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKIAogI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQogICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOwpAQCAtOTc3LDcgKzk4MSw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2RpdihJbnN0cnVjdGlvbiogY3VycmUKIHZvaWQgSklUOjplbWl0X29w
X211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11
bElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2RlQmxvY2stPmFk
ZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwogICAgIGVtaXRN
YXRoSUNGYXN0KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJv
ZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKIH0KQEAgLTk5Myw3ICs5OTcsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbXVsKEluc3RydWN0aW9uKiBjCiB2b2lkIEpJVDo6ZW1pdF9vcF9zdWIo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhh
cml0aFByb2ZpbGUpOworICAgIEpJVFN1YklDKiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRT
dWJJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgbV9pbnN0cnVjdGlv
blRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHN1YklDKTsKICAgICBlbWl0TWF0aElD
RmFzdChzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVk
LCBvcGVyYXRpb25WYWx1ZVN1Yik7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03MSwxMyArNzEsNyBAQCBKU1ZhbHVlIEpJ
VENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQcm90b0NhCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoKnZtKTsKICAgICB2b2lkKiBlbnRyeUFkZHJlc3M7Ci0gICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPigqdm0sIHByb3RvQ2Fs
bEZyYW1lLT5jYWxsZWUoKSk7Ci0KLSAgICBpZiAoIWZ1bmN0aW9uIHx8ICFwcm90b0NhbGxGcmFt
ZS0+bmVlZEFyaXR5Q2hlY2soKSkgewotICAgICAgICBBU1NFUlQoIXByb3RvQ2FsbEZyYW1lLT5u
ZWVkQXJpdHlDaGVjaygpKTsKLSAgICAgICAgZW50cnlBZGRyZXNzID0gZXhlY3V0YWJsZUFkZHJl
c3MoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZW50cnlBZGRyZXNzID0gYWRkcmVzc0ZvckNhbGwo
TXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgZW50cnlBZGRyZXNzID0g
YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvSmF2YVNjcmlwdChlbnRy
eUFkZHJlc3MsIHZtLCBwcm90b0NhbGxGcmFtZSkpOwogICAgIHJldHVybiBzY29wZS5leGNlcHRp
b24oKSA/IGpzTnVsbCgpIDogcmVzdWx0OwogfQpAQCAtMTI3LDcgKzEyMSwxMiBAQCBKSVRDb2Rl
V2l0aENvZGVSZWY6On5KSVRDb2RlV2l0aENvZGVSZWYoCiB2b2lkKiBKSVRDb2RlV2l0aENvZGVS
ZWY6OmV4ZWN1dGFibGVBZGRyZXNzQXRPZmZzZXQoc2l6ZV90IG9mZnNldCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVChtX3JlZik7Ci0gICAgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzczxjaGFyKj4oKSArIG9mZnNldDsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9yZWYuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgaWYgKCFvZmZz
ZXQpCisgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKwor
ICAgIGNoYXIqIGV4ZWN1dGFibGVBZGRyZXNzID0gdW50YWdDb2RlUHRyPGNoYXIqPihtX3JlZi5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5UHRyVGFnKTsKKyAgICByZXR1cm4g
dGFnQ29kZVB0cihleGVjdXRhYmxlQWRkcmVzcyArIG9mZnNldCwgQ29kZUVudHJ5UHRyVGFnKTsK
IH0KIAogdm9pZCogSklUQ29kZVdpdGhDb2RlUmVmOjpkYXRhQWRkcmVzc0F0T2Zmc2V0KHNpemVf
dCBvZmZzZXQpCkBAIC0yMTMsMTAgKzIxMiwxNyBAQCB2b2lkIE5hdGl2ZUpJVENvZGU6OmluaXRp
YWxpemVDb2RlUmVmKENvCiAgICAgbV9yZWYgPSByZWY7CiB9CiAKLUpJVENvZGU6OkNvZGVQdHIg
TmF0aXZlSklUQ29kZTo6YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja01vZGUpCitKSVRDb2RlOjpD
b2RlUHRyIE5hdGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFyaXR5
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9yZWYpOwotICAgIHJldHVybiBtX3JlZi5jb2Rl
KCk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZWYpOworICAgIHN3aXRjaCAoYXJpdHkpIHsKKyAg
ICBjYXNlIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDoKKyAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUo
KTsKKyAgICBjYXNlIE11c3RDaGVja0FyaXR5OgorICAgICAgICByZXR1cm4gbV9yZWYucmV0YWdn
ZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDb2Rl
UHRyKCk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODYs
NiArODYsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0qIHZtLCBFeGVjU3RhdGUqIGNhCiAgICAg
CiAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNhbGxGcmFtZSkgPCBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pih2bS0+dG9wRW50cnlGcmFtZSkpOwogCisgICAgYXNzZXJ0SXNUYWdn
ZWRXaXRoKGNhdGNoUm91dGluZSwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CiAgICAgdm0tPmNh
bGxGcmFtZUZvckNhdGNoID0gY2FsbEZyYW1lOwogICAgIHZtLT50YXJnZXRNYWNoaW5lUENGb3JU
aHJvdyA9IGNhdGNoUm91dGluZTsKICAgICB2bS0+dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93
ID0gY2F0Y2hQQ0ZvckludGVycHJldGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRNYXRoSUMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE1hdGhJQy5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE1hdGhJQy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw5IEBAIHRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3JUeXBlLCBib29sKCoKIGNsYXNzIEpJVE1hdGhJQyB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgSklUTWF0aElDKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQorICAgIEpJVE1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgICAgICA6IG1fYXJpdGhQcm9maWxlKGFy
aXRoUHJvZmlsZSkKKyAgICAgICAgLCBtX2luc3RydWN0aW9uKGluc3RydWN0aW9uKQogICAgIHsK
ICAgICB9CiAKQEAgLTEzOSwxMSArMTQwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIG1faW5saW5lU3RhcnQuZGF0YUxvY2F0aW9uKCksIGppdC5t
X2Fzc2VtYmxlci5idWZmZXIoKS5jb2RlU2l6ZSgpLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
LCBuZWVkc0JyYW5jaENvbXBhY3Rpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlu
a0J1ZmZlci5pc1ZhbGlkKCkpOwogICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsKG1fY29kZS5jb2RlKCkpKTsKLSAgICAgICAgICAgIEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGxpbmtpbmcgY29uc3RhbnQganVt
cCB0byBvdXQgb2YgbGluZSBzdHViIik7CisgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIE5lYXJKdW1wUHRyVGFnLCAiSklUTWF0aElDOiBsaW5raW5nIGNvbnN0YW50IGp1bXAg
dG8gb3V0IG9mIGxpbmUgc3R1YiIpOwogICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gcmVwbGFj
ZUNhbGwgPSBbJl0gKCkgewotICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgY2FsbFJlcGxhY2VtZW50KTsKKyAgICAg
ICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBtX2luc3RydWN0aW9uKTsK
KyAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHNsb3dQYXRo
Q2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGNhbGxSZXBsYWNlbWVudCwgdGFnKSk7CiAgICAg
ICAgIH07CiAKICAgICAgICAgYm9vbCBzaG91bGRFbWl0UHJvZmlsaW5nID0gIUpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSk7CkBAIC0xNjYsNyArMTY4LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvRG9uZSwg
ZG9uZUxvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIG1fY29kZSA9IEZJTkFMSVpF
X0NPREVfRk9SKAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrLCBsaW5rQnVmZmVy
LCBOb1B0clRhZywgIkpJVE1hdGhJQzogZ2VuZXJhdGluZyBvdXQgb2YgbGluZSBmYXN0IElDIHNu
aXBwZXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwg
TmVhckp1bXBQdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJ
QyBzbmlwcGV0Iik7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFnZW5lcmF0aW9uU3RhdGUu
c2hvdWxkU2xvd1BhdGhSZXBhdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
b24ndCBuZWVkIHRvIHJlZ2VuZXJhdGUsIHNvIHdlIGNhbiB3aXJlIHRoZSBzbG93IHBhdGggY2Fs
bApAQCAtMjA4LDcgKzIxMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGlu
ayhzbG93UGF0aEp1bXBMaXN0LCBzbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiAKICAgICAgICAg
ICAgIG1fY29kZSA9IEZJTkFMSVpFX0NPREVfRk9SKAotICAgICAgICAgICAgICAgIGNvZGVCbG9j
aywgbGlua0J1ZmZlciwgTm9QdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxp
bmUgSUMgc25pcHBldCIpOworICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwg
TmVhckp1bXBQdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgSUMgc25p
cHBldCIpOwogICAgICAgICB9CiAKICAgICAgICAgbGlua0p1bXBUb091dE9mTGluZVNuaXBwZXQo
KTsKQEAgLTIxNiw3ICsyMTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZpbmFsaXplSW5saW5l
Q29kZShjb25zdCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIHN0YXRlLCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQogICAgIHsKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc3RhdGUuZmFzdFBhdGhTdGFydCwgTm9QdHJUYWcpOworICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5mYXN0
UGF0aFN0YXJ0LCBOZWFySnVtcFB0clRhZyk7CiAgICAgICAgIG1faW5saW5lU3RhcnQgPSBzdGFy
dDsKIAogICAgICAgICBtX2lubGluZVNpemUgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJl
dHdlZW5Db2RlUHRyKApAQCAtMjI2LDcgKzIyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9kZWx0
YUZyb21TdGFydFRvU2xvd1BhdGhDYWxsTG9jYXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVy
ZW5jZUJldHdlZW5Db2RlUHRyKAogICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRp
b25PZihzdGF0ZS5zbG93UGF0aENhbGwpKTsKICAgICAgICAgbV9kZWx0YUZyb21TdGFydFRvU2xv
d1BhdGhTdGFydCA9IE1hY3JvQXNzZW1ibGVyOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0g
ICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHN0YXRlLnNsb3dQYXRoU3Rh
cnQsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgICAgICAgICBzdGFydCwgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHN0YXRlLnNsb3dQYXRoU3RhcnQsIE5vUHRyVGFnKSk7CiAgICAgfQogCiAgICAgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2FyaXRoUHJvZmlsZTsg
fQpAQCAtMjQzLDYgKzI0NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgQXJpdGhQcm9maWxl
KiBtX2FyaXRoUHJvZmlsZTsKKyAgICBJbnN0cnVjdGlvbiogbV9pbnN0cnVjdGlvbjsKICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwogICAgIENvZGVMb2NhdGlvbkxhYmVsIG1faW5s
aW5lU3RhcnQ7CiAgICAgaW50MzJfdCBtX2lubGluZVNpemU7CkBAIC0yNTksOCArMjYyLDggQEAg
aW5saW5lIGJvb2wgaXNCaW5hcnlQcm9maWxlRW1wdHkoQXJpdGhQcgogdGVtcGxhdGUgPHR5cGVu
YW1lIEdlbmVyYXRvclR5cGU+CiBjbGFzcyBKSVRCaW5hcnlNYXRoSUMgOiBwdWJsaWMgSklUTWF0
aElDPEdlbmVyYXRvclR5cGUsIGlzQmluYXJ5UHJvZmlsZUVtcHR5PiB7CiBwdWJsaWM6Ci0gICAg
SklUQmluYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlKQotICAgICAgICA6IEpJ
VE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc0JpbmFyeVByb2ZpbGVFbXB0eT4oYXJpdGhQcm9maWxl
KQorICAgIEpJVEJpbmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQorICAgICAgICA6IEpJVE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBp
c0JpbmFyeVByb2ZpbGVFbXB0eT4oYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlvbikKICAgICB7CiAg
ICAgfQogfTsKQEAgLTI3Nyw4ICsyODAsOCBAQCBpbmxpbmUgYm9vbCBpc1VuYXJ5UHJvZmlsZUVt
cHR5KEFyaXRoUHJvCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yVHlwZT4KIGNsYXNzIEpJ
VFVuYXJ5TWF0aElDIDogcHVibGljIEpJVE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc1VuYXJ5UHJv
ZmlsZUVtcHR5PiB7CiBwdWJsaWM6Ci0gICAgSklUVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUpCi0gICAgICAgIDogSklUTWF0aElDPEdlbmVyYXRvclR5cGUsIGlzVW5hcnlQ
cm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSkKKyAgICBKSVRVbmFyeU1hdGhJQyhBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQorICAgICAgICA6IEpJ
VE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc1VuYXJ5UHJvZmlsZUVtcHR5Pihhcml0aFByb2ZpbGUs
IGluc3RydWN0aW9uKQogICAgIHsKICAgICB9CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQzLDEzICsxMDQzLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbElu
Zm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9u
ZSkpOwotICAgIAorCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnZhbHVlKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbElu
Zm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5l
LT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVM
b2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rp
b25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYywgU2xvd1BhdGhQdHJUYWcp
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlHZW5lcmljLCBOb1B0clRhZykpOwogfQogCiB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lv
biAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X2ltbShJbnN0cnVjdGlvbgogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5v
UHRyVGFnKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJU
YWcsIGp1bXBUYWJsZSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNjk3LDcgKzY5Nyw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW8KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAganVtcChy
ZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIHB0clRh
ZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTcxMiw3
ICs3MTIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFi
bGVJbmRleCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworICAgIGp1bXAo
cmV0dXJuVmFsdWVHUFIsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywganVtcFRhYmxlKSk7CiB9
CiAKIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCkBAIC0xMTcwLDExICsxMTcwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXIKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAg
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBo
YXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3Ry
aW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5R2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBQdHJUYWcgdGFn
ID0gcHRyVGFnKEhhc1Byb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eUdlbmVyaWMsIHRhZykpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMTIzMyw3ICsx
MjM0LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcgogICAgIAog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAsIHJlZ1Qx
LCBieVZhbEluZm8pOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSGFzUHJvcGVydHlQdHJUYWcs
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCB0YWcsIGRzdCwgcmVnVDAsIHJlZ1QxLCBi
eVZhbEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKICAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJQb2x5bW9ycGhp
Y0FjY2Vzcy5oIgogI2luY2x1ZGUgIlByb2dyYW1Db2RlQmxvY2suaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWUuaCIKKyNpbmNsdWRlICJQdHJUYWcuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3Qu
aCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBA
IC03MjksOCArNzMwLDEwIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9w
dGkKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAg
ICAgaWYgKHRyeVB1dEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKSA9PSBPcHRpbWl6
YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRp
bWl6ZS4KKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZleGVjLT5j
b2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4XTsKICAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAgICAgUHRyVGFnIHRh
ZyA9IHB0clRhZyhQdXRQcm9wZXJ0eVB0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAg
ICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVS
Tl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCB0YWcpKTsK
ICAgICB9CiAgICAgcHV0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBi
eVZhbEluZm8pOwogfQpAQCAtODEzLDggKzgxNiwxMCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VW
YWx1ZSk7CiAgICAgaWYgKHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZXhlYywgb2JqZWN0LCBz
dWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1Mp
KSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVy
IHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9ICZleGVjLT5jb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4XTsKICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJO
X0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsK
KyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhQdXRQcm9wZXJ0eVB0clRhZywgY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljLCB0YWcpKTsKICAgICB9CiAKICAgICBkaXJlY3RQdXRCeVZhbChleGVj
LCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CkBAIC04NjEsNyArODY2LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYQogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBo
YW5kbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxs
TGlua0luZm8qIGNhbGxMaW5rSW5mbykKK3N0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8sIFB0clRhZyByZXN1bHRUYWcpCiB7CiAgICAgRXhlY1N0YXRlKiBl
eGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKQEAgLTg4MCwyMCArODg1LDIyIEBAIHN0YXRpYyBTbG93UGF0aFJldHVyblR5cGUgaGFuZGxl
SG9zdENhbGwKICAgICAgICAgICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlZShhc09iamVjdChjYWxs
ZWUpKTsKICAgICAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVj
b2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAgICAgICAgICAgICBp
ZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAg
ICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xv
d1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRh
YmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PihLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdldEhvc3RD
YWxsUmV0dXJuVmFsdWUpLAorICAgICAgICAgICAgICAgIHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4o
Z2V0SG9zdENhbGxSZXR1cm5WYWx1ZSwgcmVzdWx0VGFnKSwKICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6
OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAK
ICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlOjpOb25lKTsKICAgICAgICAgdGhy
b3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFGdW5jdGlvbkVycm9yKGV4ZWMsIGNh
bGxlZSkpOworICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcs
IHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKKyAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKICAgICB9CiAKQEAgLTkwOSwxOCArOTE2LDIwIEBAIHN0YXRpYyBTbG93UGF0aFJl
dHVyblR5cGUgaGFuZGxlSG9zdENhbGwKICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFz
T2JqZWN0KGNhbGxlZSkpOwogICAgICAgICB2bS0+aG9zdENhbGxSZXR1cm5WYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihleGVjQ2FsbGVlKSk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgIFB0
clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoYml0d2lzZV9j
YXN0PHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGFnQ0Z1bmN0
aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJldHVyblZhbHVlLCByZXN1bHRUYWcpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJU
KGNvbnN0cnVjdFR5cGUgPT0gQ29uc3RydWN0VHlwZTo6Tm9uZSk7CiAgICAgdGhyb3dFeGNlcHRp
b24oZXhlYywgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGNhbGxlZSkp
OworICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgdm0tPmdl
dENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwKICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CiB9CiAKQEAgLTkzMCw2ICs5
MzksNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSgqdm0pOwogCisgICAgUHRyVGFnIGxpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhPcGVyYXRp
b25MaW5rQ2FsbFB0clRhZywgdm0pOwogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9
IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAgICAgCkBAIC05NDUsMTIgKzk1NSwxMyBAQCBTbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAgICAgICBpZiAoIWNh
bGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNl
dFNlZW4oKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBsaW5rRm9yKGV4ZWND
YWxsZWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIp
OworICAgICAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgbnVs
bHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0ciwgQ29kZUVudHJ5UHRyVGFnKTsKIAotICAg
ICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxs
TW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAg
IHZvaWQqIGxpbmtlZFRhcmdldCA9IHJldGFnQ29kZVB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIENvZGVFbnRyeVB0clRhZywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQobGlua2VkVGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNl
KCk7Ci0gICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1Zh
bHVlLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0Nh
bGxlZSwgY2FsbGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvLCBsaW5rZWRUYXJnZXRUYWcpOwogICAg
IH0KIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwpAQCAtOTU5LDQwICs5NzAsNDYgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIFB0clRhZyBjb2Rl
VGFnID0gTm9QdHJUYWc7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsK
ICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENo
ZWNrQXJpdHkpOworICAgICAgICBjb2RlVGFnID0gQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWc7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
IAorICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CisgICAgICAgICAgICB2b2lkKiB0aHJv
d1RhcmdldCA9IHJldGFnQ29kZVB0cih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCB0aHVua1Rh
ZywgbGlua2VkVGFyZ2V0VGFnKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQodGhy
b3dUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworICAgICAg
ICB9OworCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0cnVjdCkg
ewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlTm90
QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7Ci0gICAgICAgICAgICByZXR1cm4gZW5j
b2RlUmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0g
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Cisg
ICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKICAgICAgICAgfQogCiAg
ICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBleGVjQ2FsbGVlLT5hZGRyZXNzT2ZD
b2RlQmxvY2soKTsKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxl
LT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4oKnZtLCBjYWxsZWUsIHNj
b3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQodGhy
b3dTY29wZS5leGNlcHRpb24oKSA9PSByZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbio+KGVycm9y
KSk7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3Vs
dCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9
CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUaHJvd0V4Y2Vw
dGlvbigpOwogICAgICAgICBjb2RlQmxvY2sgPSAqY29kZUJsb2NrU2xvdDsKICAgICAgICAgQXJp
dHlDaGVja01vZGUgYXJpdHk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgaWYgKGV4ZWND
YWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygp
KSB7CiAgICAgICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OwotICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb2RlVGFnID0gQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWc7CisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsK
KyAgICAgICAgICAgIGNvZGVUYWcgPSBDb2RlRW50cnlQdHJUYWc7CisgICAgICAgIH0KICAgICAg
ICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0
eSk7CiAgICAgfQogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBj
YWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCi0gICAgICAgIGxpbmtGb3IoZXhlY0Nh
bGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgIAot
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6
OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIGxpbmtGb3Io
ZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUsIGNvZGVQdHIsIGNv
ZGVUYWcpOworCisgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKGNvZGVU
YWcsIGxpbmtlZFRhcmdldFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1
c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0RpcmVjdENhbGwoRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgSlNGdW5jdGlvbiogY2FsbGVlKQpAQCAtMTAyNSw3ICsxMDQyLDcgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtEaXJlY3RDYQogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKICAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOworICAgICAgICBjb2Rl
UHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0
YWdnZWQoQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIE5lYXJDYWxsUHRyVGFnKTsKICAg
ICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAtMTAz
NSwyMCArMTA1MiwxOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0RpcmVjdENh
CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlRfVU5VU0VEKHRocm93U2NvcGUsIHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkgPT0gcmVpbnRlcnByZXRfY2FzdDxFeGNlcHRpb24qPihlcnJvcikpOwogICAg
ICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFyaXR5Q2hlY2tN
b2RlIGFyaXR5OwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudFN0YWNrU2xvdHMgPSBjYWxsTGlu
a0luZm8tPm1heE51bUFyZ3VtZW50cygpOwogICAgICAgICBpZiAoYXJndW1lbnRTdGFja1Nsb3Rz
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpCi0gICAg
ICAgICAgICBhcml0eSA9IE11c3RDaGVja0FyaXR5OworICAgICAgICAgICAgY29kZVB0ciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSkucmV0
YWdnZWQoQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIE5lYXJDYWxsUHRyVGFnKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7Ci0g
ICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwg
YXJpdHkpOworICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBBcml0eUNoZWNrTm90UmVxdWlyZWQpLnJldGFnZ2VkKENvZGVFbnRyeVB0
clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgIH0KICAgICAKICAgICBsaW5rRGlyZWN0Rm9yKGV4
ZWMsICpjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY29kZVB0cik7CiB9CiAKIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGhGdW5jdGlvbigKLSAgICBFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCkKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgUHRyVGFnIHJlc3VsdFRh
ZykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwog
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTA2MywxMCArMTA3OCwxMCBAQCBpbmxpbmUg
U2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgICAgIGlmIChqc0R5bmFtaWND
YXN0PEludGVybmFsRnVuY3Rpb24qPigqdm0sIGNhbGxlZUFzVmFsdWUpKSB7CiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0
aW9uVHJhbXBvbGluZUZvcihraW5kKTsKICAgICAgICAgICAgIEFTU0VSVCghIWNvZGVQdHIpOwot
ICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBD
YWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAg
ICAgIHJldHVybiBlbmNvZGVSZXN1bHQoY29kZVB0ci5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcs
IHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFt
ZSA6IEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwotICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVlQXNW
YWx1ZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWND
YWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5rSW5mbywgcmVzdWx0VGFnKTsKICAgICB9CiAg
ICAgCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKQEAgLTEwNzcsOCArMTA5Miw5IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGgKIAogICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBm
dW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5
OjpDYW5ub3RDb25zdHJ1Y3QpIHsKICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGV4ZWMsIGZ1bmN0aW9uKSk7Cisg
ICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4
Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4
ZWN1dGFibGVBZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CiAgICAgICAgIH0KIApAQCAtMTA4NiwyMSArMTEwMiwyNSBAQCBp
bmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHZpcnR1YWxGb3JXaXRoCiAgICAgICAgIEpTT2JqZWN0
KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlv
bkV4ZWN1dGFibGU+KCp2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7
CiAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQodGhyb3dTY29wZS5leGNlcHRpb24oKSA9PSByZWlu
dGVycHJldF9jYXN0PEV4Y2VwdGlvbio+KGVycm9yKSk7CiAgICAgICAgIGlmIChlcnJvcikgewor
ICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwg
dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgIHJl
dHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5l
eGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIGtpbmQsIE11c3RDaGVja0FyaXR5
KS5yZXRhZ2dlZChDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgcmVzdWx0VGFnKS5leGVj
dXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlu
a0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2Vl
cFRoZUZyYW1lKSk7CiB9CiAKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbykKIHsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIEFTU0VSVChjYWxs
TGlua0luZm8tPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsKTsKICAgICBKU0Nl
bGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwotICAgIFNsb3dQYXRoUmV0dXJuVHlwZSByZXN1bHQg
PSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOworICAgIFB0clRhZyByZXN1bHRUYWcgPSBwdHJUYWcoT3BlcmF0aW9u
TGlua1BvbHltb3JwaGljQ2FsbFB0clRhZywgdm0pOworICAgIFNsb3dQYXRoUmV0dXJuVHlwZSBy
ZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywg
Y2FsbGVlQXNGdW5jdGlvbkNlbGwsIHJlc3VsdFRhZyk7CiAKICAgICBsaW5rUG9seW1vcnBoaWND
YWxsKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENhbGxWYXJpYW50KGNhbGxlZUFzRnVuY3Rp
b25DZWxsKSk7CiAgICAgCkBAIC0xMTA5LDggKzExMjksMTEgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogCiBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvKQogeworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNh
bGxlckZyYW1lKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQ7Ci0gICAgcmV0dXJuIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbElnbm9yZWQp
OworICAgIFB0clRhZyByZXN1bHRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJU
YWcsIHZtKTsKKyAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBj
YWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCwgcmVzdWx0VGFnKTsKIH0K
IAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGFyZUxlc3MoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KQpAQCAtMTc2MSw3ICsxNzg0LDkgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRl
KiBleGVjLAogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAg
ICAgIGlmIChpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIGlmIChhc1N0cmlu
ZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkgewotICAgICAgICAgICAgICAgIGN0aVBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVyYXRpb25H
ZXRCeVZhbFN0cmluZykpOworICAgICAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSAmZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2J5VmFsSW5mby0+
Ynl0ZWNvZGVJbmRleF07CisgICAgICAgICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhHZXRQ
cm9wZXJ0eVB0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgICAgICBjdGlQ
YXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0
aW9uR2V0QnlWYWxTdHJpbmcsIHRhZykpOwogICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2Uo
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgo
ZXhlYywgaSk7CiAgICAgICAgICAgICB9CkBAIC0xODI5LDcgKzE4NTQsNyBAQCBzdGF0aWMgT3B0
aW1pemF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0CiAgICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlW
YWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNv
ZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5
VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJy
YXlNb2RlKTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmdm0sIGNvZGVC
bG9jaywgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAg
ICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTAxLDcgKzE5MjYsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgaWYgKHRyeUdldEJ5VmFsT3B0aW1p
emUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
LSAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgICAgICBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gJmV4ZWMtPmNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVti
eVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEdl
dFByb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0
QnlWYWxHZW5lcmljLCB0YWcpKTsKICAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGdldEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFk
ZHJlc3MpKTsKQEAgLTE5NDEsNyArMTk2OCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uSGEKICAgICAgICAgaWYgKCsrYnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49
IDEwCiAgICAgICAgICAgICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50
ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygp
KSB7CiAgICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRV
Uk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVy
aWMpKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmZXhl
Yy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpW2J5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleF07
CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEhhc1Byb3BlcnR5UHRyVGFnLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYywgdGFnKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTIwMDEsNyArMjAzMCwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkdlCiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICBpZiAoIWlzSlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAg
QVNTRVJUKGV4ZWMtPmJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICAgICAgY3RpUGF0Y2hDYWxs
QnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVu
Y3Rpb25QdHIoYnlWYWxJbmZvLT5zdHViUm91dGluZSA/IG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJp
YyA6IG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpKTsKKyAgICAgICAgICAgIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmZXhlYy0+Y29kZUJsb2NrKCktPmluc3RydWN0aW9ucygp
W2J5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgICAgICBhdXRvIGdldEJ5VmFsRnVu
Y3Rpb24gPSBieVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmlj
IDogb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoR2V0UHJvcGVydHlQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJO
X0FERFJFU1MpLCBGdW5jdGlvblB0cihnZXRCeVZhbEZ1bmN0aW9uLCB0YWcpKTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGJhc2VWYWx1ZS5yZXF1aXJlT2JqZWN0Q29lcmNpYmxl
KGV4ZWMpOwpAQCAtMjE1MCw2ICsyMTgyLDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Td2l0Y2hDaGFyVwogICAgICAgICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aUZvclZhbHVl
KCgqdmFsdWUpWzBdKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KIAorICAgIGFzc2VydElz
VGFnZ2VkV2l0aChyZXN1bHQsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJmp1bXBUYWJsZSkp
OwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQpOwogfQogCkBAIC0y
MTY4LDYgKzIyMDEsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaEltbVdp
CiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZShzdGF0aWNfY2FzdDxpbnQz
Ml90PihrZXkuYXNEb3VibGUoKSkpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgZWxzZQogICAg
ICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgIGFzc2VydElzVGFnZ2VkV2l0aChyZXN1bHQsIHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywg
Jmp1bXBUYWJsZSkpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihyZXN1bHQp
OwogfQogCkBAIC0yMTg3LDYgKzIyMjEsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blN3aXRjaFN0cmluCiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlE
ZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVz
dWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsKICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIzMDEx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmUKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwogICAgIEp1bXBM
aXN0IGZhaWx1cmVzOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgZmFpbHVyZXMu
YXBwZW5kKGppdC5icmFuY2hTdHJ1Y3R1cmUoCiAgICAgICAgIE5vdEVxdWFsLCAKICAgICAgICAg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCkBAIC05MCw3ICs5
MSw3IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQu
cmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAi
U3RyaW5nIGdldF9ieV92YWwgc3R1YiIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgIlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpAQCAtMjM3LDcgKzIzOCw4IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0
QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xv
d1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEdl
dFByb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRhZywgZHN0
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xvd0RvbmVDYXNl
ID0ganVtcCgpOwogCkBAIC0yNzUsNyArMjc3LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoSW5zdHJ1YwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIE5v
UHRyVGFnLCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBQdHJUYWcgdGFnID0g
cHRyVGFnKEdldFByb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgdGFnLCBkc3Qs
IHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRk
cmVzcyA9IGNhbGw7CkBAIC00NTUsNyArNDU4LDggQEAgSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6
OmVtaXRQdXRCeVZhbFdpdAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAg
IGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOwogCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJl
Z1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFB1dFBy
b3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgdGFnLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDEsIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
IApAQCAtNDkyLDcgKzQ5Niw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKElu
c3RydWMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIGJvb2wgaXNEaXJlY3Qg
PSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkg
PT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihp
c0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplLCBOb1B0clRhZywgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsK
KyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFB1dFByb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgdGFn
LCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOwogCiAgICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0
aDsKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5y
ZXR1cm5BZGRyZXNzID0gY2FsbDsKQEAgLTU5Myw3ICs1OTgsOCBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJ
ZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBs
KCkpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoR2V0UHJvcGVydHlQdHJUYWcsIGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlH
ZXRCeUlkT3B0aW1pemUsIHRhZywgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBp
ZGVudC0+aW1wbCgpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNjU1LDggKzY2MSw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoSW5zdHJ1Y3QKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4g
PSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmls
ZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEdldFByb3Bl
cnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHRhZywgcmVzdWx0VlJl
ZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC02NzEsOCArNjc4LDkg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaQogICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0gICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKKworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoR2V0
UHJvcGVydHlQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCB0
YWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIGlkZW50LT5pbXBs
KCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsK
IH0KQEAgLTcxNCw4ICs3MjIsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKElu
c3RydWN0CiAgICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9wdXRCeUlkc1tt
X3B1dEJ5SWRJbmRleCsrXTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAs
IGlkZW50LT5pbXBsKCkpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoUHV0UHJvcGVydHlQdHJU
YWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihn
ZW4uc2xvd1BhdGhGdW5jdGlvbigpLCB0YWcsIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAs
IGlkZW50LT5pbXBsKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKIH0KQEAgLTEyNTgsMTEgKzEyNjYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlWYWwoQnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0Rv
bmUpKTsKICAgICAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAgICAgICAg
IkJhc2VsaW5lIGdldF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwg
Q29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEdldFByb3BlcnR5UHRyVGFnLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihy
ZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYywgdGFn
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAgLTEyOTAsMTIgKzEyOTksMTMgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaAogICAgIGdlbi5maW5hbGl6ZShwYXRj
aEJ1ZmZlcik7CiAKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9G
T1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAgICAgICAg
IkJhc2VsaW5lIGdldF9ieV92YWwgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0
YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUo
KSk7CiAgICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwogCiAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxH
ZW5lcmljLCBTbG93UGF0aFB0clRhZykpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoR2V0UHJv
cGVydHlQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFk
ZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCB0YWcpKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
QEAgLTEzMzgsMjMgKzEzNDgsMjQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwo
QnlWYWxJbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJl
bChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgaWYgKG5lZWRzTGlua0ZvcldyaXRlQmFycmllcikgewotICAgICAgICBBU1NFUlQobV9jYWxs
cy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkgPT0gb3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHMubGFzdCgpLmZy
b20sIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBTbG93UGF0aFB0
clRhZykpOworICAgICAgICBBU1NFUlQocmVtb3ZlQ29kZVB0clRhZyhtX2NhbGxzLmxhc3QoKS5j
YWxsZWUuZXhlY3V0YWJsZUFkZHJlc3MoKSkgPT0gcmVtb3ZlQ29kZVB0clRhZyhvcGVyYXRpb25X
cml0ZUJhcnJpZXJTbG93UGF0aCkpOworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHMu
bGFzdCgpLmZyb20sIG1fY2FsbHMubGFzdCgpLmNhbGxlZSk7CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9u
LT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CiAgICAgaWYgKCFpc0RpcmVjdCkg
ewogICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKLSAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAg
ICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAg
ICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsK
ICAgICAgICAgCiAgICAgfSBlbHNlIHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsIE5vUHRyVGFnLAorICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBO
ZWFySnVtcFB0clRhZywKICAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsX2RpcmVjdCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0
YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwogICAgIH0KICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlW
YWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1
cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljLCBTbG93UGF0aFB0clRhZykpOwor
ICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoUHV0UHJvcGVydHlQdHJUYWcsIGN1cnJlbnRJbnN0cnVj
dGlvbik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIoaXNEaXJl
Y3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdl
bmVyaWMsIHRhZykpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhD
YWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKQEAg
LTEzODAsMTIgKzEzOTEsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRo
Q2FjaAogICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlcik7CiAKICAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVy
LCBOZWFySnVtcFB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNh
Y2hlZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChw
dXRLaW5kID09IERpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+
dXRmOCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpOwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsK
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVt
cCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKHB1dEtpbmQg
PT0gRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0
QnlWYWxHZW5lcmljLCBTbG93UGF0aFB0clRhZykpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWco
UHV0UHJvcGVydHlQdHJUYWcsIGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIocHV0S2luZCA9PSBEaXJlY3QgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMsIHRhZykpOwog
fQogCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRodW5rcy5jcHAJKHJldmlz
aW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRo
dW5rczo6aG9zdEZ1bmN0aW8KICAgICBSZWZQdHI8SklUQ29kZT4gZm9yQ2FsbDsKICAgICBpZiAo
Z2VuZXJhdG9yKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBlbnRyeSA9IGdlbmVy
YXRvcih2bSk7Ci0gICAgICAgIGZvckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShl
bnRyeSwgZW50cnkuY29kZSgpLCBKSVRDb2RlOjpIb3N0Q2FsbFRodW5rKSk7CisgICAgICAgIGZv
ckNhbGwgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShlbnRyeSwgZW50cnkucmV0YWdnZWRD
b2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRD
b2RlOjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGZvckNhbGwgPSBhZG9w
dFJlZihuZXcgTmF0aXZlSklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDYWxsKHZtKSksIEpJVENvZGU6Okhvc3RDYWxsVGh1bmsp
KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNp
b24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5SUQKIAogICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoc3R1YkluZm8sIGpzQ2Fz
dDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBh
dGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJv
cHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEdldFByb3BlcnR5UHRyVGFnLCAmY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKV0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVPcHRp
bWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCB0YWcpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRBcnJheUxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjUwLDcg
KzI1MSw4IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAg
ICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAgICAgICAgICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5SWRTZWxmUGF0Y2gsIHN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIHByb3BlcnR5TmFtZSkpOwogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRlT3B0aW1pemluZ0dl
dEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgICAgICAgICAgICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoR2V0UHJvcGVydHlQdHJUYWcsICZjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW3N0dWJJ
bmZvLmNhbGxTaXRlSW5kZXguYml0cygpXSk7CisgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5k
KSwgdGFnKSk7CiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZihj
b2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzY4
LDggKzM3MCwxMSBAQCB2b2lkIHJlcGF0Y2hHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWCiB7
CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogICAgIAot
ICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNs
b3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExv
Y2F0aW9uKCksIGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAg
aWYgKHRyeUNhY2hlR2V0QnlJRChleGVjLCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIGtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRh
ZyhHZXRQcm9wZXJ0eVB0clRhZywgJmNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbc3R1YkluZm8u
Y2FsbFNpdGVJbmRleC5iaXRzKCldKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIo
YXBwcm9wcmlhdGVHZW5lcmljR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCB0YWcpKTsKKyAgICB9CiB9
CiAKIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5
SWRGdW5jdGlvbihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkK
QEAgLTM4NiwxNyArMzkxLDE0IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJv
cHJpYXQKIAogc3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVPcHRpbWl6
aW5nUHV0QnlJZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBw
dXRLaW5kKQogewotICAgIGF1dG8gcGlja1Nsb3dQYXRoID0gWyZdICgpIC0+IFZfSklUT3BlcmF0
aW9uX0VTc2lKSkkgewotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICB9CisgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9OwotICAg
IHJldHVybiB0YWdDRnVuY3Rpb25QdHIocGlja1Nsb3dQYXRoKCksIFNsb3dQYXRoUHRyVGFnKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfQor
ICAgIGlmIChwdXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5v
blN0cmljdE9wdGltaXplOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBz
bG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTQ0
Myw3ICs0NDUsOCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vz
czo6Z2VuZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3Qu
Y2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlu
bGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlk
U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8u
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoUHV0UHJvcGVydHlQdHJUYWcsICZjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW3N0
dWJJbmZvLmNhbGxTaXRlSW5kZXguYml0cygpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBm
dGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxM
b2NhdGlvbigpLCBGdW5jdGlvblB0cihhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCksIHRhZykpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7
CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU3NSw4ICs1NzgsMTEgQEAgdm9pZCByZXBhdGNo
UHV0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1
cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeUlEKGV4
ZWMsIGJhc2VWYWx1ZSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBw
dXRLaW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFw
cHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CisgICAgaWYg
KHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkgeworICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgICAgICBQdHJUYWcg
dGFnID0gcHRyVGFnKFB1dFByb3BlcnR5UHRyVGFnLCAmY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KVtzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKV0pOworICAgICAgICBmdGxUaHVua0F3YXJl
UmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBG
dW5jdGlvblB0cihhcHByb3ByaWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2lu
ZCksIHRhZykpOworICAgIH0KIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
SW4oCkBAIC02OTgsNyArNzA0LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25lcihK
U0NlbGwqIAogCiB2b2lkIGxpbmtGb3IoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0gICAgSlNPYmpl
Y3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgSlNPYmplY3Qq
IGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIFB0clRhZyBjb2RlVGFnKQog
ewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKQEAgLTcyMCw3ICs3MjYsNyBA
QCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJD
b2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVP
cmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAi
LCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQ
dHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsTGlu
a0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQdHIpKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIo
KSwgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0ci5yZXRhZ2dlZChjb2RlVGFnLCBOZWFyQ2FsbFB0
clRhZykpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAgIGNhbGxlZUNvZGVC
bG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CkBAIC03
NjcsNiArNzczLDcgQEAgdm9pZCBsaW5rU2xvd0ZvcigKIAogc3RhdGljIHZvaWQgcmV2ZXJ0Q2Fs
bChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZikKIHsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVJlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgTmVhckNhbGxQdHJUYWcpOwogICAgIGlmIChjYWxsTGlua0luZm8u
aXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKICAg
ICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5rSW5mbzo6RGlyZWN0
VGFpbENhbGwpCkBAIC0xMDA5LDEyICsxMDE2LDE1IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bCgKICAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tjYXNlSW5kZXhdLnZh
cmlhbnQoKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
OworICAgICAgICBQdHJUYWcgY29kZVRhZzsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJs
ZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENv
ZGVGb3JDYWxsKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgp
LT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90
UmVxdWlyZWQpOworICAgICAgICAgICAgY29kZVRhZyA9IENvZGVFbnRyeVB0clRhZzsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmludGVybmFsRnVuY3Rpb24o
KSk7CiAgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1w
b2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAgICAgICAgICAgY29kZVRhZyA9IENvZGVFbnRyeVB0
clRhZzsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKQEAg
LTEwODUsNyArMTA5NSw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBh
dXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAgICBjYWxsZXJDb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywg
cGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAgICAgICAgIlBvbHltb3JwaGljIGNh
bGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCiAgICAgICAgICAg
ICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNv
ZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxB
dE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmlu
ZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLApAQCAtMTExMiwxMyArMTEyMiwxNSBAQCB2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKIHZvaWQgcmVzZXRHZXRCeUlEKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdldEJ5SURLaW5kIGtpbmQp
CiB7Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xv
d1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9u
KGtpbmQpKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEdldFByb3BlcnR5UHRyVGFnLCAmY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtzdHViSW5mby5jYWxsU2l0ZUluZGV4LmJpdHMoKV0pOwor
ICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRo
Q2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5SWRG
dW5jdGlvbihraW5kKSwgdGFnKSk7CiAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1w
KHN0dWJJbmZvLCBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQg
cmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCiB7Ci0gICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNv
ZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhQdXRQcm9wZXJ0eVB0clRhZywgJmNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKClbc3R1YkluZm8uY2FsbFNpdGVJbmRleC5iaXRzKCldKTsKKyAg
ICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIHVub3B0aW1pemVkRnVuY3Rpb24gPSB1bnRhZ0NGdW5j
dGlvblB0cjxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRh
Zyk7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsKICAgICBp
ZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8IHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQogICAgICAg
ICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKQEAg
LTExMzEsNyArMTE0Myw3IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29kZUJsb2Nr
LCAKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0T3B0aW1pemU7CiAgICAgfQogCi0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNv
ZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgdGFnQ0Z1bmN0aW9uUHRy
KG9wdGltaXplZEZ1bmN0aW9uLCBTbG93UGF0aFB0clRhZykpOworICAgIGZ0bFRodW5rQXdhcmVS
ZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1
bmN0aW9uUHRyKG9wdGltaXplZEZ1bmN0aW9uLCB0YWcpKTsKICAgICBJbmxpbmVBY2Nlc3M6OnJl
d2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigp
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDIz
MDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0
YXRlKiwgSgogdm9pZCByZXBhdGNoUHV0QnlJRChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1
cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJl
U3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBK
U1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cik7Cit2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBQdHJU
YWcpOwogdm9pZCBsaW5rRGlyZWN0Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVC
bG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNp
YWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDE0ICsxNzAsMTYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENv
ZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIlNwZWNpYWxpemVk
IHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgQ29kZUVudHJ5UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9y
ICVzIiwgdGh1bmtLaW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0
aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBSZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50
CiAgICAgICAgIC8vIGFuZCByZXR1cm4gdmFsdWUuIExpa2UgYW55IHNlbnNpYmxlIGFyY2hpdGVj
dHVyZSB3b3VsZC4KICAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGUoRnVuY3Rpb25QdHIg
ZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKGNhbGwoU2xvd1BhdGhQdHJUYWcpLCBmdW5jdGlvbikpOworICAgICAgICAgICAgYXNz
ZXJ0SXNDRnVuY3Rpb25QdHIoZnVuY3Rpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNwZWNpYWxpemVkVGh1bmtQdHJUYWcsIG5leHRQdHJU
YWdJRCgpKTsKKyAgICAgICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwo
dGFnKSwgRnVuY3Rpb25QdHIoZnVuY3Rpb24sIHRhZykpKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9Eb3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24o
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwb2ludGVyR1BSKQordGVtcGxhdGU8dHlwZW5hbWUg
VGFnVHlwZT4KK2lubGluZSB2b2lkIGVtaXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMm
IGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRhZ1R5cGUgdGFnKQogewogICAgIGlmIChBU1NFUlRf
RElTQUJMRUQpCiAgICAgICAgIHJldHVybjsKQEAgLTUyLDYgKzUzLDcgQEAgaW5saW5lIHZvaWQg
ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxsSAogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJ
bnZhbGlkUG9pbnRlcik7CiAgICAgaXNOb25aZXJvLmxpbmsoJmppdCk7CiAgICAgaml0LnB1c2hU
b1NhdmUocG9pbnRlckdQUik7CisgICAgaml0LnVudGFnUHRyKHBvaW50ZXJHUFIsIHRhZyk7CiAg
ICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBvaW50ZXJHUFIpOwogICAgIGppdC5wb3BUb1Jlc3Rv
cmUocG9pbnRlckdQUik7CiB9CkBAIC02OCwxOSArNzAsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50b3BFbnRyeUZyYW1lKTsKIAorICAgIFB0clRhZyBj
YWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgaml0
LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lk
Kj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQu
Y2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBOb1B0clRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5k
bGVyLCBjYWxsVGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFs
aWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5jYWxs
KEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25I
YW5kbGVyKCp2bSk7CiAKKyAgICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJU
YWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9t
IGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIHRodW5rVGFnLCAiVGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1
bmsiKTsKIH0KIAogc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBq
aXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQorICAg
IENDYWxsSGVscGVycyYgaml0LCBWTSogdm0sIFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1Bh
dGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKQogeworICAgIFB0clRh
ZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisKICAg
ICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgqdm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAg
IGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwpAQCAtOTMsOSArOTksOSBAQCBz
dGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BS
SW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsK
KyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxUYWcpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsK
KyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIDgpLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0
ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CkBAIC0xMDMsOSArMTA5LDkgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaWYgKG1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKC1tYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxk
ZWNsdHlwZShzbG93UGF0aEZ1bmN0aW9uKT4oR1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRo
RnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgTm9QdHJUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHIoc2xvd1BhdGhGdW5jdGlvbiwgY2FsbFRhZykpLCBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpu
b25BcmdHUFIwLCBjYWxsVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBj
YWxsVGFnKTsKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRp
ZgpAQCAtMTE2LDggKzEyMiw5IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIDMp
IFRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAgIC8vIFRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIEdQ
UiB3aWxsIGhvbGQgYSBub24temVybyB2YWx1ZSBmb3IgdGFpbCBjYWxscy4KIAotICAgIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgZXhwZWN0ZWRM
aW5rZWRUYXJnZXRUYWcpOwogICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGpp
dC51bnRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMCkp
OwogICAgIENDYWxsSGVscGVyczo6SnVtcCBkb05vdFRyYXNoID0gaml0LmJyYW5jaFRlc3RQdHIo
Q0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwpAQCAtMTI2LDcg
KzEzMyw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIGppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKIAogICAgIGRvTm90VHJhc2gubGlu
aygmaml0KTsKLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcp
OworICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRh
cmdldFRhZyk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKFZNKiB2bSkKQEAgLTEzNywxMSArMTQ0LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBs
aW5rQ2FsbFRodW5rR2VuZXIKICAgICAvLyB0byBiZSBpbiByZWdUMC9yZWdUMSAocGF5bG9hZC90
YWcpLCB0aGUgQ2FsbEZyYW1lIHRvIGhhdmUgYWxyZWFkeQogICAgIC8vIGJlZW4gYWRqdXN0ZWQs
IGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGF2YWlsYWJsZSBmb3IgdXNlLgogICAgIEND
YWxsSGVscGVycyBqaXQ7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9u
TGlua0NhbGwpOwotICAgIAorCisgICAgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnID0g
cHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxsUHRyVGFnLCB2bSk7CisgICAgc2xvd1BhdGhGb3Ioaml0
LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKwogICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIkxpbmsgY2FsbCBzbG93IHBh
dGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmVhckNh
bGxQdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CiB9CiAKIC8vIEZvciBjbG9z
dXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3Jl
IHVzaW5nIGNsb3N1cmVzIGZvcgpAQCAtMTQ5LDExICsxNTcsMTIgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGpp
dDsKLSAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsKTsKLSAgICAKKworICAgIFB0clRhZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0
clRhZyhPcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsUHRyVGFnLCB2bSk7CisgICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCwgZXhwZWN0ZWRMaW5r
ZWRUYXJnZXRUYWcpOworCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFn
LCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgIkxpbmsgcG9seW1vcnBo
aWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBkaXN0
aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBoaWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cKQEAg
LTIwMCw3ICsyMDksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZN
CiAgICAgYXV0byBub3RKU0Z1bmN0aW9uID0gaml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZvOjpy
ZWdUMCwgSlNGdW5jdGlvblR5cGUpOwogICAgIAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUg
YSBKU0Z1bmN0aW9uLgotICAgIAorCiAgICAgaml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlKCkpLAogICAgICAgICBHUFJJbmZvOjpyZWdUNCk7CkBAIC0yMjEsMjYgKzIzMCwyOCBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNCiAKICAgICAvLyBNYWtlIGEg
dGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUuCiAgICAgSlNJbnRl
cmZhY2VKSVQ6OkxhYmVsIGNhbGxDb2RlKGppdC5sYWJlbCgpKTsKLSAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9u
KGppdCwgR1BSSW5mbzo6cmVnVDQsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKICAg
ICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewogICAgICAgICBqaXQucHJlc2VydmVS
ZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgaml0LnByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmVnVDQpOwogICAgIH0KLSAgICBqaXQuanVtcChH
UFJJbmZvOjpyZWdUNCwgTm9QdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBD
b2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiAKICAgICBub3RKU0Z1bmN0aW9uLmxpbmso
JmppdCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5kKGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6
cmVnVDAsIEludGVybmFsRnVuY3Rpb25UeXBlKSk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihj
YWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBH
UFJJbmZvOjpyZWdUNCk7CisgICAgdm9pZCogZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS0+Z2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpKS5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNr
UHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRkcmVzcyksIEdQUkluZm86OnJlZ1Q0KTsKICAgICBq
aXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwgJmppdCk7CiAKICAgICBzbG93Q2FzZS5saW5rKCZq
aXQpOwogICAgIAogICAgIC8vIEhlcmUgd2UgZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0
IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRp
b25WaXJ0dWFsQ2FsbCk7CisgICAgUHRyVGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnID0gcHRy
VGFnKE9wZXJhdGlvblZpcnR1YWxDYWxsUHRyVGFnLCB2bSk7CisgICAgc2xvd1BhdGhGb3Ioaml0
LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJl
dHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAg
ICAgIHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywKICAgICAgICAgIlZpcnR1YWwgJXMgc2xv
dyBwYXRoIHRodW5rIiwKICAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1v
ZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxsTGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9k
ZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNvbnN0cnVjdCIpOwogfQpAQCAtMjkzLDkgKzMwNCw5
IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1
bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAg
ICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpy
ZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
SlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgICAg
ICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEs
IGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2Fs
bChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFi
bGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgTm9Q
dHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25G
b3Ioa2luZCkpLCBDb2RlRW50cnlQdHJUYWcpOwogCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogCkBAIC0zMTQsNyArMzI1LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBu
YXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhY
ODZSZWdpc3RlcnM6OmVzaSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlv
bkZvcihraW5kKSksIFg4NlJlZ2lzdGVyczo6cjkpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNl
SklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6
OmVzaSk7CiAgICAgaml0LnhvcjY0KFg4NlJlZ2lzdGVyczo6ZXNpLCBYODZSZWdpc3RlcnM6OnI5
KTsKLSAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBOb1B0clRhZyk7CisgICAgaml0LmNh
bGwoWDg2UmVnaXN0ZXJzOjpyOSwgQ29kZUVudHJ5UHRyVGFnKTsKIAogI2Vsc2UKICAgICAvLyBD
YWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVkeCwgcjgsIHI5LCAuLi4pOwpAQCAtMzI5
LDkgKzM0MCw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAg
ICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24p
IHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0
ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJz
OjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
SlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICAgICAgaml0
LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJs
ZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0
aW9uKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJ
bnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246
Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBOb1B0clRhZyk7CisgICAgICAgIGpp
dC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBJbnRlcm5h
bEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZUVudHJ5UHRy
VGFnKTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig0ICog
c2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
ICNlbmRpZgpAQCAtMzUzLDcgKzM2NCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bmF0aXZlRm9yR2UKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
QVJNNjRSZWdpc3RlcnM6OngxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0
aW9uRm9yKGtpbmQpKSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKICAgICBqaXQubW92ZShKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNvZGVQb2lzb246OmtleSgpKSwgQVJNNjRSZWdp
c3RlcnM6OngxKTsKICAgICBqaXQueG9yNjQoQVJNNjRSZWdpc3RlcnM6OngxLCBBUk02NFJlZ2lz
dGVyczo6eDIpOwotICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJzOjp4MiwgTm9QdHJUYWcpOwor
ICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJzOjp4MiwgQ29kZUVudHJ5UHRyVGFnKTsKIAogI2Vs
aWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAjaWYgQ1BVKE1JUFMpCkBAIC0zNjksOSArMzgwLDkg
QEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGlmICh0aHVu
a0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbikgewogICAgICAg
ICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJn
dW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNl
SklUOjpyZWdUMik7CiAgICAgICAgIGppdC54b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJ
bW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwot
ICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6
cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgTm9QdHJUYWcpOworICAgICAgICBq
aXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4
ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UK
LSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6
OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZv
cihraW5kKSksIE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zm
c2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVFbnRyeVB0clRhZyk7CiAKICNpZiBD
UFUoTUlQUykKICAgICAvLyBSZXN0b3JlIHN0YWNrIHNwYWNlCkBAIC00MjcsNyArNDM4LDcgQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGppdC5qdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
Tm9QdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVu
a0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlU
eXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3Mg
IiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0
aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEoKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIENvZGVFbnRyeVB0clRhZywgIiVzICVzJXMg
dHJhbXBvbGluZSIsIHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1
bmN0aW9uID8gIm5hdGl2ZSIgOiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1w
V2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVu
dGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6
ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZtKQpAQCAtNDc1LDYgKzQ4Niw3IEBAIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICMgIGlmIENQVShYODZfNjQpCiAgICAg
aml0LnBvcChKU0ludGVyZmFjZUpJVDo6cmVnVDQpOwogIyAgZW5kaWYKKyAgICBqaXQudGFnUmV0
dXJuQWRkcmVzcygpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdp
c3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzKTsKICAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpLCBKU0ludGVyZmFjZUpJVDo6
YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRkMzIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0z
MihDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyksIEpTSW50ZXJmYWNlSklUOjphcmd1
bWVudEdQUjIpOwpAQCAtNTAxLDcgKzUxMyw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0
eUZpeHVwR2VuZXJhdG8KICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIw
LCBleHRyYVRlbXApOwogICAgIGppdC5sc2hpZnQ2NChKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZElt
bTMyKDMpLCBleHRyYVRlbXApOwogICAgIGppdC5hZGRQdHIoZXh0cmFUZW1wLCBKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsK
ICAgICBqaXQuYWRkUHRyKGV4dHJhVGVtcCwgSlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgLy8gTW92ZSBjdXJy
ZW50IGZyYW1lIGRvd24gYXJndW1lbnRHUFIwIG51bWJlciBvZiBzbG90cwogICAgIEpTSW50ZXJm
YWNlSklUOjpMYWJlbCBjb3B5TG9vcChqaXQubGFiZWwoKSk7CkBAIC01MjQsNyArNTM4LDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5wdXNoKEpT
SW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgogICAgIGppdC5yZXQoKTsKLSNlbHNlCisj
ZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSBzZWN0aW9uIGFib3ZlLCBVU0UoSlNWQUxVRTMyXzY0KSBz
ZWN0aW9uIGJlbG93LgogIyAgaWYgQ1BVKFg4NikKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklU
OjpyZWdUNCk7CiAjICBlbmRpZgpAQCAtNTgxLDEwICs1OTUsMTEgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5wdXNoKEpTSW50ZXJmYWNlSklUOjpy
ZWdUNCk7CiAjICBlbmRpZgogICAgIGppdC5yZXQoKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVuZCBv
ZiBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uLgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIE5vUHRyVGFnLCAiZml4dXAgYXJpdHkiKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVFRodW5rUHRyVGFnLCB2bSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIHRhZywgImZpeHVwIGFyaXR5Iik7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJl
YWNoYWJsZUdlbmVyYXRvcihWTSogdm0pCkBAIC01OTQsNyArNjA5LDcgQEAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdAogICAgIGppdC5icmVha3BvaW50KCk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJ1bnJlYWNoYWJsZSB0aHVu
ayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRh
ZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2Fk
KFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwgVk0qIHZtKQpAQCAtMTE4MSwxNiArMTE5NiwxNiBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuCiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSklUQ29kZVBvaXNvbjo6a2V5KCkpLCBHUFJJbmZv
OjpyZWdUMSk7CiAgICAgaml0LnhvcjY0KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7
CiAjZW5kaWYKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVnVDAsIE5vUHRyVGFnKTsKLSAgICAKKyAgICBlbWl0
UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCwgQ29kZUVudHJ5V2l0aEFyaXR5
Q2hlY2tQdHJUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86OnJlZ1QwLCBDb2RlRW50cnlXaXRo
QXJpdHlDaGVja1B0clRhZyk7CisKICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVyLmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsK
ICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAgICAgbGlua0J1ZmZlciwgTm9QdHJUYWcs
ICJTcGVjaWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1
bWVudHMiKTsKKyAgICAgICAgbGlua0J1ZmZlciwgQ29kZUVudHJ5UHRyVGFnLCAiU3BlY2lhbGl6
ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywzNSArNjMsMzAgQEAg
dm9pZCBpbml0aWFsaXplKCkKICAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2Rl
UHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCB0YWcpOwogICAgIH0KIAotICAgIGlmIChWTTo6Y2Fu
VXNlSklUKCkpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7
IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSURTICsgTlVNQkVSX09GX0JZVEVDT0RFX0hFTFBFUl9J
RFM7ICsraSkKLSAgICAgICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cihE
YXRhOjpzX29wY29kZU1hcFtpXSwgcHRyVGFnKEJ5dGVjb2RlSGVscGVyUHRyVGFnLCBpKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IFB0clRhZyB0YWdzRm9yT3Bjb2RlW10g
PSB7Ci0gICAgICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUKLSAgICAgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfZXZhbF9wcm9sb2d1ZQot
ICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9s
b2d1ZQotICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9wcm9sb2d1ZQotICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlCi0gICAgICAgICAgICBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKLSAg
ICAgICAgICAgIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrCi0gICAgICAgICAgICBDb2RlRW50cnlQdHJUYWcs
IC8vIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50Ci0gICAgICAgICAgICBCeXRlY29kZVB0clRh
ZywgLy8gbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQotICAgICAgICAgICAg
RXhjZXB0aW9uSGFuZGxlclB0clRhZywgLy8gbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBv
bGluZQotICAgICAgICAgICAgTmF0aXZlQ29kZVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxf
dHJhbXBvbGluZQotICAgICAgICAgICAgTmF0aXZlQ29kZVB0clRhZywgLy8gbGxpbnRfbmF0aXZl
X2NvbnN0cnVjdF90cmFtcG9saW5lCi0gICAgICAgICAgICBOYXRpdmVDb2RlUHRyVGFnLCAvLyBs
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgICAgIE5hdGl2
ZUNvZGVQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9s
aW5lCi0gICAgICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBoYW5kbGVVbmNhdWdo
dEV4Y2VwdGlvbgotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHRh
Z3NGb3JPcGNvZGUpIC8gc2l6ZW9mKHRhZ3NGb3JPcGNvZGVbMF0pID09IE5VTUJFUl9PRl9CWVRF
Q09ERV9IRUxQRVJfSURTLCAiIik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8
dWludHB0cl90PihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSA9PSBOVU1CRVJfT0ZfQllURUNPREVf
SURTLCAiIik7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNP
REVfSEVMUEVSX0lEUzsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3Bjb2RlSUQgPSBpICsgTlVN
QkVSX09GX0JZVEVDT0RFX0lEUzsKLSAgICAgICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW29wY29k
ZUlEXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdLCB0YWdzRm9yT3Bj
b2RlW2ldKTsKLSAgICAgICAgfQorICAgIHN0YXRpYyBjb25zdCBQdHJUYWcgdGFnc0Zvck9wY29k
ZVtdID0geworICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X3Byb2dyYW1fcHJvbG9n
dWUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9ldmFsX3Byb2xvZ3VlCisgICAg
ICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUKKyAg
ICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1
ZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfcHJvbG9ndWUKKyAgICAgICAgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIC8vIGxs
aW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrCisgICAgICAgIENvZGVFbnRyeVdpdGhB
cml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2No
ZWNrCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9p
bnQKKyAgICAgICAgQnl0ZWNvZGVQdHJUYWcsIC8vIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRo
X3RyYW1wb2xpbmUKKyAgICAgICAgRXhjZXB0aW9uSGFuZGxlclB0clRhZywgLy8gbGxpbnRfdGhy
b3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxs
aW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBs
bGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFn
LCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgQ29k
ZUVudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBv
bGluZQorICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBoYW5kbGVVbmNhdWdodEV4
Y2VwdGlvbgorICAgIH07CisKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih0YWdzRm9yT3Bjb2Rl
KSAvIHNpemVvZih0YWdzRm9yT3Bjb2RlWzBdKSA9PSBOVU1CRVJfT0ZfQllURUNPREVfSEVMUEVS
X0lEUywgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihsbGlu
dF9wcm9ncmFtX3Byb2xvZ3VlKSA9PSBOVU1CRVJfT0ZfQllURUNPREVfSURTLCAiIik7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9IRUxQRVJfSURTOyArK2kp
IHsKKyAgICAgICAgaW50IG9wY29kZUlEID0gaSArIE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7Cisg
ICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW29wY29kZUlEXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19v
cGNvZGVNYXBbb3Bjb2RlSURdLCB0YWdzRm9yT3Bjb2RlW2ldKTsKICAgICB9CiAKICAgICB2b2lk
KiBoYW5kbGVyID0gTExJbnQ6OmdldENvZGVQdHIobGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhf
dHJhbXBvbGluZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5o
CShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lk
KiBnZXRDb2RlUHRyKE9wY29kZUlEIAogfQogCiAjaWYgRU5BQkxFKEpJVCkKKwogQUxXQVlTX0lO
TElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0aW9uUHRyKE9wY29kZUlEIGNvZGVJZCkKIHsKICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMTEludENvZGU+KGdldENvZGVQdHIoY29kZUlkKSk7
CkBAIC05Myw3ICs5NCw3IEBAIEFMV0FZU19JTkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5jdGlv
blAKIAogQUxXQVlTX0lOTElORSB2b2lkKiBnZXRDb2RlUHRyKEpTQzo6RW5jb2RlZEpTVmFsdWUg
Z2x1ZUhlbHBlcigpKQogewotICAgIHJldHVybiBXVEZfUFJFUEFSRV9GVU5DVElPTl9QT0lOVEVS
X0ZPUl9FWEVDVVRJT04oZ2x1ZUhlbHBlcik7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lk
Kj4oZ2x1ZUhlbHBlcik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJl
dmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5
cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTcxLDQ1ICs3MSw1MSBAQCBzdGF0aWMgdm9p
ZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIENvCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBp
ZiAoVk06OmNhblVzZUpJVCgpKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
UmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIGNv
ZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklU
Q29kZSh2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUo
Q29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvZGVSZWYgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJl
ZihsbGludF9ldmFsX3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAg
ICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKCpu
ZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQ
dHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZt
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6
Y2FuVXNlSklUKCkpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2
bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgY29kZUJs
b2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFk
b3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShD
b2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVm
KGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAg
ICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVF
bnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlw
b2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZVJlZiA9IHZtLmdldENUSVN0dWIobW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3Ip
OwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZigq
bmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYs
IGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5
Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0p
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpOwog
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X21v
ZHVsZV9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29k
ZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRy
eVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0K
IAogdm9pZCBzZXRFbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDEsMTIgKzE0MDEsMTIgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVl
LnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAg
ICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2Nr
LCBpbnRlcm5hbEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hp
bmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKLSAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmNh
bGxQdHJUYWcgPSBOYXRpdmVDb2RlUHRyVGFnOworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5m
by0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywg
TExJbnRDYWxsSUNQdHJUYWcpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcp
OwogICAgICAgICAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKGNvZGVQ
dHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihl
eGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIE5hdGl2ZUNvZGVQ
dHJUYWcpOworICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwg
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOwogICAgICAgICB9
CiAgICAgICAgIHRocm93U2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gaGFuZGxlSG9z
dENhbGwoZXhlY0NhbGxlZSwgcGMsIGNhbGxlZUFzVmFsdWUsIGtpbmQpOwpAQCAtMTQyMCw3ICsx
NDIwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rp
b24oKSkgewogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5k
LCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAgIGNhbGxQdHJUYWcgPSBOYXRpdmVDb2RlUHRyVGFn
OworICAgICAgICBjYWxsUHRyVGFnID0gQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWc7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAt
MTQ0NCw2ICsxNDQ0LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhl
YwogICAgICAgICB9CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwogICAgIH0KKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29k
ZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsUHRyVGFnKTsKIAogICAgIEFTU0VSVCghIWNv
ZGVQdHIpOwogICAgIApAQCAtMTQ1NiwxMyArMTQ1NywxMyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgp
OwogICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywg
Y2FsbGVlKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNh
bGxlckNvZGVCbG9jaywgY2FsbGVlKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29k
ZVRhcmdldCA9IGNvZGVQdHI7CisgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJn
ZXQgPSBjb2RlUHRyLnJldGFnZ2VkKGNhbGxQdHJUYWcsIExMSW50Q2FsbElDUHRyVGFnKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFB0clRhZyAhPSBOb1B0clRhZyk7Ci0gICAgICAgIGNh
bGxMaW5rSW5mby0+Y2FsbFB0clRhZyA9IGNhbGxQdHJUYWc7CiAgICAgICAgIGlmIChjb2RlQmxv
Y2spCiAgICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExp
bmtJbmZvKTsKICAgICB9CiAKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBjYWxsUHRyVGFnKTsKICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElz
Tm90UG9pc29uZWQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICBMTElOVF9DQUxM
X1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNh
bGxQdHJUYWcpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRU
aHVua3MuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2VuZXJhdGVUaHUKICAgICAvLyBGSVhNRTogdGhlcmUn
cyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gaXQgb24gWDg2LCBidXQgSSdtIG5vdCBzdXJl
IEkgY2FyZS4KICAgICBMTEludENvZGUgdGFyZ2V0ID0gTExJbnQ6OmdldENvZGVGdW5jdGlvblB0
cihvcGNvZGVJRCk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIo
Yml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAg
ICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIHB0clRhZyhCeXRlY29kZUhlbHBlclB0
clRhZywgb3Bjb2RlSUQpKTsKKyAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIHRo
dW5rVGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0aHVua1RhZywgIkxM
SW50ICVzIHByb2xvZ3VlIHRodW5rIiwgdGh1bmtLaW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBt
YWNybyBjYWxsU2xvd1BhdGgoc2xvd1BhdGgpCiAgICAgbW92ZSByMCwgUEMKIGVuZAogCi1tYWNy
byBkb1ZNRW50cnkobWFrZUNhbGwsIHVudXNlZDEsIHVudXNlZDIpCittYWNybyBkb1ZNRW50cnko
bWFrZUNhbGwpCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgcHVzaENhbGxlZVNhdmVzKCkK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTUsNyArMTE1LDcgQEAgbWFjcm8gY0NhbGw0KGZ1bmN0aW9uKQogICAgIGVuZAogZW5kCiAKLW1h
Y3JvIGRvVk1FbnRyeShtYWtlQ2FsbCwgY2FsbFRhZywgY2FsbFdpdGhBcml0eUNoZWNrVGFnKQor
bWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHB1
c2hDYWxsZWVTYXZlcygpCiAKQEAgLTIyNSwxNiArMjI1LDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1h
a2VDYWxsLCBjYWxsVGFnLCBjYWxsVwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQo
ZXh0cmFUZW1wUmVnLCAweGJhZDBkYzAyKQogCi0gICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAg
ICAgICAgYnRibnogUHJvdG9DYWxsRnJhbWU6Omhhc0FyaXR5TWlzbWF0Y2hbcHJvdG9DYWxsRnJh
bWVdLCAuZG9DYWxsV2l0aEFyaXR5Q2hlY2sKLSAgICAgICAgbW92ZSBjYWxsVGFnLCB0MgotICAg
ICAgICBqbXAgLnJlYWR5VG9DYWxsCi0gICAgLmRvQ2FsbFdpdGhBcml0eUNoZWNrOgotICAgICAg
ICBtb3ZlIGNhbGxXaXRoQXJpdHlDaGVja1RhZywgdDIKLSAgICAucmVhZHlUb0NhbGw6Ci0gICAg
ZW5kCi0KLSAgICBtYWtlQ2FsbChlbnRyeSwgdDMsIHQyKQorICAgIG1ha2VDYWxsKGVudHJ5LCB0
MykKIAogICAgICMgV2UgbWF5IGhhdmUganVzdCBtYWRlIGEgY2FsbCBpbnRvIGEgSlMgZnVuY3Rp
b24sIHNvIHdlIGNhbid0IHJlbHkgb24gc3AKICAgICAjIGZvciBhbnl0aGluZyBidXQgdGhlIGZh
Y3QgdGhhdCBvdXIgb3duIGxvY2FscyAoaWUgdGhlIFZNRW50cnlSZWNvcmQpIGFyZQpAQCAtMjU4
LDE4ICsyNDksMTggQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsLCBjYWxsVGFnLCBjYWxsVwog
ZW5kCiAKIAotbWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wLCBjYWxsVGFnKQor
bWFjcm8gbWFrZUphdmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wKQogICAgIGFkZHAgMTYsIHNwCiAg
ICAgaWYgQ19MT09QCiAgICAgICAgIGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNl
Ci0gICAgICAgIGNhbGwgZW50cnksIGNhbGxUYWcKKyAgICAgICAgY2FsbCBlbnRyeSwgQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcKICAgICBlbmQKICAgICBzdWJwIDE2LCBzcAogZW5kCiAK
IAotbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRlbXAsIGNhbGxUYWcpCittYWNy
byBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCkKICAgICBtb3ZlIGVudHJ5LCB0ZW1w
CiAgICAgc3RvcmVwIGNmciwgW3NwXQogICAgIG1vdmUgc3AsIGEwCkBAIC0yNzksMTAgKzI3MCwx
MCBAQCBtYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCwgCiAgICAgZWxzaWYg
WDg2XzY0X1dJTgogICAgICAgICAjIFdlIG5lZWQgdG8gYWxsb2NhdGUgMzIgYnl0ZXMgb24gdGhl
IHN0YWNrIGZvciB0aGUgc2hhZG93IHNwYWNlLgogICAgICAgICBzdWJwIDMyLCBzcAotICAgICAg
ICBjYWxsIHRlbXAsIGNhbGxUYWcKKyAgICAgICAgY2FsbCB0ZW1wLCBDb2RlRW50cnlQdHJUYWcK
ICAgICAgICAgYWRkcCAzMiwgc3AKICAgICBlbHNlCi0gICAgICAgIGNhbGwgdGVtcCwgY2FsbFRh
ZworICAgICAgICBjYWxsIHRlbXAsIENvZGVFbnRyeVB0clRhZwogICAgIGVuZAogZW5kCiAKQEAg
LTIwNjAsMjUgKzIwNTEsMTEgQEAgbWFjcm8gZG9DYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
ICAgICBpZiBQT0lTT04KICAgICAgICAgbG9hZHAgX2dfSklUQ29kZVBvaXNvbiwgdDIKICAgICAg
ICAgeG9ycCBMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MgotICAg
ICAgICBwcmVwYXJlQ2FsbCh0MiwgdDEsIHQzLCB0NCwgbWFjcm8gKGNhbGxQdHJUYWcpCi0gICAg
ICAgICAgICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICAgICAgICAgIGxvYWRwIExMSW50
Q2FsbExpbmtJbmZvOjpjYWxsUHRyVGFnW3Q1XSwgY2FsbFB0clRhZwotICAgICAgICAgICAgZW5k
Ci0gICAgICAgIGVuZCkKLSAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAgICAgICAgICAg
IGxvYWRwIExMSW50Q2FsbExpbmtJbmZvOjpjYWxsUHRyVGFnW3Q1XSwgdDMKLSAgICAgICAgZW5k
Ci0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MiwgdDMpCisgICAgICAgIHByZXBhcmVDYWxs
KHQyLCB0MSwgdDMsIHQ0LCBMTEludENhbGxJQ1B0clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1
bmN0aW9uKHQyLCBMTEludENhbGxJQ1B0clRhZykKICAgICBlbHNlCi0gICAgICAgIHByZXBhcmVD
YWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQs
IG1hY3JvIChjYWxsUHRyVGFnKQotICAgICAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAg
ICAgICAgICAgICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbFB0clRhZ1t0NV0sIGNh
bGxQdHJUYWcKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQpCi0gICAgICAgIGlmIFBPSU5U
RVJfUFJPRklMSU5HCi0gICAgICAgICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbFB0
clRhZ1t0NV0sIHQzCi0gICAgICAgIGVuZAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJ
bnRDYWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDMpCisgICAgICAgIHByZXBh
cmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0Mywg
dDQsIExMSW50Q2FsbElDUHRyVGFnKQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRD
YWxsTGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCiAg
ICAgZW5kCiAKIC5vcENhbGxTbG93OgpAQCAtMjIwOSwxMiArMjE4NiwxMiBAQCBtYWNybyBuYXRp
dmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZf
NjRfV0lOCiAgICAgICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBleGVjdXRh
YmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0sIE5hdGl2ZUNvZGVQdHJUYWcKKyAgICAgICAgICAgIGNh
bGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBDb2RlRW50cnlQdHJUYWcKICAgICAg
ICAgICAgIGFkZHAgMzIsIHNwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWRwIF9nX05h
dGl2ZUNvZGVQb2lzb24sIHQyCiAgICAgICAgICAgICB4b3JwIGV4ZWN1dGFibGVPZmZzZXRUb0Z1
bmN0aW9uW3QxXSwgdDIKLSAgICAgICAgICAgIGNhbGwgdDIsIE5hdGl2ZUNvZGVQdHJUYWcKKyAg
ICAgICAgICAgIGNhbGwgdDIsIENvZGVFbnRyeVB0clRhZwogICAgICAgICBlbmQKICAgICBlbmQK
IApAQCAtMjI1MiwxMiArMjIyOSwxMiBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1w
b2xpbmUob2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRfV0lOCiAgICAgICAgICAgICBz
dWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgTmF0aXZl
Q29kZVB0clRhZworICAgICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgQ29kZUVu
dHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRwIDMyLCBzcAogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9pc29uLCB0MgogICAgICAgICAgICAgeG9ycCBvZmZz
ZXRPZkZ1bmN0aW9uW3QxXSwgdDIKLSAgICAgICAgICAgIGNhbGwgdDIsIE5hdGl2ZUNvZGVQdHJU
YWcKKyAgICAgICAgICAgIGNhbGwgdDIsIENvZGVFbnRyeVB0clRhZwogICAgICAgICBlbmQKICAg
ICBlbmQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjQsNyArMjY0LDcgQEAgY29uc3QgQnl0ZWNvZGVQdHJUYWcgPSBjb25zdGV4cHIgQnl0ZWNvZAog
Y29uc3QgQ29kZUVudHJ5UHRyVGFnID0gY29uc3RleHByIENvZGVFbnRyeVB0clRhZwogY29uc3Qg
Q29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcgPSBjb25zdGV4cHIgQ29kZUVudHJ5V2l0aEFy
aXR5Q2hlY2tQdHJUYWcKIGNvbnN0IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcgPSBjb25zdGV4cHIg
RXhjZXB0aW9uSGFuZGxlclB0clRhZwotY29uc3QgTmF0aXZlQ29kZVB0clRhZyA9IGNvbnN0ZXhw
ciBOYXRpdmVDb2RlUHRyVGFnCitjb25zdCBMTEludENhbGxJQ1B0clRhZyA9IGNvbnN0ZXhwciBM
TEludENhbGxJQ1B0clRhZwogY29uc3QgTm9QdHJUYWcgPSBjb25zdGV4cHIgTm9QdHJUYWcKIGNv
bnN0IFNsb3dQYXRoUHRyVGFnID0gY29uc3RleHByIFNsb3dQYXRoUHRyVGFnCiAKQEAgLTg1Mywx
MiArODUzLDEyIEBAIG1hY3JvIGNhbGxUYXJnZXRGdW5jdGlvbihjYWxsZWUsIGNhbGxQdHIKICAg
ICBkaXNwYXRjaEFmdGVyQ2FsbCgpCiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxs
KGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgcHJlcGFyZUNhbGxQdHJUYWcpCittYWNybyBw
cmVwYXJlRm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCBjYWxsUHRy
VGFnKQogICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQQ1NpemUsIHNwCiBlbmQKIAogIyBzcCBwb2lu
dHMgdG8gdGhlIG5ldyBmcmFtZQotbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVt
cDEsIHRlbXAyLCB0ZW1wMywgcHJlcGFyZUNhbGxQdHJUYWcpCittYWNybyBwcmVwYXJlRm9yVGFp
bENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCBjYWxsUHRyVGFnKQogICAgIHJlc3Rv
cmVDYWxsZWVTYXZlc1VzZWRCeUxMSW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBB
cmd1bWVudENvdW50W2Nmcl0sIHRlbXAyCkBAIC05MDcsOSArOTA3LDggQEAgbWFjcm8gcHJlcGFy
ZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIAogICAgIHN0b3JlcCB0ZW1wMywgW3RlbXAxLCB0
ZW1wMiwgMV0KICAgICBidGlueiB0ZW1wMiwgLmNvcHlMb29wCiAKLSAgICBwcmVwYXJlQ2FsbFB0
clRhZyh0ZW1wMikKICAgICBtb3ZlIHRlbXAxLCBzcAotICAgIGptcCBjYWxsZWUsIHRlbXAyCisg
ICAgam1wIGNhbGxlZSwgY2FsbFB0clRhZwogZW5kCiAKIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChz
bG93UGF0aCwgcHJlcGFyZUNhbGwpCkBAIC05MTksMTEgKzkxOCw3IEBAIG1hY3JvIHNsb3dQYXRo
Rm9yQ2FsbChzbG93UGF0aCwgcHJlcGFyZUMKICAgICAgICAgbWFjcm8gKGNhbGxlZSwgY2FsbGVl
RnJhbWVQdHIpCiAgICAgICAgICAgICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQ
CiAgICAgICAgICAgICBtb3ZlIGNhbGxlZUZyYW1lUHRyLCBzcAotICAgICAgICAgICAgcHJlcGFy
ZUNhbGwoY2FsbGVlLCB0MiwgdDMsIHQ0LCBtYWNybyAoY2FsbFB0clRhZ1JlZykKLSAgICAgICAg
ICAgICAgICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICAgICAgICAgICAgICBtb3ZlIFNs
b3dQYXRoUHRyVGFnLCBjYWxsUHRyVGFnUmVnCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAg
ICAgICBlbmQpCisgICAgICAgICAgICBwcmVwYXJlQ2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIFNs
b3dQYXRoUHRyVGFnKQogICAgICAgICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRh
cmdldEZ1bmN0aW9uKGNhbGxlZSwgU2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKQEAgLTEw
MDUsNyArMTAwMCw3IEBAIGVuZAogCiAjIERvIHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgdG8g
ZXhlY3V0ZSBjb2RlLiBTZXRzIHVwIHRoZSBQQywgbGVhdmUgdGhlIENvZGVCbG9jayoKICMgaW4g
dDEuIE1heSBhbHNvIHRyaWdnZXIgcHJvbG9ndWUgZW50cnkgT1NSLgotbWFjcm8gcHJvbG9ndWUo
Y29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIG9zclNsb3dQYXRoLCB0cmFjZVNsb3dQ
YXRoKQorbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIG9z
clNsb3dQYXRoLCB0cmFjZVNsb3dQYXRoLCB0YXJnZXRQdHJUYWcpCiAgICAgIyBTZXQgdXAgdGhl
IGNhbGwgZnJhbWUgYW5kIGNoZWNrIGlmIHdlIHNob3VsZCBPU1IuCiAgICAgdGFnUmV0dXJuQWRk
cmVzcyBzcAogICAgIHByZXNlcnZlQ2FsbGVyUENBbmRDRlIoKQpAQCAtMTAzNiwxMyArMTAzMSwx
NCBAQCBtYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgICMg
cG9wIHRoZSBjYWxsZXJGcmFtZSBzaW5jZSB3ZSB3aWxsIGp1bXAgdG8gYSBmdW5jdGlvbiB0aGF0
IHdhbnRzIHRvIHNhdmUgaXQKICAgICAgICAgaWYgQVJNNjQgb3IgQVJNNjRFCiAgICAgICAgICAg
ICBwb3AgbHIsIGNmcgorICAgICAgICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHNwCiAgICAgICAg
IGVsc2lmIEFSTSBvciBBUk12NyBvciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTCiAgICAgICAg
ICAgICBwb3AgY2ZyCiAgICAgICAgICAgICBwb3AgbHIKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcG9wIGNmcgogICAgICAgICBlbmQKLSAgICAgICAgam1wIHIwLCBDb2RlRW50cnlQdHJUYWcK
KyAgICAgICAgam1wIHIwLCB0YXJnZXRQdHJUYWcKICAgICAucmVjb3ZlcjoKICAgICAgICAgY29k
ZUJsb2NrR2V0dGVyKHQxLCB0MikKICAgICAuY29udGludWU6CkBAIC0xMTYwLDcgKzExNTYsNyBA
QCBlbHNlCiAgICAgZ2xvYmFsIF92bUVudHJ5VG9KYXZhU2NyaXB0CiAgICAgX3ZtRW50cnlUb0ph
dmFTY3JpcHQ6CiBlbmQKLSAgICBkb1ZNRW50cnkobWFrZUphdmFTY3JpcHRDYWxsLCBDb2RlRW50
cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKQorICAgIGRvVk1FbnRyeSht
YWtlSmF2YVNjcmlwdENhbGwpCiAKIAogaWYgQ19MT09QCkBAIC0xMTY5LDcgKzExNjUsNyBAQCBl
bHNlCiAgICAgZ2xvYmFsIF92bUVudHJ5VG9OYXRpdmUKICAgICBfdm1FbnRyeVRvTmF0aXZlOgog
ZW5kCi0gICAgZG9WTUVudHJ5KG1ha2VIb3N0RnVuY3Rpb25DYWxsLCBOYXRpdmVDb2RlUHRyVGFn
LCBOYXRpdmVDb2RlUHRyVGFnKQorICAgIGRvVk1FbnRyeShtYWtlSG9zdEZ1bmN0aW9uQ2FsbCkK
IAogCiBpZiBub3QgQ19MT09QCkBAIC0xMjg3LDM0ICsxMjgzLDM0IEBAIF9sbGludF9lbnRyeToK
IGVuZAogCiBfbGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShub3RGdW5jdGlv
bkNvZGVCbG9ja0dldHRlciwgbm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRy
eV9vc3IsIF9sbGludF90cmFjZV9wcm9sb2d1ZSkKKyAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNv
ZGVCbG9ja0dldHRlciwgbm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9v
c3IsIF9sbGludF90cmFjZV9wcm9sb2d1ZSwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGRpc3BhdGNo
KDApCiAKIAogX2xsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5v
dEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xs
aW50X2VudHJ5X29zciwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlKQorICAgIHByb2xvZ3VlKG5vdEZ1
bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50
X2VudHJ5X29zciwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcpCiAgICAg
ZGlzcGF0Y2goMCkKIAogCiBfbGxpbnRfZXZhbF9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShub3RG
dW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGlu
dF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9sb2d1ZSkKKyAgICBwcm9sb2d1ZShub3RGdW5j
dGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9l
bnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9sb2d1ZSwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGRp
c3BhdGNoKDApCiAKIAogX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgotICAgIHBy
b2xvZ3VlKGZ1bmN0aW9uRm9yQ2FsbENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tT
ZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwsIF9sbGludF90cmFjZV9w
cm9sb2d1ZV9mdW5jdGlvbl9mb3JfY2FsbCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxD
b2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3Ny
X2Z1bmN0aW9uX2Zvcl9jYWxsLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWVfZnVuY3Rpb25fZm9yX2Nh
bGwsIENvZGVFbnRyeVB0clRhZykKICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDApCiAgICAg
ZGlzcGF0Y2goMCkKICAgICAKIAogX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9n
dWU6Ci0gICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDb2RlQmxvY2tHZXR0ZXIsIGZ1
bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3QsIF9sbGludF90cmFjZV9wcm9sb2d1ZV9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQorICAg
IHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ29uc3RydWN0Q29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNv
ZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0LCBf
bGxpbnRfdHJhY2VfcHJvbG9ndWVfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCwgQ29kZUVudHJ5UHRy
VGFnKQogICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMSkKICAgICBkaXNwYXRjaCgwKQogICAg
IAogCiBfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6Ci0gICAgcHJvbG9ndWUo
ZnVuY3Rpb25Gb3JDYWxsQ29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwg
X2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrLCBfbGxpbnRfdHJh
Y2VfYXJpdHlDaGVja19mb3JfY2FsbCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2Rl
QmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1
bmN0aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2ssIF9sbGludF90cmFjZV9hcml0eUNoZWNrX2Zvcl9j
YWxsLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZykKICAgICBmdW5jdGlvbkFyaXR5Q2hl
Y2soLmZ1bmN0aW9uRm9yQ2FsbEJlZ2luLCBfc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjaykKIC5m
dW5jdGlvbkZvckNhbGxCZWdpbjoKICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDApCkBAIC0x
MzIyLDcgKzEzMTgsNyBAQCBfbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CiAK
IAogX2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6Ci0gICAgcHJvbG9n
dWUoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2Nr
U2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVj
aywgX2xsaW50X3RyYWNlX2FyaXR5Q2hlY2tfZm9yX2NvbnN0cnVjdCkKKyAgICBwcm9sb2d1ZShm
dW5jdGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0
ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrLCBf
bGxpbnRfdHJhY2VfYXJpdHlDaGVja19mb3JfY29uc3RydWN0LCBDb2RlRW50cnlXaXRoQXJpdHlD
aGVja1B0clRhZykKICAgICBmdW5jdGlvbkFyaXR5Q2hlY2soLmZ1bmN0aW9uRm9yQ29uc3RydWN0
QmVnaW4sIF9zbG93X3BhdGhfY29uc3RydWN0X2FyaXR5Q2hlY2spCiAuZnVuY3Rpb25Gb3JDb25z
dHJ1Y3RCZWdpbjoKICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDEpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHJldmlzaW9uIDIz
MDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29s
IGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW4KIAogY2xhc3MgRXhlY3V0YWJsZUJhc2UgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBmcmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7
CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgaW50IE5VTV9QQVJBTUVURVJTX0lTX0hP
U1QgPSAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0
aXZlRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2NiwxMSBAQCB2b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAg
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVz
c0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhB
cml0eUNoZWNrID0gbV9qaXRDb2RlRm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hl
Y2tBcml0eSk7CiAgICAgbV9uYW1lID0gbmFtZTsKKworICAgIGFzc2VydElzVGFnZ2VkV2l0aCht
X2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRX
aXRoKG1faml0Q29kZUZvckNvbnN0cnVjdC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJl
cXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIGFzc2Vy
dElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGFzc2VydElzVGFn
Z2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRk
cmVzcygpLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiB9CiAKIE5hdGl2ZUV4ZWN1
dGFibGU6Ok5hdGl2ZUV4ZWN1dGFibGUoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYyBpbnRyaW5z
aWMsIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDEx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24oaW50cHRyX3QgYml0cykgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGJpdHMpKSB7IH0KIAogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9u
IGZ1bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLm1fcHRy
LCBOYXRpdmVDb2RlUHRyVGFnKSkKKyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9p
ZCo+KGZ1bmMubV9wdHIsIENvZGVFbnRyeVB0clRhZykpCiAgICAgeyB9CiAgICAgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24oUmF3TmF0aXZlRnVuY3Rpb24gZnVuYykKLSAgICAgICAgOiBtX3B0cih0YWdD
RnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMsIE5hdGl2ZUNvZGVQdHJUYWcpKQorICAgICAgICA6IG1f
cHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYywgQ29kZUVudHJ5UHRyVGFnKSkKICAgICB7
IH0KIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fcHRy
OyB9CkBAIC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBvcGVyYXRvciBOYXRp
dmVGdW5jdGlvbigpCiAgICAgewogICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICByZXR1
cm4gdW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24+KG1fcHRyLCBOYXRpdmVDb2RlUHRy
VGFnKTsKKyAgICAgICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPE5hdGl2ZUZ1bmN0aW9uPiht
X3B0ciwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICB9CiAKICAgICB2b2lkKiByYXdQb2ludGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9wdHI7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDE1LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yNTcsNiArMjU3LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9
PSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpKTsKICAgICAgICAgCiAgICAgICAg
IEFTU0VSVChnZXRWYWx1ZSk7CisgICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKGdldFZhbHVl
KTsKICAgICAgICAgbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAgICAgICBt
X2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCkBAIC0yNzgsNiArMjc5LDcgQEAgcHVibGljOgog
ICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJp
YnV0ZXMpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CisgICAgICAgIGFz
c2VydElzQ0Z1bmN0aW9uUHRyKGdldFZhbHVlKTsKICAgICAgICAgbV9kYXRhLmN1c3RvbS5nZXRW
YWx1ZSA9IGdldFZhbHVlOwogICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjMwMTEx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDExICs0MSwyMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KENvZGVFbnRyeVB0
clRhZykgXAogICAgIHYoQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpIFwKICAgICB2KEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWcpIFwKKyAgICB2KEdldFByb3BlcnR5UHRyVGFnKSBcCisgICAg
dihHZXR0ZXJTZXR0ZXJQdHJUYWcpIFwKKyAgICB2KEhhc1Byb3BlcnR5UHRyVGFnKSBcCiAgICAg
dihKSVRDb2RlUHRyVGFnKSBcCiAgICAgdihKSVRPcGVyYXRpb25QdHJUYWcpIFwKICAgICB2KEpJ
VFRodW5rUHRyVGFnKSBcCisgICAgdihKSVRXcml0ZVRodW5rUHRyVGFnKSBcCisgICAgdihMTElu
dENhbGxJQ1B0clRhZykgXAorICAgIHYoTWF0aElDUHRyVGFnKSBcCiAgICAgdihOYXRpdmVDb2Rl
UHRyVGFnKSBcCisgICAgdihPcGVyYXRpb25MaW5rQ2FsbFB0clRhZykgXAorICAgIHYoT3BlcmF0
aW9uTGlua1BvbHltb3JwaGljQ2FsbFB0clRhZykgXAorICAgIHYoT3BlcmF0aW9uVmlydHVhbENh
bGxQdHJUYWcpIFwKKyAgICB2KFB1dFByb3BlcnR5UHRyVGFnKSBcCiAgICAgdihTbG93UGF0aFB0
clRhZykgXAorICAgIHYoU3BlY2lhbGl6ZWRUaHVua1B0clRhZykgXAogICAgIHYoU3dpdGNoVGFi
bGVQdHJUYWcpIFwKICAgICBcCiAgICAgdihZYXJyOEJpdFB0clRhZykgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9u
IDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xv
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldEN1c3RvbVZhbHVlKEpTT2JqZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24pCiAg
ICAgeworICAgICAgICBhc3NlcnRJc051bGxPckNGdW5jdGlvblB0cihmdW5jdGlvbik7CiAgICAg
ICAgIG1fdHlwZSA9IEN1c3RvbVZhbHVlOwogICAgICAgICBtX2Jhc2UgPSBiYXNlOwogICAgICAg
ICBtX3B1dEZ1bmN0aW9uID0gZnVuY3Rpb247CkBAIC03Niw2ICs3Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc2V0Q3VzdG9tQWNjZXNzb3IoSlNPYmplY3QqIGJhc2UsIFB1dFZhbHVlRnVuYyBm
dW5jdGlvbikKICAgICB7CisgICAgICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKGZ1bmN0
aW9uKTsKICAgICAgICAgbV90eXBlID0gQ3VzdG9tQWNjZXNzb3I7CiAgICAgICAgIG1fYmFzZSA9
IGJhc2U7CiAgICAgICAgIG1fcHV0RnVuY3Rpb24gPSBmdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZp
c2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1Nyw3ICszNTcsOCBAQCB2b2lkIFNhbXBs
aW5nUHJvZmlsZXI6OnRha2VTYW1wbGUoY29uc3QgCiAgICAgICAgICAgICAgICAgbWFjaGluZUZy
YW1lID0gTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihyZWdpc3RlcnMpOwogICAgICAgICAg
ICAgICAgIGNhbGxGcmFtZSA9IHN0YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KG1hY2hpbmVGcmFtZSk7
CiAgICAgICAgICAgICAgICAgbWFjaGluZVBDID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9u
UG9pbnRlcihyZWdpc3RlcnMpOwotICAgICAgICAgICAgICAgIGxsaW50UEMgPSBNYWNoaW5lQ29u
dGV4dDo6bGxpbnRJbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAg
ICBsbGludFBDID0gcmVtb3ZlQ29kZVB0clRhZyhNYWNoaW5lQ29udGV4dDo6bGxpbnRJbnN0cnVj
dGlvblBvaW50ZXIocmVnaXN0ZXJzKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0SXNOb3RUYWdn
ZWQobWFjaGluZVBDKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRz
IGhhdmUgYSB3YXkgb2YgZGV0ZWN0aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9u
IDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAgICAg
ICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ2lzdGVycykp
CiAgICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVn
aXN0ZXJzKSkKICAgICB7CisgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRyYXBQQyk7CiAgICAg
fQogCiAgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKQEAgLTkzLDYgKzk0LDcgQEAg
dm9pZCBWTVRyYXBzOjp0cnlJbnN0YWxsVHJhcEJyZWFrcG9pbnRzKAogICAgIC8vIElmIHdlJ3Jl
IG5vdCBpbiBKSVQvTExJbnQgY29kZSwgd2UgY2FuJ3QgcnVuIHRoZSBDKysgY29kZSBiZWxvdyBi
ZWNhdXNlIGl0CiAgICAgLy8gbWFsbG9jcywgYW5kIHdlIG11c3QgcHJvdmUgdGhlIEpTIHRocmVh
ZCBpc24ndCBob2xkaW5nIHRoZSBtYWxsb2MgbG9jawogICAgIC8vIHRvIGJlIGFibGUgdG8gZG8g
dGhhdCB3aXRob3V0IHJpc2tpbmcgYSBkZWFkbG9jay4KKyAgICBhc3NlcnRJc05vdFRhZ2dlZCh0
cmFwUEMpOwogICAgIGlmICghaXNKSVRQQyh0cmFwUEMpICYmICFMTEludDo6aXNMTEludFBDKHRy
YXBQQykpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg3LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QmFkQWNjZXNzLCBbXSAoU2ln
bmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0
aW9uIHsKICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsK
IAorICAgICAgICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGNvbnRleHQudHJhcFBDKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCShy
ZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jh
c2hBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDYgKzE0NSw3IEBAIHN0YXRpYyB2b2lk
IGluc3RhbGxDcmFzaEhhbmRsZXIoKQogICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6
SWxsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykg
ewogICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAorICAgICAgICBh
c3NlcnRJc05vdFRhZ2dlZChjb250ZXh0Lm1hY2hpbmVQQyk7CiAgICAgICAgIGlmICghaXNKSVRQ
Qyhjb250ZXh0Lm1hY2hpbmVQQykpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpO
b3RIYW5kbGVkOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAko
cmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyODIsOSArMzI4Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0
b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KIAogICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFj
dGVyRW50cnkgPSBsYWJlbCgpOwogCi0jaWYgQ1BVKEFSTTY0KQotICAgICAgICB0YWdQdHIobGlu
a1JlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICAgICAgdGFnUmV0
dXJuQWRkcmVzcygpOwogCiAgICAgICAgIHRyeVJlYWRVbmljb2RlQ2hhckltcGwocmVnVDApOwog
CkBAIC0zMzQ3LDcgKzMzNDUsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNy
b0Fzc2VtCiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDIg
KiBzaXplb2Yodm9pZCopKSwgb3V0cHV0KTsKICAgICAjZW5kaWYKICNlbGlmIENQVShBUk02NCkK
LSAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBh
aXJzKSB7CiAgICAgICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1Jl
Z2lzdGVyKTsKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4MTAwMDApLCBzdXBwbGVt
ZW50YXJ5UGxhbmVzQmFzZSk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wMy0zMCAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIHBvaW50ZXIgcHJv
ZmlsaW5nIHN1cHBvcnQgaW4gYmFzZWxpbmUgSklUIGFuZCBzdXBwb3J0aW5nIGZpbGVzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjAwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8zOTA1NzMwMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg6CisgICAg
ICAgIC0gUmVtb3ZlIFdURl9QUkVQQVJFX0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTi4g
IEl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisKIDIwMTgtMDMtMzAgIEpGIEJhc3RpZW4gIDxqZmJh
c3RpZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBXVEZfTEFaWV9JTlNUQU5USUFU
RQpJbmRleDogU291cmNlL1dURi93dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaAkocmV2aXNpb24gMjMwMTEx
KQorKysgU291cmNlL1dURi93dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMCArMjksNiBAQAogI2luY2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9Qb2ludGVyUHJl
cGFyYXRpb25zLmg+CiAjZW5kaWYKIAotI2lmbmRlZiBXVEZfUFJFUEFSRV9GVU5DVElPTl9QT0lO
VEVSX0ZPUl9FWEVDVVRJT04KLSNkZWZpbmUgV1RGX1BSRVBBUkVfRlVOQ1RJT05fUE9JTlRFUl9G
T1JfRVhFQ1VUSU9OKHZ0YmxQdHIpIChyZWludGVycHJldF9jYXN0PHZvaWQqPih2dGJsUHRyKSkK
LSNlbmRpZgotCiAjaWZuZGVmIFdURl9QUkVQQVJFX1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElP
TgogI2RlZmluZSBXVEZfUFJFUEFSRV9WVEJMX1BPSU5URVJfRk9SX0lOU1BFQ1RJT04odnRibFB0
cikgKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZ0YmxQdHIpKQogI2VuZGlmCg==
</data>
<flag name="review"
          id="355373"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336907</attachid>
            <date>2018-03-30 21:12:23 -0700</date>
            <delta_ts>2018-03-30 22:01:10 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-184200.patch</filename>
            <type>text/plain</type>
            <size>168506</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBA
QAorMjAxOC0wMy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgaW4gYmFzZWxpbmUgSklUIGFuZCBzdXBwb3J0
aW5nIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg0MjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTA1NzMwMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBUbyBzaW1wbGlmeSBwb2lu
dGVyIHByb2ZpbGluZyBzdXBwb3J0LCB2bUVudHJ5VG9KYXZhU2NyaXB0KCkgbm93IGFsd2F5cyBl
bnRlcnMKKyAgICAgICAgICAgdGhlIGNvZGUgdmlhIHRoZSBhcml0eSBjaGVjayBlbnRyeS4KKyAg
ICAgICAgMi4gVG8gYWNjb21tb2RhdGUgKDEpLCBhbGwgSklUQ29kZSBtdXN0IG5vdyBwb3B1bGF0
ZSB0aGVpciBhcml0eSBjaGVjayBlbnRyeSBjb2RlCisgICAgICAgICAgIHBvaW50ZXJzIGFzIHdl
bGwuICBGb3IgbmF0aXZlIGNvZGUsIHByb2dyYW1zLCBldmFscywgYW5kIG1vZHVsZXMgdGhhdCBk
b24ndAorICAgICAgICAgICBkbyBhcml0eSBjaGVjaywgd2Ugc2V0IHRoZSBub3JtYWwgZW50cnkg
YXMgdGhlIGFyaXR5IGNoZWNrIGVudHJ5ICh0aG91Z2ggd2l0aAorICAgICAgICAgICB0aGUgQ29k
ZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcgcHJvZmlsZSBpbnN0ZWFkKS4KKworICAgICAgICAq
IGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJD
YWxsKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToK
KyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAg
IChKU0M6OlNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjphZGRKSVRBZGRJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjphZGRKSVROZWdJQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkTWF0aElDKToKKyAgICAgICAgKiBieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0
dWJBc0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAg
ICAgIChKU0M6OkxMSW50Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChK
U0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAg
KiBkZmcvREZHSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6
ZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6CisgICAgICAgICogZGlzYXNz
ZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZSk6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICogZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OmNvbXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91
dGluZVNldC5oOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFyayk6CisgICAg
ICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmRlYnVnQ2FsbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRGdW5jdGlvblByb2xvZ3VlKToKKyAgICAgICAgKiBq
aXQvQ0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAg
ICAgIChKU0M6OkNDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdyk6CisgICAgICAg
ICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAg
ICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X211bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9K
SVRDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChK
U0M6OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCk6CisgICAg
ICAgIChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUpOgorICAgICAgICAoSlNDOjpE
aXJlY3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJ
VENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMu
aDoKKyAgICAgICAgKEpTQzo6aXNQcm9maWxlRW1wdHkpOgorICAgICAgICAoSlNDOjpKSVRCaW5h
cnlNYXRoSUM6OkpJVEJpbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkpJVFVuYXJ5TWF0aElD
OjpKSVRVbmFyeU1hdGhJQyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5
R2V0QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdp
dGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6
CisgICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6
aG9zdEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAo
SlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6Cisg
ICAgICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAg
ICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlE
KToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgor
ICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6cmVzZXRH
ZXRCeUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvUmVw
YXRjaC5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChK
U0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3BlY2lh
bGl6ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToKKyAg
ICAgICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5h
dGl2ZVRhaWxDYWxsR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlVGFp
bENhbGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
bmF0aXZlQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aW50ZXJu
YWxGdW5jdGlvbkNhbGxHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppbnRlcm5h
bEZ1bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJp
dHlGaXh1cEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpj
aGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGFyQXRU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5r
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2x6MzJUaHVua0dlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OmZsb29yVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpjZWlsVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnVuY1RodW5r
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjph
YnNUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVy
YXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJhbmRvbVRodW5rR2VuZXJhdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6CisgICAg
ICAgIChKU0M6OkxMSW50OjpnZXRDb2RlUHRyKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5
cG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAg
ICAgICAoSlNDOjpMTEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpM
TEludDo6c2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAg
ICogbGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJhdGVU
aHVua1dpdGhKdW1wVG8pOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZl
RnVuY3Rpb246OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0
aXZlRnVuY3Rpb246Om9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1l
L1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q2FjaGVhYmxlQ3VzdG9tKToKKyAgICAg
ICAgKiBydW50aW1lL1B0clRhZy5oOgorICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90
Lmg6CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tVmFsdWUpOgorICAg
ICAgICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbUFjY2Vzc29yKToKKyAgICAgICAg
KiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1By
b2ZpbGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAg
ICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6
Vk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICogdG9vbHMvU2ln
aWxsQ3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFzaEhhbmRsZXIp
OgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJH
ZW5lcmF0b3I6OmdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIpOgorICAgICAg
ICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKwogMjAxOC0wMy0z
MCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1i
bHk6IHN1cHBvcnQgRGF0YVZpZXcgY29tcGlsYXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcyLDcgKzg3Miw2IEBAIHB1
YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZh
bHVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiByZW1vdmUg
dGhlIGRlZmF1bHQgUHRyVGFnIHZhbHVlIG9uY2Ugd2UndmUgdGFnZ2VkIGFsbCB0aGUgY2xpZW50
cy4KICAgICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJs
ZXJMYWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5vUHRyVGFnKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHRhZ0NvZGVQdHIoQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBs
YWJlbCksIHRhZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2Fi
bGUpKTsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAg
ICAgcmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJB
ZGRyZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSwgTmVhckNhbGxQdHJUYWcp
LAorICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXI6Omdl
dExpbmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSwKICAgICAg
ICAgICAgIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpID8gTmVhckNhbGxNb2RlOjpUYWlsIDog
TmVhckNhbGxNb2RlOjpSZWd1bGFyKTsKICAgICB9CiAKQEAgLTE5MSw3ICsxOTEsNiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0
TGlua2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpKSk7
CiAgICAgfQogCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgZGVmYXVsdCBQdHJUYWcgdmFsdWUg
b25jZSB3ZSd2ZSB0YWdnZWQgYWxsIHRoZSBjbGllbnRzLgogICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxvY2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7CiAg
ICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2Vy
QWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpLCB0YWcpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3NCw3ICsz
Nzc0LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0
KENvZGVMb2NhdGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0
cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsLmRhdGFMb2NhdGlvbigpKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIHJldHVybiBG
dW5jdGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIoQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdl
dChjYWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGxh
Y2VXaXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCkBAIC00NDQy
LDEwICs0NDQyLDEzIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0Zs
YWdTZXQoQ2FsbDo6TmVhcikpCiAgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNv
ZGUsIGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9J
TlRFUiksIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBlbHNlIGlmIChj
YWxsLmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6VGFpbCkpIHsKKyAgICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChj
b2RlLCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAg
ICBlbHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChm
dW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlu
a0NhbGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIENhY2hlZFRlbXBSZWdpc3RlciBtX2RhdGFNZW1vcnlU
ZW1wUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Nyw3ICs4NjcsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAjZW5kaWYKICAgICAg
ICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENh
bGxGcmFtZSk7CiAKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJh
dGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcg
PSBwdHJUYWcoR2V0dGVyU2V0dGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgICAg
ICBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRl
clNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBh
cmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MSwxMCArNjEsMTEgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50czxGdW5jdGlvblR5cGU+KHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cyku
Li4pOwogCi0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNh
bGwoTm9QdHJUYWcpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0
clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0
aW9uQ2FsbCA9IGppdC5jYWxsKHRhZyk7CiAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBtX2Z1bmN0
aW9uOwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25Q
dHIoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxs
LCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGpp
dC5zZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMw
LDI0ICsxNDMwLDI0IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYK
ICAgICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCi1KSVRBZGRJQyog
Q29kZUJsb2NrOjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0pJVEFk
ZElDKiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0
aFByb2ZpbGUpOworICAgIHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVj
dGlvbik7CiB9CiAKLUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEFyaXRoUHJvZmls
ZSogYXJpdGhQcm9maWxlKQorSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBy
ZXR1cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIG1fbXVsSUNzLmFk
ZChhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKIH0KIAotSklUU3ViSUMqIENvZGVCbG9jazo6
YWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCitKSVRTdWJJQyogQ29kZUJs
b2NrOjphZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQogewotICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsK
KyAgICByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogfQog
Ci1KSVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSkKK0pJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbmVn
SUNzLmFkZChhcml0aFByb2ZpbGUpOworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9m
aWxlLCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZp
bmRTdHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
OCwyMiArMjQ4LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbElu
Zm9NYXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRBZGRJQyogYWRk
SklUQWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRo
UHJvZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqKTsKLSAg
ICBKSVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUQWRkSUMqIGFk
ZEpJVEFkZElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTXVsSUMqIGFk
ZEpJVE11bElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTmVnSUMqIGFk
ZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUU3ViSUMqIGFk
ZEpJVFN1YklDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CiAKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAg
ICBKSVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRk
SklUQWRkSUMocHJvZmlsZSk7IH0KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmls
ZSogcHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJldHVybiBhZGRKSVRBZGRJ
Qyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdl
bmVyYXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE11bElDKiBh
ZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9m
aWxlKTsgfQorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlLCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUsIGlu
c3RydWN0aW9uKTsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5h
bWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVRO
ZWdHZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTmVnSUMqIGFkZE1hdGhJQyhBcml0
aFByb2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisgICAg
SklUTmVnSUMqIGFkZE1hdGhJQyhBcml0aFByb2ZpbGUqIHByb2ZpbGUsIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOyB9
CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46
OnZhbHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJv
ZmlsZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRk
TWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7
IHJldHVybiBhZGRKSVRTdWJJQyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBhdXRvIHN0dWJJbmZv
QmVnaW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CkBAIC0zMTAsNiArMzEwLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgIH0KICAg
ICAKKyAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247CisgICAgdHlwZWRl
ZiBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiYg
VW5wYWNrZWRJbnN0cnVjdGlvbnM7CisKICAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0QnlJ
ZENhY2hlKEluc3RydWN0aW9uKik7CiAKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0
cnVjdGlvbiogcmV0dXJuQWRkcmVzcykKQEAgLTMxOCw5ICszMjEsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVybkFkZHJlc3MpIC0gaW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB9CiAKLSAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rp
b24gSW5zdHJ1Y3Rpb247Ci0gICAgdHlwZWRlZiBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2Rl
QmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rp
b25zLnNpemUoKTsgfQogICAgIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNv
biwgSW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQogICAgIGNvbnN0IFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5z
dHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9JbmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9p
ZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydQogICAgIFJFTEVBU0VfQVNTRVJU
KGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0
KTsKIAotICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgIklubGlu
ZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBOZWFySnVtcFB0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBq
dW1wIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIzMDEx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5m
byA6IHB1YmxpYyBCYXNpY1IKICAgICB7CiAgICAgICAgIGNhbGxlZS5jbGVhcigpOwogICAgICAg
ICBtYWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgICAgICBj
YWxsUHRyVGFnID0gTm9QdHJUYWc7CiAgICAgICAgIGlmIChpc09uTGlzdCgpKQogICAgICAgICAg
ICAgcmVtb3ZlKCk7CiAgICAgfQpAQCAtNTksNyArNTgsNiBAQCBzdHJ1Y3QgTExJbnRDYWxsTGlu
a0luZm8gOiBwdWJsaWMgQmFzaWNSCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7
CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBsYXN0U2VlbkNhbGxlZTsKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbWFjaGluZUNvZGVUYXJnZXQ7Ci0gICAgUHRyVGFnIGNhbGxQdHJUYWcg
eyBOb1B0clRhZyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMCArMTk5LDExIEBAIHZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhj
ZXB0aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1
cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgUHRy
VGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0
LT5jYWxsKHRhZyk7CiAgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxp
bmsobG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIE5v
UHRyVGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9u
SGFuZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3Zt
KTsKICAgICB9CkBAIC01MzgsNyArNTM5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5
bW9ycGhpY0FjY2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JF
eGl0RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAg
ICAgICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAg
ICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAg
IGhhbmRsZXJUb1JlZ2lzdGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobWFr
ZXNoaWZ0Q2F0Y2hIYW5kbGVyLCBOZWFySnVtcFB0clRhZyk7CiAgICAgICAgICAgICAgICAgaGFu
ZGxlclRvUmVnaXN0ZXIuc3RhcnQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMo
KTsKICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5lbmQgPSBuZXdFeGNlcHRpb25I
YW5kbGluZ0NhbGxTaXRlLmJpdHMoKSArIDE7CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5h
cHBlbmRFeGNlcHRpb25IYW5kbGVyKGhhbmRsZXJUb1JlZ2lzdGVyKTsKQEAgLTU2OCw3ICs1Njks
NyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIGRh
dGFMb2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2NrLCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjog
R2VuZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMp
LCAiXG4iKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09E
RV9GT1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTm9QdHJUYWcsCisgICAgICAg
IGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICIlcyIsIHRv
Q1N0cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29k
ZU9yaWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3RE
dW1wKGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZp
c2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDggQEAgc2l6ZV90IEpJVEZpbmFsaXpl
cjo6Y29kZVNpemUoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIG1f
aml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCpt
X2xpbmtCdWZmZXIsIE5vUHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhD
b2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5k
YXRhKCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBD
b2RlRW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7
CisgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihjb2RlUmVmLCBjb2RlUmVmLnJldGFn
Z2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSk7
CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJl
ZigpKTsKICAgICAKQEAgLTcxLDcgKzcwLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1w
dHlWYWx1ZSgpKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBG
SU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBOb1B0clRhZywgIkRGRyBKSVQgY29kZSBm
b3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywg
SklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1f
bGlua0J1ZmZlciwgQ29kZUVudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdK
SVQpKS5kYXRhKCkpLAogICAgICAgICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzY5LDggKzM3NjksMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVn
ID0gdHJ1ZTsKICNlbmRpZgogCi0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2pp
dC5ncmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklU
QWRkSUMoYXJpdGhQcm9maWxlKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0g
bV9qaXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFy
aXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KTsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsK
KyAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlLCBpbnN0cnVjdGlvbik7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBv
cGVyYXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9u
ID0gb3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00NDM0LDggKzQ0MzYsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICBib29sIG5lZWRzU2Ny
YXRjaEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNl
bWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5j
b2RlQmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9y
aWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUU3ViSUMqIHN1YklDID0g
bV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24p
OwogICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0
aW1pemU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFs
dWVTdWI7CiAgICAgICAgIApAQCAtNDUyMyw4ICs0NTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAg
ICAgSklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRo
UHJvZmlsZSk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07
CisgICAgICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJ
Qyhhcml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVu
Y3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJl
cGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgICAgICBib29sIG5l
ZWRzU2NyYXRjaEdQUlJlZyA9IHRydWU7CkBAIC00Nzg4LDggKzQ3OTQsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICBib29sIG5lZWRzU2NyYXRj
aEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUTXVsSUMqIG11bElDID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1p
emU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVN
dWw7CiAgICAgICAgIApAQCAtOTkwMCw3ICs5OTA4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdFN3aXRjaEludEp1bXAoCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdC54b3I2NChw
b2lzb25TY3JhdGNoLCBzY3JhdGNoKTsKICNlbmRpZgotICAgIG1faml0Lmp1bXAoc2NyYXRjaCwg
Tm9QdHJUYWcpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0
YWJsZSk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCB0YWcpOwogICAgIGRhdGEtPmRpZFVzZUp1
bXBUYWJsZSA9IHRydWU7CiB9CiAKQEAgLTk5MjUsNyArOTkzNCw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gdGVt
cDIuZ3ByKCk7CiAKICAgICAgICAgdmFsdWUudXNlKCk7Ci0gICAgICAgIAorCisgICAgICAgIFNp
bXBsZUp1bXBUYWJsZSYgdGFibGUgPSBtX2ppdC5jb2RlQmxvY2soKS0+c3dpdGNoSnVtcFRhYmxl
KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3
aXRjaFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBhdXRvIG5vdEludDMyID0gbV9qaXQu
YnJhbmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwogICAgICAgICBlbWl0U3dpdGNoSW50SnVtcChk
YXRhLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoLCBzY3JhdGNoMik7CiAgICAgICAg
IG5vdEludDMyLmxpbmsoJm1faml0KTsKQEAgLTk5MzQsNyArOTk0NSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1ZVJlZ3MsIGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7
CiAKLSAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBOb1B0clRhZyk7CisgICAgICAgIG1faml0
Lmp1bXAoc2NyYXRjaCwgdGFnKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTAxOTIsMTIgKzEw
MjAzLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICAg
ICAgdG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9CiAgICAgCisgICAgYXV0
byogY29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CiAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3
aXRjaCB8fCB0b3RhbExlbmd0aCA+IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hU
b3RhbExlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAg
ICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKICAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAg
IG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEt
PnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwotICAgICAgICBtX2ppdC5qdW1wKHN0cmluZywgTm9QdHJUYWcpOworICAgICAgICBtX2pp
dC5qdW1wKHN0cmluZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEw
MjMwLDEyICsxMDI0NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5n
T25TCiAgICAgZW1pdEJpbmFyeVN3aXRjaFN0cmluZ1JlY3Vyc2UoCiAgICAgICAgIGRhdGEsIGNh
c2VzLCAwLCAwLCBjYXNlcy5zaXplKCksIHN0cmluZywgbGVuZ3RoR1BSLCB0ZW1wR1BSLCAwLCBm
YWxzZSk7CiAgICAgCisgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgIFB0clRhZyB0
YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CisKICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0cmluZyk7CiAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3RhdGljX2Nhc3Q8
c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICBzaWxlbnRGaWxs
QWxsUmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBtX2ppdC5q
dW1wKHN0cmluZywgTm9QdHJUYWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOwogfQog
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vZGUqIG5vZGUsIFN3aXRj
aERhdGEqIGRhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FS
TTY0RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBib29sIHRyeVRvRGlzYXNzZW1ibGUo
Y29uc3QgTWFjcm9Bc3NlbWJsCiB7CiAgICAgQTY0RE9wY29kZSBhcm02NE9wY29kZTsKIAotICAg
IHVpbnQzMl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29kZVB0
ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50MzJfdCogY3VycmVudFBDID0gcmVtb3Zl
Q29kZVB0clRhZzx1aW50MzJfdCo+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAg
c2l6ZV90IGJ5dGVDb3VudCA9IHNpemU7CiAKICAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZp
c2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE4ICs3MywxOCBAQCBib29sIEpJVEZpbmFsaXpl
cjo6ZmluYWxpemVDb21tb24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxk
RHVtcERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAot
ICAgIGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYo
Ci0gICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBDb2RlRW50
cnlQdHJUYWcsCi0gICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRh
dGEoKSkpOwotCi0gICAgaWYgKGVudHJ5cG9pbnRMaW5rQnVmZmVyKSB7Ci0gICAgICAgIGppdENv
ZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKLSAgICAgICAgICAgIEZJTkFMSVpF
X0NPREVfSUYoCi0gICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExp
bmtCdWZmZXIsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLAotICAgICAgICAgICAgICAg
ICJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAl
cCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRD
b2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSk7Ci0gICAgfQotICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBiM0NvZGVSZWYgPQorICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1
bXBEaXNhc3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVFbnRyeVB0clRhZywKKyAgICAg
ICAgICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5
cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVm
ZmVyCisgICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBv
aW50TGlua0J1ZmZlciwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsCisgICAgICAgICAg
ICAiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQg
JXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKKyAgICAgICAgOiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYucmV0YWdnZWRDb2Rl
KENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpKTsKKworICAg
IGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKKyAgICBqaXRDb2RlLT5pbml0
aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOworCiAgICAgbV9w
bGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZSgqaml0Q29kZSk7CiAKICAgICBpZiAoVU5MSUtFTFko
bV9wbGFuLmNvbXBpbGF0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwNSwx
NCArMTgwNSwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQogICAg
IHsKLSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAg
ICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eF07CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRP
cHRpbWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZDsKLSAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwor
ICAgICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVEFkZEdlbmVyYXRvcj4oYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbiwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+Ci0gICAgdm9pZCBj
b21waWxlVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEZ1bmN0aW9uUHRy
IHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1bmMxLCB0eXBlbmFt
ZSBGdW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZnVu
Y3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5cGU+Ojp2YWx1ZSAm
JiBzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8RnVuYzI+Ojp0
eXBlPjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZVVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIEZ1bmMxIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgRnVuYzIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogICAgIHsKICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fbm9kZTsKIApAQCAtMTgzOCw3ICsxODQxLDcgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAg
ICAgICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2Rl
QmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAg
ICAgICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCkt
PmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICAgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFy
YW1zWzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2Ny
YXRjaCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBm
YWxzZTsKQEAgLTE4OTYsOCArMTg5OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUo
cGF0Y2hwb2ludCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4K
LSAgICB2b2lkIGNvbXBpbGVCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUs
IEZ1bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGlu
Z0Z1bmN0aW9uKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1
bmMxLCB0eXBlbmFtZSBGdW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5
cGU+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50
ZXI8RnVuYzI+Ojp0eXBlPjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZUJpbmFyeU1hdGhJQyhB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBGdW5j
MSByZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmMyIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKICAgICB7
CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIApAQCAtMTkzMSw3ICsxOTM1
LDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVy
YXRpb25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0
b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdl
bmVyYXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0u
Z3ByKCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkp
LCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAg
ICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDAp
LCBJbnZhbGlkRlBSUmVnKTsKQEAgLTIwNjIsMTAgKzIwNjYsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9y
KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVC
bG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CiAgICAg
ICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1p
emU7CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZh
bHVlU3ViOwotICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+
KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24p
OworICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIxNTYsMTAgKzIx
NjIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTog
ewotICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdy
YXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxT
dGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CisgICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJs
b2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuYnl0ZWNvZGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9
IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hp
bmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwotICAgICAgICAgICAgY29tcGlsZUJpbmFy
eU1hdGhJQzxKSVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9u
LCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJ
QzxKSVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdG
dW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKQEAgLTI3MzcsMTAgKzI3NDUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKTsKLSAgICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0g
bV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOworICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21fbm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXhdOwogICAgICAgICAgICAgYXV0byByZXBhdGNo
aW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICAgICAg
YXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKLSAgICAg
ICAgICAgIGNvbXBpbGVVbmFyeU1hdGhJQzxKSVROZWdHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwg
cmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAg
Y29tcGlsZVVuYXJ5TWF0aElDPEpJVE5lZ0dlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBpbnN0cnVj
dGlvbiwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRp
ZGF0ZUFkZHJlc3MpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgdWludHB0cl90
IGFkZHJlc3MgPSByZW1vdmVDb2RlUHRyVGFnPHVpbnRwdHJfdD4oY2FuZGlkYXRlQWRkcmVzcyk7
CiAgICAgICAgIGlmICghSklUU3R1YlJvdXRpbmU6OnBhc3Nlc0ZpbHRlcihhZGRyZXNzKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0Niw4ICszNDYsOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enoo
CiAjZWxzZQogICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CiAjZW5kaWYKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9u
UHRyKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enosIFNsb3dQYXRoUHRyVGFnKSksIEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIFNsb3dQYXRoUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJ
VE9wZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiwgdGFnKSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIsIHRhZyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1Q
dHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVn
VDApOwpAQCAtOTQwLDggKzk0MSw5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwo
Vk0mIHZtLCAKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv
cm0uIgogI2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihmdW5j
dGlvbiwgU2xvd1BhdGhQdHJUYWcpKSwgc2NyYXRjaCk7Ci0gICAgY2FsbChzY3JhdGNoLCBTbG93
UGF0aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcs
IG5leHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KGZ1bmN0aW9uLCB0YWcpKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCB0YWcpOwogCiAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0
aCgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0
ciksIEdQUkluZm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUyOSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHsKKyAg
ICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJS
ZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
OCArNTksOSBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAg
bG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsKICAgICBK
dW1wIG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0u
c2hhZG93Q2hpY2tlbigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUo
b3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpPigpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIFNs
b3dQYXRoUHRyVGFnKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKLSAgICBjYWxsKHNjcmF0Y2gxTm9u
QXJnR1BSLCBTbG93UGF0aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVy
YXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFn
Q0Z1bmN0aW9uUHRyKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB0YWcpKSwgc2Ny
YXRjaDFOb25BcmdHUFIpOworICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIHRhZyk7CiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3Io
KSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25B
cmdHUFIpLCBzaGFkb3dQYWNrZXQpOwogICAgIG9rLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4Niw4ICs1ODYsMTIgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBj
dXJyZW50IGZyYW1lIGJleW9uZCB0aGlzIHBvaW50LiBNYXNxdWVyYWRlIGFzIG91cgogICAgICAg
ICAvLyBjYWxsZXIuCiAjaWYgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KQotICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLCBsaW5rUmVnaXN0
ZXIpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxG
cmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7CiAgICAgICAgIHN1YlB0cihU
cnVzdGVkSW1tMzIoMiAqIHNpemVvZih2b2lkKikpLCBuZXdGcmFtZVNpemVHUFIpOworI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIs
IHRlbXBHUFIpOworICAgICAgICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHRlbXBHUFIpOworI2Vu
ZGlmCiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRl
clJlZ2lzdGVyLCBzaXplb2Yodm9pZCopKSwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKICAgICAg
ICAgc3ViUHRyKFRydXN0ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSksIG5ld0ZyYW1lU2l6ZUdQ
Uik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NDYsOCArNDQ2LDE0IEBA
IHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKIAogICAgIC8vIFdlIGxv
YWQgdGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZl
IG9uZQogI2lmIENQVShBUk0pIHx8IENQVShBUk02NCkKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwg
c2l6ZW9mKHZvaWQqKSksCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJu
UENPZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOworI2lm
IFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIG1faml0LnVudGFnUHRyKE1hY3JvQXNzZW1ibGVy
OjpsaW5rUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxl
ckZyYW1lQW5kUEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNl
bmRpZgorCiAjZWxpZiBDUFUoTUlQUykKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZv
aWQqKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiArMjM4LDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAKKyAgICAgICAgaml0LnRh
Z1JldHVybkFkZHJlc3MoKTsKICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIod3JpdGFibGVBZGRyKSwgeDcpOwogICAgICAgICBqaXQuYWRkUHRyKHg3LCB4MCk7
CiAKQEAgLTI5OCw3ICsyOTksOCBAQCBwcml2YXRlOgogICAgICAgICAvLyB0byBhcHBlYXIgaW4g
dGhlIGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1
ZmZlci4KICAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0
aGUgY29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5nIHRoZQogICAgICAgICAvLyBhc3luY0Rpc2Fz
c2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9u
bHkuCi0gICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseShOb1B0clRhZyk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUV3JpdGVUaHVu
a1B0clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJu
IGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRhZyk7CiAgICAgfQog
I2Vsc2UgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElP
TikKICAgICBzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQs
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMzAxMTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkpJVENvbXBpbGF0aW9uRWZmb3J0LmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8
c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTkwLDcgKzkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkKiBw
ZXJmb3JtSklUTWVtY3B5KHZvaQogICAgICAgICAgICAgLy8gVXNlIGV4ZWN1dGUtb25seSB3cml0
ZSB0aHVuayBmb3Igd3JpdGVzIGluc2lkZSB0aGUgSklUIHJlZ2lvbi4gVGhpcyBpcyBhIHZhcmlh
bnQgb2YKICAgICAgICAgICAgIC8vIG1lbWNweSB0aGF0IHRha2VzIGFuIG9mZnNldCBpbnRvIHRo
ZSBKSVQgcmVnaW9uIGFzIGl0cyBkZXN0aW5hdGlvbiAoZmlyc3QpIHBhcmFtZXRlci4KICAgICAg
ICAgICAgIG9mZl90IG9mZnNldCA9IChvZmZfdCkoKHVpbnRwdHJfdClkc3QgLSBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCk7Ci0gICAgICAgICAgICBqaXRXcml0ZVNlcGFyYXRlSGVh
cHNGdW5jdGlvbihvZmZzZXQsIHNyYywgbik7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRy
VGFnKEpJVFdyaXRlVGh1bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbik7
CisgICAgICAgICAgICByZXRhZ0NvZGVQdHIoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24s
IHRhZywgQ0Z1bmN0aW9uUHRyVGFnKShvZmZzZXQsIHNyYywgbik7CiAgICAgICAgICAgICByZXR1
cm4gZHN0OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NDksOCArNjQ5LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRo
b3V0TGlua2luZyhKSVRDb21waQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
LmFwcGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CiAKKyAgICBMYWJl
bCBlbnRyeUxhYmVsKHRoaXMpOwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgbV9k
aXNhc3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOworICAgICAgICBtX2Rpc2Fzc2Vt
Ymxlci0+c2V0U3RhcnRPZkNvZGUoZW50cnlMYWJlbCk7CiAKICAgICAvLyBKdXN0IGFkZCBhIGxp
dHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUgY29kZWdlbgogICAgIGlmIChyYW5kb20oKSAm
IDEpCkBAIC03MzUsMTUgKzczNiwzMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5n
KEpJVENvbXBpCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAg
ICAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworI2lmIENQVShBUk02NCkg
JiYgVVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZy
YW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7
CisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwg
Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVy
LCByZWdUMSk7CisgICAgICAgIFB0clRhZyB0ZW1wVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFn
LCBuZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0ZW1wVGFnKSwg
cmVnVDEpOworICAgICAgICB0YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIHN0
b3JlUHRyKGxpbmtSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1l
OjpyZXR1cm5QQ09mZnNldCgpKSk7CisjZW5kaWYKICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQ
UiwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5n
ZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIGVtaXROYWtl
ZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUo
cHRyVGFnKEpJVFRodW5rUHRyVGFnLCBtX3ZtKSwgTmVhckNhbGxQdHJUYWcpKTsKKyNpZiBDUFUo
QVJNNjQpICYmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpLCBsaW5rUmVn
aXN0ZXIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGVtcFRhZyksIHJlZ1QxKTsKKyAg
ICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIGFkZFB0cihUcnVz
dGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJl
Z1QxKTsKKyAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBzdG9y
ZVB0cihsaW5rUmVnaXN0ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6
cmV0dXJuUENPZmZzZXQoKSkpOworI2VuZGlmCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
ICAgIG1fYnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRz
LgogI2VuZGlmCiAKICAgICAgICAganVtcChiZWdpbkxhYmVsKTsKLSAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIG1fYXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5vdCBhIGZ1bmN0aW9uLgog
CiAgICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTc4NCwyMyArODAz
LDI4IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAgICBBU1NFUlQo
cmVjb3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0g
U3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVt
cFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1
bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHMuc2l6ZSgpKTsKIAotICAgICAgICAg
ICAgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRP
ZmZzZXRdLCBOb1B0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBzaW1wbGVKdW1wVGFibGUgPSBy
ZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHNpbXBsZUp1bXBUYWJsZSk7CisgICAgICAgICAg
ICBzaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1f
bGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdLCB0YWcpOwogCiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1w
bGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJh
bmNoT2Zmc2V0c1tqXTsKLSAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1
bXBUYWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
bV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0clRhZykgOiByZWNvcmQuanVt
cFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBzaW1w
bGVKdW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAg
PyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0
XSwgdGFnKQorICAgICAgICAgICAgICAgICAgICA6IHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVs
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChy
ZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OlN0cmluZyk7CiAKICAgICAgICAgICAgIGF1dG8q
IHN0cmluZ0p1bXBUYWJsZSA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlOworICAg
ICAgICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc3RyaW5nSnVt
cFRhYmxlKTsKICAgICAgICAgICAgIHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9Ci0gICAg
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNl
dCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVm
YXVsdE9mZnNldF0sIHRhZyk7CiAKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiBz
dHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24uYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAg
IGxvY2F0aW9uLmN0aU9mZnNldCA9IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/IHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0
clRhZykKKyAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFi
ZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgdGFnKQogICAgICAgICAgICAgICAgICAgICA6
IHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtODMyLDkgKzg1Niw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAg
ICAgICBpZiAoSnVtcChwYXRjaGFibGVOb3RJbmRleEp1bXApLmlzU2V0KCkpCiAgICAgICAgICAg
ICAgICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlv
bk9mKHBhdGNoYWJsZU5vdEluZGV4SnVtcCkpOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVt
cCBiYWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihi
eVZhbENvbXBpbGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxh
dGlvbkluZm8uZG9uZVRhcmdldCwgTm9QdHJUYWcpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29t
cGlsYXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0LCBOb1B0clRhZyk7Ci0gICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
YnlWYWxDb21waWxhdGlvbkluZm8uc2xvd1BhdGhUYXJnZXQsIE5vUHRyVGFnKTsKKyAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KGJ5VmFsQ29tcGlsYXRpb25JbmZvLmRvbmVUYXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFs
Q29tcGlsYXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENv
bXBpbGF0aW9uSW5mby5zbG93UGF0aFRhcmdldCk7CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25D
YWxsIHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRp
b25JbmZvLnJldHVybkFkZHJlc3MpOwogCiAgICAgICAgICAgICAqYnlWYWxDb21waWxhdGlvbklu
Zm8uYnlWYWxJbmZvID0gQnlWYWxJbmZvKApAQCAtODY1LDkgKzg4OSw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6bGluaygpCiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFw
KGppdENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciB3aXRoQXJpdHlDaGVjazsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlKQotICAgICAgICB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9u
T2YobV9hcml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
ZihtX2FyaXR5Q2hlY2ssIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKIAogICAgIGlm
IChPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+
ZHVtcChwYXRjaEJ1ZmZlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFy
aXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
QXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTQsNyArNTE0LDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIAogdm9pZCBKSVQ6OmVt
aXRfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJp
dGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMo
Y3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9j
ay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OwogICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdh
dGVJQyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3QobmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQpA
QCAtNjYyLDcgKzY2Miw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRP
cGUKIHZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSklUQWRkSUMqIGFkZElDID0g
bV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFk
ZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgYWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTcw
NSwxMSArNzA1LDEyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwK
IAogICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUo
KnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVD
b2RlKSB7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50
SW5zdHJ1Y3Rpb24pOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJ
Qy0+YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmls
ZWRGdW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0
YWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIE5v
UHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25X
aXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncyk7
CiAgICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aEp1bXBzKTsKIApAQCAtNzc4LDExICs3NzksMTIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRo
SUNGYXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIGxlZnRSZWdzKTsKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3Qo
KSkKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwor
ICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0
aW9uKTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRo
UHJvZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlv
biwgdGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9m
aWxlZEZ1bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9u
LCB0YWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAg
ICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAK
QEAgLTgxNywxNCArODE5LDE1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1h
dGhJQzwKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBQ
dHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAg
ICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAg
ICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAg
aWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3Bl
cmF0aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHRhZywgcmVzdWx0UmVncywg
c3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBh
cml0aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRo
Q2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVz
dWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0
aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0
KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiks
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwor
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRj
aEZ1bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJ
QykpOwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9
IGxhYmVsKCk7CkBAIC04ODMsMTQgKzg4NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3co
SklUQmluYXJ5TWF0aElDCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRp
ZgogCisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWlj
Pihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVn
cywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJp
dHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9u
KSwgY2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0
YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rp
b24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIGNhbGxUYWcsIHJlc3VsdFJl
Z3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rp
b24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZElt
bVB0cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9F
SkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTk3Nyw3ICs5ODEsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJVDo6ZW1p
dF9vcF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBcml0aFBy
b2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRK
SVRNdWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2Nr
LT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgbV9p
bnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBl
bWl0TWF0aElDRmFzdChtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11
bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC05OTMsNyArOTk3LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChJbnN0cnVjdGlvbiogYwogdm9pZCBKSVQ6OmVtaXRfb3Bf
c3ViKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudElu
c3RydWN0aW9uKTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3Vi
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRk
SklUU3ViSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1h
dGhJQ0Zhc3Qoc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsMTMgKzcxLDcgQEAgSlNWYWx1
ZSBKSVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogewogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwotICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oKnZtLCBwcm90
b0NhbGxGcmFtZS0+Y2FsbGVlKCkpOwotCi0gICAgaWYgKCFmdW5jdGlvbiB8fCAhcHJvdG9DYWxs
RnJhbWUtPm5lZWRBcml0eUNoZWNrKCkpIHsKLSAgICAgICAgQVNTRVJUKCFwcm90b0NhbGxGcmFt
ZS0+bmVlZEFyaXR5Q2hlY2soKSk7Ci0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGV4ZWN1dGFibGVB
ZGRyZXNzKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JD
YWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVudHJ5QWRkcmVz
cyA9IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb0phdmFTY3JpcHQo
ZW50cnlBZGRyZXNzLCB2bSwgcHJvdG9DYWxsRnJhbWUpKTsKICAgICByZXR1cm4gc2NvcGUuZXhj
ZXB0aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsKIH0KQEAgLTEyNyw3ICsxMjEsMTIgQEAgSklU
Q29kZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKAogdm9pZCogSklUQ29kZVdpdGhD
b2RlUmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9yZWYpOwotICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3M8Y2hhcio+KCkgKyBvZmZzZXQ7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVm
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIGlmICgh
b2Zmc2V0KQorICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisKKyAgICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9y
ZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgcmV0
dXJuIHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVFbnRyeVB0clRh
Zyk7CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChz
aXplX3Qgb2Zmc2V0KQpAQCAtMTY2LDYgKzE2NSw4IEBAIERpcmVjdEpJVENvZGU6OkRpcmVjdEpJ
VENvZGUoSklUQ29kZTo6Q28KICAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUp
CiAgICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQogeworICAgIEFTU0VSVCht
X3JlZik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBEaXJlY3RKSVRDb2Rl
Ojp+RGlyZWN0SklUQ29kZSgpCkBAIC0xNzcsNiArMTc4LDggQEAgdm9pZCBEaXJlY3RKSVRDb2Rl
Ojppbml0aWFsaXplQ29kZVJlZihKSQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CiAgICAg
bV9yZWYgPSByZWY7CiAgICAgbV93aXRoQXJpdHlDaGVjayA9IHdpdGhBcml0eUNoZWNrOworICAg
IEFTU0VSVChtX3JlZik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBKSVRD
b2RlOjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2Rl
IGFyaXR5KQpAQCAtMjEzLDEwICsyMTYsMTcgQEAgdm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFs
aXplQ29kZVJlZihDbwogICAgIG1fcmVmID0gcmVmOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIE5h
dGl2ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKQorSklUQ29kZTo6Q29k
ZVB0ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKLSAgICByZXR1cm4gbV9yZWYuY29kZSgp
OworICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAg
Y2FzZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7
CisgICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgcmV0dXJuIG1fcmVmLnJldGFnZ2Vk
Q29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0
cigpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDYg
Kzg2LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQogICAgIAog
ICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKIAorICAgIGFzc2VydElzVGFnZ2Vk
V2l0aChjYXRjaFJvdXRpbmUsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHZtLT5jYWxs
RnJhbWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKICAgICB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhy
b3cgPSBjYXRjaFJvdXRpbmU7CiAgICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9
IGNhdGNoUENGb3JJbnRlcnByZXRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUTWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRNYXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOSBAQCB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yVHlwZSwgYm9vbCgqCiBjbGFzcyBKSVRNYXRoSUMgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpJVE1hdGhJQyhBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSkKKyAgICBKSVRNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUs
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICAgICAgOiBtX2FyaXRoUHJvZmlsZShhcml0
aFByb2ZpbGUpCisgICAgICAgICwgbV9pbnN0cnVjdGlvbihpbnN0cnVjdGlvbikKICAgICB7CiAg
ICAgfQogCkBAIC0xMzksMTEgKzE0MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LmRhdGFMb2NhdGlvbigpLCBqaXQubV9h
c3NlbWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwg
bmVlZHNCcmFuY2hDb21wYWN0aW9uKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtC
dWZmZXIuaXNWYWxpZCgpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2Rl
TG9jYXRpb25MYWJlbChtX2NvZGUuY29kZSgpKSk7Ci0gICAgICAgICAgICBGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBsaW5raW5nIGNvbnN0YW50IGp1bXAg
dG8gb3V0IG9mIGxpbmUgc3R1YiIpOworICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOZWFySnVtcFB0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25zdGFudCBqdW1wIHRv
IG91dCBvZiBsaW5lIHN0dWIiKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIHJlcGxhY2VD
YWxsID0gWyZdICgpIHsKLSAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGNhbGxSZXBsYWNlbWVudCk7CisgICAgICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbV9pbnN0cnVjdGlvbik7Cisg
ICAgICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzbG93UGF0aENh
bGxMb2NhdGlvbigpLCBGdW5jdGlvblB0cihjYWxsUmVwbGFjZW1lbnQsIHRhZykpOwogICAgICAg
ICB9OwogCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwpAQCAtMTY2LDcgKzE2OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRv
bmVMb2NhdGlvbigpKTsKIAogICAgICAgICAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9D
T0RFX0ZPUigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwg
Tm9QdHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJQyBzbmlw
cGV0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5l
YXJKdW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMg
c25pcHBldCIpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29u
J3QgbmVlZCB0byByZWdlbmVyYXRlLCBzbyB3ZSBjYW4gd2lyZSB0aGUgc2xvdyBwYXRoIGNhbGwK
QEAgLTIwOCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
c2xvd1BhdGhKdW1wTGlzdCwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogCiAgICAgICAgICAg
ICBtX2NvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ss
IGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5l
IElDIHNuaXBwZXQiKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5l
YXJKdW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBw
ZXQiKTsKICAgICAgICAgfQogCiAgICAgICAgIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0KCk7
CkBAIC0yMTYsNyArMjE4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZUlubGluZUNv
ZGUoY29uc3QgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikKICAgICB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoU3RhcnQsIE5vUHRyVGFnKTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuZmFzdFBh
dGhTdGFydCwgTmVhckp1bXBQdHJUYWcpOwogICAgICAgICBtX2lubGluZVN0YXJ0ID0gc3RhcnQ7
CiAKICAgICAgICAgbV9pbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3
ZWVuQ29kZVB0cigKQEAgLTIyNiw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGVsdGFG
cm9tU3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVu
Y2VCZXR3ZWVuQ29kZVB0cigKICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9u
T2Yoc3RhdGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQ
YXRoU3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAg
ICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0
LCBTbG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRp
b25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBOb1B0clRhZykpOwogICAgIH0KIAogICAgIEFyaXRo
UHJvZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0K
QEAgLTI0Myw2ICsyNDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEFyaXRoUHJvZmlsZSog
bV9hcml0aFByb2ZpbGU7CisgICAgSW5zdHJ1Y3Rpb24qIG1faW5zdHJ1Y3Rpb247CiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGlu
ZVN0YXJ0OwogICAgIGludDMyX3QgbV9pbmxpbmVTaXplOwpAQCAtMjU5LDggKzI2Miw4IEBAIGlu
bGluZSBib29sIGlzQmluYXJ5UHJvZmlsZUVtcHR5KEFyaXRoUHIKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3JUeXBlPgogY2xhc3MgSklUQmluYXJ5TWF0aElDIDogcHVibGljIEpJVE1hdGhJ
QzxHZW5lcmF0b3JUeXBlLCBpc0JpbmFyeVByb2ZpbGVFbXB0eT4gewogcHVibGljOgotICAgIEpJ
VEJpbmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLSAgICAgICAgOiBKSVRN
YXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNCaW5hcnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSkK
KyAgICBKSVRCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNC
aW5hcnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pCiAgICAgewogICAg
IH0KIH07CkBAIC0yNzcsOCArMjgwLDggQEAgaW5saW5lIGJvb2wgaXNVbmFyeVByb2ZpbGVFbXB0
eShBcml0aFBybwogdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBjbGFzcyBKSVRV
bmFyeU1hdGhJQyA6IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2Zp
bGVFbXB0eT4gewogcHVibGljOgotICAgIEpJVFVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlKQotICAgICAgICA6IEpJVE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc1VuYXJ5UHJv
ZmlsZUVtcHR5Pihhcml0aFByb2ZpbGUpCisgICAgSklUVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRN
YXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2ZpbGVFbXB0eT4oYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbikKICAgICB7CiAgICAgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA0MywxMyArMTA0MywxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVs
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVy
bkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNz
VG9TbG93UGF0aCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUp
KTsKLSAgICAKKwogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZP
Ul9TVFVCKAogICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAogICAg
ICAgICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBw
b2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52
YWx1ZSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9j
YXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9u
UHRyKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5R2VuZXJpYywgTm9QdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24g
MjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9p
bW0oSW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0
clRhZyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFn
LCBqdW1wVGFibGUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNo
Q2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0
dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWco
U3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyAr
NzEyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMTE3MCwxMSArMTE3MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVK
dW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAog
ICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAg
ICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICBtX2NvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgaGFz
X2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmlu
ZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29k
ZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJl
dHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2Vu
ZXJpYywgSGFzUHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2lu
ZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMzMs
NyArMTIzMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1QwLCBy
ZWdUMSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIEhhc1Byb3BlcnR5UHRyVGFnLCBkc3QsIHJlZ1Qw
LCByZWdUMSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9
IGNhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAi
UG9seW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3Vt
ZW50cy5oIgpAQCAtNzMwLDcgKzczMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbE9wdGkKICAgICBpZiAodHJ5UHV0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVT
UykpID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7CiAgICAgICAgIC8vIERvbid0IGV2
ZXIgdHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRy
dWU7Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRy
KE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
YykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0
cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWMsIFB1dFByb3BlcnR5UHRyVGFnKSk7CiAgICAgfQogICAgIHB1dEJ5VmFsKGV4ZWMsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KQEAgLTgxNCw3ICs4MTUsNyBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgaWYgKHRyeURp
cmVjdFB1dEJ5VmFsT3B0aW1pemUoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKSA9PSBPcHRpbWl6YXRpb25SZXN1
bHQ6OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENh
bGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9w
ZXJ0eVB0clRhZykpOwogICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwg
c3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKQEAgLTg2MSw3ICs4NjIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RD
YWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxM
aW5rSW5mbywgUHRyVGFnIHJlc3VsdFRhZykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVj
Q2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtODgw
LDIwICs4ODEsMjIgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAog
ICAgICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAg
ICAgICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcg
PSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAg
ICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVG
cmFtZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KAotICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5W
YWx1ZSksCisgICAgICAgICAgICAgICAgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2Fs
bFJldHVyblZhbHVlLCByZXN1bHRUYWcpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJl
dXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBB
U1NFUlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlv
bihleGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7Cisg
ICAgICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93
RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwKICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwog
ICAgIH0KIApAQCAtOTA5LDE4ICs5MTIsMjAgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBo
YW5kbGVIb3N0Q2FsbAogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2Fs
bGVlKSk7CiAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgUHRyVGFnIHRodW5r
VGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAg
ICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9p
ZCo+KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUsIHJlc3VsdFRhZyksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoY29uc3RydWN0
VHlwZSA9PSBDb25zdHJ1Y3RUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBz
Y29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgUHRy
VGFnIHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25G
cm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAg
ICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0
b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0
aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVu
a1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIApAQCAtOTMwLDYgKzkzNSw3IEBAIFNs
b3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhl
Yy0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7
CiAKKyAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxs
UHRyVGFnLCB2bSk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJ
bmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKICAgICAKQEAgLTk0NSwxMiArOTUxLDEzIEBAIFNsb3dQYXRoUmV0dXJu
VHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZv
LT5zZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNh
bGxMaW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CisgICAgICAg
ICAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRl
cm5hbEZ1bmN0aW9uLCBjb2RlUHRyLCBDb2RlRW50cnlQdHJUYWcpOwogCi0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgdm9pZCogbGlu
a2VkVGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29k
ZUVudHJ5UHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5m
by0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhl
RnJhbWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxM
aW5rSW5mbyk7CisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxs
ZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8sIGxpbmtlZFRhcmdldFRhZyk7CiAgICAgfQogCiAgICAg
SlNGdW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCk7CkBAIC05NTksNDAgKzk2Niw0NiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJB
VElPTiBvcGVyYXRpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgUHRyVGFnIGNvZGVUYWcgPSBOb1B0
clRhZzsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBj
b2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7
CisgICAgICAgIGNvZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKICAgICB9
IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCisgICAgICAg
IGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0g
cmV0YWdDb2RlUHRyKHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRodW5rVGFnLCBsaW5rZWRU
YXJnZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKICAg
ICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RB
YmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAg
ICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0
b3JFcnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQo
Ci0gICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAg
IHJldHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgQ29k
ZUJsb2NrKiogY29kZUJsb2NrU2xvdCA9IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygp
OwogICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPigqdm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQs
ICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKLSAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKGVycm9yKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CiAg
ICAgICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAgICBBcml0eUNoZWNrTW9k
ZSBhcml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8
fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpIHsKICAgICAg
ICAgICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGNvZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKKyAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICAg
ICAgY29kZVRhZyA9IENvZGVFbnRyeVB0clRhZzsKKyAgICAgICAgfQogICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKICAgICB9
CiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgCi0gICAgcmV0dXJu
IGVuY29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJl
dXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVl
LCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwgY29kZVRhZyk7CisK
KyAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgbGlua2Vk
VGFyZ2V0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihj
YWxsTGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1l
IDogS2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
RGlyZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBK
U0Z1bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDI1LDcgKzEwMzgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0RpcmVjdENhCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRh
YmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50
cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgICAgIGNvZGVQdHIgPSBleGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2Rl
RW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgIGVsc2Ugewog
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCkBAIC0xMDM1LDIwICsxMDQ4
LDE4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKICAgICAgICAg
RVhDRVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgdGhyb3dTY29wZS5leGNlcHRpb24o
KSA9PSByZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbio+KGVycm9yKSk7CiAgICAgICAgIGlmIChl
cnJvcikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7
CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhY2tTbG90cyA9IGNhbGxMaW5rSW5mby0+bWF4
TnVtQXJndW1lbnRzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGFy
aXR5ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2Rl
RW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29k
ZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7Cisg
ICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtp
bmQsIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkucmV0YWdnZWQoQ29kZUVudHJ5UHRyVGFnLCBOZWFy
Q2FsbFB0clRhZyk7CiAgICAgfQogICAgIAogICAgIGxpbmtEaXJlY3RGb3IoZXhlYywgKmNhbGxM
aW5rSW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxs
KQorICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8s
IEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBQdHJUYWcgcmVzdWx0VGFnKQogewogICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CkBAIC0xMDYzLDEwICsxMDc0LDEwIEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJu
YWxGdW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lRm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpU
YWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJu
IGVuY29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgcmVzdWx0VGFn
KS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0lu
Zm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRo
ZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAg
ICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBjYWxs
TGlua0luZm8pOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2Fs
bGVlQXNWYWx1ZSwgY2FsbExpbmtJbmZvLCByZXN1bHRUYWcpOwogICAgIH0KICAgICAKICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlv
bkNlbGwpOwpAQCAtMTA3Nyw4ICsxMDg4LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2
aXJ0dWFsRm9yV2l0aAogCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENv
bnN0cnVjdCkgewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwg
Y3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKKyAgICAgICAgICAg
IFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJv
bUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAg
ICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhl
RnJhbWUpKTsKICAgICAgICAgfQogCkBAIC0xMDg2LDIxICsxMDk4LDI1IEBAIGlubGluZSBTbG93
UGF0aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJs
ZT4oKnZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAg
RVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0X2Nh
c3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAg
ICBQdHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29k
ZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAg
ICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRo
ZUZyYW1lKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVj
dXRhYmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2Vk
KENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2Fs
bE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUp
KTsKIH0KIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKQogeworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1l
KCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVl
QXNGdW5jdGlvbkNlbGw7Ci0gICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxG
b3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9u
Q2VsbCk7CisgICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rUG9seW1v
cnBoaWNDYWxsUHRyVGFnLCB2bSk7CisgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCwgcmVzdWx0VGFnKTsKIAogICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0Nh
bGxlZSwgKmNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsK
ICAgICAKQEAgLTExMDksOCArMTEyNSwxMSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJB
VElPTiBvcGVyYXRpCiAKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pCiB7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUo
KTsKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2Fs
bGVlLCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CisgICAgUHRy
VGFnIHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25WaXJ0dWFsQ2FsbFB0clRhZywgdm0pOwor
ICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5m
bywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRUYWcpOwogfQogCiBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCkBAIC0xNzYx
LDcgKzE3ODAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlz
SlNTdHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1
ZSktPmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nKSk7CisgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0
eVB0clRhZykpOwogICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAg
ICAgICAgICB9CkBAIC0xODI5LDcgKzE4NDgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0
IHRyeUdldEJ5VmFsT3B0CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVBy
b2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0
dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+
Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xOTAxLDcgKzE5MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiAgICAgaWYgKHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZh
bHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykgPT0gT3B0aW1pemF0aW9u
UmVzdWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUu
CiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
bkdldEJ5VmFsR2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQ
cm9wZXJ0eVB0clRhZykpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0
QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVz
cykpOwpAQCAtMTk0MSw3ICsxOTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25IYQogICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAK
ICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNl
cHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsK
ICAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAg
Y3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykp
OworICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQ
dHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5R2VuZXJpYywgSGFzUHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjAwMSw3ICsyMDIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIEFT
U0VSVChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0
aW9uUHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMg
OiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CisgICAgICAgICAgICBhdXRvIGdldEJ5VmFs
RnVuY3Rpb24gPSBieVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1
bmN0aW9uUHRyKGdldEJ5VmFsRnVuY3Rpb24sIEdldFByb3BlcnR5UHRyVGFnKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJs
ZShleGVjKTsKQEAgLTIxNTAsNiArMjE3MCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoQ2hhclcKICAgICAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1
ZSgoKnZhbHVlKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKKyAgICBhc3NlcnRJ
c1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUp
KTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAt
MjE2OCw2ICsyMTg5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hJbW1X
aQogICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oa2V5LmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGVsc2UKICAg
ICAgICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcs
ICZqdW1wVGFibGUpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0
KTsKIH0KIApAQCAtMjE4Nyw2ICsyMjA5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Td2l0Y2hTdHJpbgogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3Rp
RGVmYXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJl
c3VsdCwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CiAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMzAx
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICBKdW1w
TGlzdCBmYWlsdXJlczsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGZhaWx1cmVz
LmFwcGVuZChqaXQuYnJhbmNoU3RydWN0dXJlKAogICAgICAgICBOb3RFcXVhbCwgCiAgICAgICAg
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIApAQCAtOTAsNyAr
OTEsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0
LnJldCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywg
IlN0cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcsICJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIik7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTIzNyw3ICsyMzgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdl
dEJ5VmFsV2l0CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNs
b3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygp
LCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJU
YWcsIGRzdCwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIHNsb3dE
b25lQ2FzZSA9IGp1bXAoKTsKIApAQCAtMjc1LDcgKzI3Niw3IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdU
MSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLCBOb1B0clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBHZXRQcm9wZXJ0
eVB0clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpAQCAtNDU1LDcgKzQ1Niw3IEBAIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CiAKQEAgLTQ5Miw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsK
ICAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0
cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGlt
aXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgTm9QdHJUYWcsIHJlZ1QwLCByZWdUMSwg
cmVnVDIsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVj
dCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9w
dGltaXplLCBQdXRQcm9wZXJ0eVB0clRhZywgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZv
KTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC01OTMsNyAr
NTk0LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdAogCiAgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJ
bmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3Vs
dFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCiAgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY1NSw4
ICs2NTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0CiAgICAg
SklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsK
ICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRP
cHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQpAQCAtNjcxLDggKzY3Miw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAg
IAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmlt
cGwoKSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVn
LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTQsOCAr
NzE1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdAogICAgIAog
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgr
K107CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgp
KTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCks
IFB1dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+
aW1wbCgpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CkBAIC0xMjU4LDExICsxMjU4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5VmFsKEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAg
ICAgCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIo
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGlu
ZSBnZXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1f
Y29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdl
bmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykp
OwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMjkwLDEyICsxMjkwLDEyIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hC
dWZmZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAg
ICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJC
YXNlbGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZv
ciAlcywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEo
KSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
OwogICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVy
Q29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwo
Q29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBG
dW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMsIEdldFByb3BlcnR5UHRyVGFnKSk7
CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCkBAIC0xMzM4LDIzICsxMzM4LDIzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsKEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9u
TGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8t
PmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkp
OwogICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1f
Y2FsbHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxlQWRkcmVzcygpID09IG9wZXJhdGlvbldyaXRl
QmFycmllclNsb3dQYXRoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3Qo
KS5mcm9tLCBGdW5jdGlvblB0cihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgU2xvd1Bh
dGhQdHJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0
KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0
aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2Nh
bGxzLmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3QoKS5jYWxsZWUpOwogICAgIH0KICAgICAKICAg
ICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJl
Y3QpIHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9S
X1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAor
ICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAg
ICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUo
KSk7CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBh
dGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJl
Y3Qgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICB9CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
cmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcp
KTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNy
b0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJp
YywgUHV0UHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUpCkBAIC0xMzgwLDEyICsxMzgwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFs
JXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFt
ZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0
dWJJbmZvKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5u
b3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0
cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9w
ZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
cmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJv
cGVydHlQdHJUYWcpKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRU
aHVua3MuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBOYXRpdmVF
eGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgUmVmUHRyPEpJVENvZGU+IGZv
ckNhbGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZW50cnkgPSBnZW5lcmF0b3Iodm0pOwotICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoZW50cnksIGVudHJ5LmNvZGUoKSwgSklUQ29kZTo6SG9zdENhbGxUaHVu
aykpOworICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZW50cnks
IGVudHJ5LnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNo
ZWNrUHRyVGFnKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIH0gZWxzZQogICAgICAg
ICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ2FsbCh2bSkpLCBKSVRDb2Rl
OjpIb3N0Q2FsbFRodW5rKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9v
bCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3Ro
KHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
dGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxM
b2NhdGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlh
dGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRy
eUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7
CiAgICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBw
cm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1Bh
dGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJ
ZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwogICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVy
OwogICAgICAgICAgICAgICAgIH0KQEAgLTM2OCw4ICszNjgsMTAgQEAgdm9pZCByZXBhdGNoR2V0
QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMs
IGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVw
T25DYWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9j
aygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNH
ZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFz
ZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNh
Y2hlKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7
CisgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNs
b3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5
SWRGdW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICB9CiB9CiAKIHN0YXRp
YyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlv
bihjb25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKQEAgLTM4Niwx
NyArMzg4LDE0IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKIAog
c3RhdGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJ
ZEZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQog
ewotICAgIGF1dG8gcGlja1Nsb3dQYXRoID0gWyZdICgpIC0+IFZfSklUT3BlcmF0aW9uX0VTc2lK
SkkgewotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYg
KHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOwotICAgICAgICB9CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9OwotICAgIHJldHVybiB0
YWdDRnVuY3Rpb25QdHIocGlja1Nsb3dQYXRoKCksIFNsb3dQYXRoUHRyVGFnKTsKKyAgICAgICAg
ICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIGlmIChw
dXRLaW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RO
b25TdHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTQ0Myw3ICs0NDIs
NyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJh
dGVTZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNo
LCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3Qs
IHB1dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNo
Q2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9u
UHRyKGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwg
UHV0UHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC01NzUsOCArNTc0LDEwIEBAIHZvaWQgcmVwYXRjaFB1dEJ5
SUQoRXhlY1N0YXRlKiBleGVjLCBKU1YKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNh
bXBsZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBi
YXNlVmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2lu
ZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4
ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3By
aWF0ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlD
YWNoZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dCwgc3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAgICAgZnRsVGh1bmtBd2Fy
ZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwg
RnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpLCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgIH0KIH0KIAogc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlSW4oCkBAIC02OTgsNyArNjk5LDcgQEAgc3RhdGljIEpTQ2VsbCogd2Vi
QXNzZW1ibHlPd25lcihKU0NlbGwqIAogCiB2b2lkIGxpbmtGb3IoCiAgICAgRXhlY1N0YXRlKiBl
eGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxv
Y2ssCi0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIp
CisgICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIFB0
clRhZyBjb2RlVGFnKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKQEAg
LTcyMCw3ICs3MjEsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3Nl
bWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwg
aW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9y
aWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBv
aW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hO
ZWFyQ2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNv
ZGVQdHIpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5m
by5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0ci5yZXRhZ2dlZChjb2Rl
VGFnLCBOZWFyQ2FsbFB0clRhZykpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAg
ICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxM
aW5rSW5mbyk7CkBAIC03NjcsNiArNzY4LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcigKIAogc3RhdGlj
IHZvaWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZikKIHsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29k
ZVJlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgTmVhckNhbGxQdHJUYWcpOwogICAgIGlm
IChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJD
b2RlQmxvY2soKTsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxM
aW5rSW5mbzo6RGlyZWN0VGFpbENhbGwpCkBAIC0xMDA5LDEyICsxMDExLDE1IEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNl
c1tjYXNlSW5kZXhdLnZhcmlhbnQoKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlUHRyOworICAgICAgICBQdHJUYWcgY29kZVRhZzsKICAgICAgICAgaWYgKHZh
cmlhbnQuZXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRh
YmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlh
bnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2Fs
bChBcml0eUNoZWNrTm90UmVxdWlyZWQpOworICAgICAgICAgICAgY29kZVRhZyA9IENvZGVFbnRy
eVB0clRhZzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lmlu
dGVybmFsRnVuY3Rpb24oKSk7CiAgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJSW50ZXJu
YWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOworICAgICAgICAgICAgY29kZVRh
ZyA9IENvZGVFbnRyeVB0clRhZzsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGZh
c3RDb3VudHMpIHsKQEAgLTEwODUsNyArMTA5MCw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2Fs
bCgKICAgICAKICAgICBhdXRvIHN0dWJSb3V0aW5lID0gYWRvcHRSZWYoKm5ldyBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCi0gICAgICAgICAg
ICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgICAgIGNh
bGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAgICAgICAg
IlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAl
cyIsCiAgICAgICAgICAgICAgICAgaXNXZWJBc3NlbWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NT
dHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxv
Y2F0aW9uKCkubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpLApAQCAtMTExMiwx
MyArMTExNywxMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAKIHZvaWQgcmVzZXRHZXRC
eUlEKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5SURLaW5kIGtpbmQpCiB7Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9j
aywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5n
R2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBGdW5jdGlvblB0cihhcHBy
b3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCksIEdldFByb3BlcnR5UHRyVGFn
KSk7CiAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wKHN0dWJJbmZvLCBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb24oKSk7CiB9CiAKIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVC
bG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgVl9K
SVRPcGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gYml0d2lzZV9jYXN0PFZf
SklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9jaywgc3R1YkluZm8u
c2xvd1BhdGhDYWxsTG9jYXRpb24oKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgVl9KSVRP
cGVyYXRpb25fRVNzaUpKSSB1bm9wdGltaXplZEZ1bmN0aW9uID0gdW50YWdDRnVuY3Rpb25QdHI8
Vl9KSVRPcGVyYXRpb25fRVNzaUpKST4ocmVhZENhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5m
by5zbG93UGF0aENhbGxMb2NhdGlvbigpKS5leGVjdXRhYmxlQWRkcmVzcygpLCBQdXRQcm9wZXJ0
eVB0clRhZyk7CiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcHRpbWl6ZWRGdW5jdGlvbjsK
ICAgICBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0IHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKQog
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6
ZTsKQEAgLTExMzEsNyArMTEzNiw3IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayogY29k
ZUJsb2NrLCAKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0T3B0aW1pemU7CiAgICAgfQogCi0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgdGFnQ0Z1bmN0
aW9uUHRyKG9wdGltaXplZEZ1bmN0aW9uLCBTbG93UGF0aFB0clRhZykpOworICAgIGZ0bFRodW5r
QXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9u
KCksIEZ1bmN0aW9uUHRyKG9wdGltaXplZEZ1bmN0aW9uLCBQdXRQcm9wZXJ0eVB0clRhZykpOwog
ICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5mbywgc3R1YkluZm8uc2xv
d1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guaAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIGJ1aWxkR2V0
QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKCiB2b2lkIHJlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0
ZSosIEpTVmFsdWUsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwogdm9pZCBidWlsZFB1dEJ5
SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIFN0cnVjdHVyZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEtpbmQpOwog
dm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJv
b2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Ci12
b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmpl
Y3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKK3ZvaWQgbGlua0ZvcihFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIsIFB0clRhZyk7CiB2b2lkIGxpbmtEaXJlY3RGb3IoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKIHZvaWQg
bGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJik7CiB2b2lkIHVubGlua0ZvcihW
TSYsIENhbGxMaW5rSW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVj
aWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsMTQgKzE3MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsrKQogICAgICAg
ICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9jYWxsc1tpXS5z
ZWNvbmQpOwotICAgICAgICAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5v
UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKKyAgICAgICAg
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBDb2RlRW50cnlQdHJUYWcsICJT
cGVjaWFsaXplZCB0aHVuayBmb3IgJXMiLCB0aHVua0tpbmQpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBh
cyB0aGUgZmlyc3QgYXJndW1lbnQKICAgICAgICAgLy8gYW5kIHJldHVybiB2YWx1ZS4gTGlrZSBh
bnkgc2Vuc2libGUgYXJjaGl0ZWN0dXJlIHdvdWxkLgogICAgICAgICB2b2lkIGNhbGxEb3VibGVU
b0RvdWJsZShGdW5jdGlvblB0ciBmdW5jdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgbV9j
YWxscy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoY2FsbChTbG93UGF0aFB0clRhZyksIGZ1bmN0aW9u
KSk7CisgICAgICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3BlY2lhbGl6ZWRU
aHVua1B0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgbV9jYWxscy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoY2FsbCh0YWcpLCBGdW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGNhbGxEb3VibGVUb0RvdWJsZVByZXNl
cnZpbmdSZXR1cm4oRnVuY3Rpb25QdHIgZnVuY3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSB2b2lkIGVt
aXRQb2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUYWdUeXBlPgoraW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxp
ZGF0aW9uKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcG9pbnRlckdQUiwgVGFnVHlwZSB0YWcp
CiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKICAgICAgICAgcmV0dXJuOwpAQCAtNTIsNiAr
NTMsNyBAQCBpbmxpbmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxICiAgICAgaml0
LmFib3J0V2l0aFJlYXNvbihUR0ludmFsaWRQb2ludGVyKTsKICAgICBpc05vblplcm8ubGluaygm
aml0KTsKICAgICBqaXQucHVzaFRvU2F2ZShwb2ludGVyR1BSKTsKKyAgICBqaXQudW50YWdQdHIo
cG9pbnRlckdQUiwgdGFnKTsKICAgICBqaXQubG9hZDgocG9pbnRlckdQUiwgcG9pbnRlckdQUik7
CiAgICAgaml0LnBvcFRvUmVzdG9yZShwb2ludGVyR1BSKTsKIH0KQEAgLTY4LDE5ICs3MCwyMyBA
QCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tCiAKICAgICBqaXQuY29w
eUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0tPnRvcEVudHJ5RnJh
bWUpOwogCisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5leHRQ
dHJUYWdJRCgpKTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0
aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihsb29rdXBFeGNlcHRpb25IYW5kbGVyKSksIEdQUkluZm86
Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsK
KyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIGNhbGxUYWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7
CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2Fs
bFRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CiAgICAg
aml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAorICAgIFB0clRhZyB0aHVua1RhZyA9
IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcik7CiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAi
VGhyb3cgZXhjZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJUaHJvdyBleGNlcHRpb24gZnJv
bSBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCiBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigK
LSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgVk0qIHZtLCBTcHJ0X0pJVE9wZXJhdGlvbl9FQ2xpIHNs
b3dQYXRoRnVuY3Rpb24pCisgICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgU3BydF9KSVRP
cGVyYXRpb25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uLCBQdHJUYWcgZXhwZWN0ZWRMaW5rZWRUYXJn
ZXRUYWcpCiB7CisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKwogICAgIGppdC5zYW5pdGl6ZVN0YWNrSW5saW5lKCp2bSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CiAgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CiAgICAgaml0
LnN0b3JlUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAmdm0tPnRvcENhbGxGcmFtZSk7
CkBAIC05Myw5ICs5OSw5IEBAIHN0YXRpYyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIGppdC5tb3Zl
KEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwogICAgIGppdC5hZGRQdHIo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMzIpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRo
RnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0
aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgTm9QdHJUYWcpOworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih0YWdDRnVuY3Rpb25QdHIoc2xvd1BhdGhGdW5jdGlvbiwgY2FsbFRhZyksIEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5v
bkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIGNh
bGxUYWcpOwogICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgOCksIEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwogICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKQEAgLTEwMyw5ICsxMDksOSBAQCBzdGF0aWMgdm9pZCBzbG93
UGF0aEZvcigKICAgICBpZiAobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1heEZyYW1lRXh0ZW50Rm9y
U2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAg
aml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKHNsb3dQYXRoRnVuY3Rpb24pPihHUFJJbmZvOjpy
ZWdUMik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc2xvd1BhdGhGdW5jdGlvbikpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAg
ICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBOb1B0clRhZyk7CisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihzbG93UGF0aEZ1bmN0aW9u
LCBjYWxsVGFnKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRh
dGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIGNhbGxUYWcpOwogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNs
b3dQYXRoQ2FsbCkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOwogI2VuZGlmCkBAIC0xMTYsOCArMTIyLDkgQEAgc3RhdGljIHZvaWQgc2xv
d1BhdGhGb3IoCiAgICAgLy8gMykgVGhlIGZ1bmN0aW9uIHRvIGNhbGwuCiAgICAgLy8gVGhlIHNl
Y29uZCByZXR1cm4gdmFsdWUgR1BSIHdpbGwgaG9sZCBhIG5vbi16ZXJvIHZhbHVlIGZvciB0YWls
IGNhbGxzLgogCi0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CiAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgaml0LnVudGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAgUkVMRUFT
RV9BU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSA9PSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigwKSk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvTm90VHJhc2gg
PSBqaXQuYnJhbmNoVGVzdFB0cihDQ2FsbEhlbHBlcnM6Olplcm8sIEdQUkluZm86OnJldHVyblZh
bHVlR1BSMik7CkBAIC0xMjYsNyArMTMzLDcgQEAgc3RhdGljIHZvaWQgc2xvd1BhdGhGb3IoCiAg
ICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwog
CiAgICAgZG9Ob3RUcmFzaC5saW5rKCZqaXQpOwotICAgIGppdC5qdW1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBOb1B0clRhZyk7CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQpAQCAtMTM3LDExICsxNDQsMTIgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgogICAgIC8vIHRvIGJlIGluIHJl
Z1QwL3JlZ1QxIChwYXlsb2FkL3RhZyksIHRoZSBDYWxsRnJhbWUgdG8gaGF2ZSBhbHJlYWR5CiAg
ICAgLy8gYmVlbiBhZGp1c3RlZCwgYW5kIGFsbCBvdGhlciByZWdpc3RlcnMgdG8gYmUgYXZhaWxh
YmxlIGZvciB1c2UuCiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKLSAgICAKLSAgICBzbG93UGF0aEZv
cihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCk7Ci0gICAgCisKKyAgICBQdHJUYWcgZXhwZWN0
ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uTGlua0NhbGxQdHJUYWcsIHZtKTsK
KyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2FsbCwgZXhwZWN0ZWRMaW5r
ZWRUYXJnZXRUYWcpOworCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFn
LCAiTGluayBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RF
KHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsi
KTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNh
bGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCkBAIC0xNDksMTEgKzE1Nywx
MiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0OwotICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9w
ZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwpOwotICAgIAorCisgICAgUHRyVGFnIGV4cGVjdGVk
TGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxQdHJU
YWcsIHZtKTsKKyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisKICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJMaW5rIHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRo
dW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDYWxsUHRy
VGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNsb3cgcGF0aCB0aHVuayIpOwogfQogCiAvLyBG
SVhNRTogV2Ugc2hvdWxkIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBtZWdhbW9ycGhpYyB2aXJ0dWFs
IGNhbGwgdnMuIGEgc2xvdwpAQCAtMjAwLDcgKzIwOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiB2aXJ0dWFsVGh1bmtGb3IoVk0KICAgICBhdXRvIG5vdEpTRnVuY3Rpb24gPSBqaXQuYnJhbmNo
SWZOb3RUeXBlKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uVHlwZSk7CiAgICAgCiAgICAgLy8g
Tm93IHdlIGtub3cgd2UgaGF2ZSBhIEpTRnVuY3Rpb24uCi0gICAgCisKICAgICBqaXQubG9hZFB0
cigKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0
aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCiAgICAgICAgIEdQUkluZm86OnJlZ1Q0KTsKQEAg
LTIyMSwyNiArMjMwLDI4IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsVGh1bmtGb3Io
Vk0KIAogICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBK
SVQgY29kZS4KICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwgY2FsbENvZGUoaml0LmxhYmVsKCkp
OwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0KTsKKyAgICBl
bWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCwgQ29kZUVudHJ5V2l0aEFy
aXR5Q2hlY2tQdHJUYWcpOwogICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CiAg
ICAgICAgIGppdC5wcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDAp
OwogICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZWdUNCk7CiAg
ICAgfQotICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBOb1B0clRhZyk7CisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmVnVDQsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKIAogICAg
IG5vdEpTRnVuY3Rpb24ubGluaygmaml0KTsKICAgICBzbG93Q2FzZS5hcHBlbmQoaml0LmJyYW5j
aElmTm90VHlwZShHUFJJbmZvOjpyZWdUMCwgSW50ZXJuYWxGdW5jdGlvblR5cGUpKTsKLSAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0tPmdldENUSUludGVybmFsRnVu
Y3Rpb25UcmFtcG9saW5lRm9yKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKKyAgICB2b2lkKiBleGVjdXRhYmxl
QWRkcmVzcyA9IHZtLT5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlu
a0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkpLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgQ29k
ZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGVBZGRyZXNzKSwgR1BS
SW5mbzo6cmVnVDQpOwogICAgIGppdC5qdW1wKCkubGlua1RvKGNhbGxDb2RlLCAmaml0KTsKIAog
ICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CiAgICAgCiAgICAgLy8gSGVyZSB3ZSBkb24ndCBrbm93
IGFueXRoaW5nLCBzbyByZXZlcnQgdG8gdGhlIGZ1bGwgc2xvdyBwYXRoLgotICAgIHNsb3dQYXRo
Rm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxsKTsKKyAgICBQdHJUYWcgZXhwZWN0ZWRM
aW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJUYWcsIHZtKTsK
KyAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCwgZXhwZWN0ZWRM
aW5rZWRUYXJnZXRUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCi0gICAgICAgIHBhdGNoQnVm
ZmVyLCBOb1B0clRhZywKKyAgICAgICAgcGF0Y2hCdWZmZXIsIE5lYXJDYWxsUHRyVGFnLAogICAg
ICAgICAiVmlydHVhbCAlcyBzbG93IHBhdGggdGh1bmsiLAogICAgICAgICBjYWxsTGlua0luZm8u
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6UmVndWxhciA/ICJjYWxsIiA6IGNhbGxMaW5rSW5mby5j
YWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gInRhaWwgY2FsbCIgOiAiY29uc3RydWN0Iik7
CiB9CkBAIC0yOTMsOSArMzA0LDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6
SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVz
cyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKICAgICAgICAgaml0LnhvclB0cihKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSksIEpTSW50ZXJmYWNl
SklUOjpyZWdUMSk7Ci0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpT
SW50ZXJmYWNlSklUOjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRh
Zyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNl
SklUOjpyZWdUMSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlRW50cnlQdHJUYWcp
OwogICAgIH0gZWxzZQotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhK
U0ludGVyZmFjZUpJVDo6cmVnVDEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVu
Y3Rpb25Gb3Ioa2luZCkpLCBOb1B0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zm
c2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIENvZGVFbnRyeVB0clRhZyk7CiAKICAgICBq
aXQuYWRkUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoOCksIEpTSW50ZXJmYWNlSklU
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAgLTMxNCw3ICszMjUsNyBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50
ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZXNpLCBJbnRlcm5hbEZ1bmN0aW9uOjpv
ZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAg
aml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW02NChOYXRpdmVDb2RlUG9pc29uOjpr
ZXkoKSksIFg4NlJlZ2lzdGVyczo6ZXNpKTsKICAgICBqaXQueG9yNjQoWDg2UmVnaXN0ZXJzOjpl
c2ksIFg4NlJlZ2lzdGVyczo6cjkpOwotICAgIGppdC5jYWxsKFg4NlJlZ2lzdGVyczo6cjksIE5v
UHRyVGFnKTsKKyAgICBqaXQuY2FsbChYODZSZWdpc3RlcnM6OnI5LCBDb2RlRW50cnlQdHJUYWcp
OwogCiAjZWxzZQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVjeCwgZWR4LCBy
OCwgcjksIC4uLik7CkBAIC0zMjksOSArMzQwLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0
aW9uVHlwZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJ
VDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRh
YmxlKCkpLCBYODZSZWdpc3RlcnM6OnI5KTsKICAgICAgICAgaml0LnhvclB0cihKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSksIFg4NlJlZ2lzdGVy
czo6cjkpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdp
c3RlcnM6OnI5LCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIE5vUHRyVGFnKTsKKyAgICAg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhl
Y3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlRW50cnlQdHJUYWcpOwogICAgIH0gZWxzZQot
ICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVk
eCwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIE5v
UHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Io
a2luZCkpLCBDb2RlRW50cnlQdHJUYWcpOwogCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbTMyKDQgKiBzaXplb2YoaW50NjRfdCkpLCBKU0ludGVyZmFjZUpJVDo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogI2VuZGlmCkBAIC0zNTMsNyArMzY0LDcgQEAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9hZFB0cihKU0lu
dGVyZmFjZUpJVDo6QWRkcmVzcyhBUk02NFJlZ2lzdGVyczo6eDEsIEludGVybmFsRnVuY3Rpb246
Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBBUk02NFJlZ2lzdGVyczo6eDIpOwog
ICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29kZVBvaXNv
bjo6a2V5KCkpLCBBUk02NFJlZ2lzdGVyczo6eDEpOwogICAgIGppdC54b3I2NChBUk02NFJlZ2lz
dGVyczo6eDEsIEFSTTY0UmVnaXN0ZXJzOjp4Mik7Ci0gICAgaml0LmNhbGwoQVJNNjRSZWdpc3Rl
cnM6OngyLCBOb1B0clRhZyk7CisgICAgaml0LmNhbGwoQVJNNjRSZWdpc3RlcnM6OngyLCBDb2Rl
RW50cnlQdHJUYWcpOwogCiAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoTUlQUykKICNpZiBDUFUoTUlQ
UykKQEAgLTM2OSw5ICszODAsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2
ZUZvckdlCiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpK
U0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNz
KEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjEsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0
YWJsZSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKICAgICAgICAgaml0LnhvclB0cihKU0lu
dGVyZmFjZUpJVDo6VHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSksIEpTSW50
ZXJmYWNlSklUOjpyZWdUMik7Ci0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRy
ZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBO
b1B0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50
ZXJmYWNlSklUOjpyZWdUMiwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBDb2RlRW50cnlQ
dHJUYWcpOwogICAgIH0gZWxzZQotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZz
ZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2Fs
bChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBJ
bnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZUVu
dHJ5UHRyVGFnKTsKIAogI2lmIENQVShNSVBTKQogICAgIC8vIFJlc3RvcmUgc3RhY2sgc3BhY2UK
QEAgLTQyNyw3ICs0MzgsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZv
ckdlCiAgICAgaml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKTsKIAogICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTEla
RV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIiVzICVzJXMgdHJhbXBvbGluZSIsIHRodW5r
RnVuY3Rpb25UeXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uID8gIm5hdGl2ZSIg
OiAiaW50ZXJuYWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJU
YWlsIFdpdGggU2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRT
YXZlZFRhZ3MgPyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2lu
ZCkuZGF0YSgpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZUVu
dHJ5UHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9saW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1
bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24gPyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5
VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdz
ICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdp
dGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRvQ1N0cmluZyhraW5kKS5kYXRhKCkpOwogfQogCiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSogdm0pCkBAIC00NzUs
NiArNDg2LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogIyAg
aWYgQ1BVKFg4Nl82NCkKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBl
bmRpZgorICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZh
Y2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU0ludGVyZmFjZUpJVDo6cmVnVDMpOwogICAgIGpp
dC5sb2FkMzIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOwogICAgIGppdC5hZGQzMihKU0ludGVy
ZmFjZUpJVDo6VHJ1c3RlZEltbTMyKENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzKSwg
SlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7CkBAIC01MDEsNyArNTEzLDkgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwogICAgIGppdC5tb3ZlKEpTSW50ZXJm
YWNlSklUOjphcmd1bWVudEdQUjAsIGV4dHJhVGVtcCk7CiAgICAgaml0LmxzaGlmdDY0KEpTSW50
ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMyksIGV4dHJhVGVtcCk7CiAgICAgaml0LmFkZFB0cihl
eHRyYVRlbXAsIEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgaml0LnVu
dGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGppdC5hZGRQdHIoZXh0cmFUZW1wLCBKU0ludGVyZmFj
ZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7
CiAKICAgICAvLyBNb3ZlIGN1cnJlbnQgZnJhbWUgZG93biBhcmd1bWVudEdQUjAgbnVtYmVyIG9m
IHNsb3RzCiAgICAgSlNJbnRlcmZhY2VKSVQ6OkxhYmVsIGNvcHlMb29wKGppdC5sYWJlbCgpKTsK
QEAgLTUyNCw3ICs1MzgsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVy
YXRvCiAgICAgaml0LnB1c2goSlNJbnRlcmZhY2VKSVQ6OnJlZ1Q0KTsKICMgIGVuZGlmCiAgICAg
aml0LnJldCgpOwotI2Vsc2UKKyNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIHNlY3Rpb24gYWJvdmUs
IFVTRShKU1ZBTFVFMzJfNjQpIHNlY3Rpb24gYmVsb3cuCiAjICBpZiBDUFUoWDg2KQogICAgIGpp
dC5wb3AoSlNJbnRlcmZhY2VKSVQ6OnJlZ1Q0KTsKICMgIGVuZGlmCkBAIC01ODEsMTAgKzU5NSwx
MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVyYXRvCiAgICAgaml0LnB1
c2goSlNJbnRlcmZhY2VKSVQ6OnJlZ1Q0KTsKICMgIGVuZGlmCiAgICAgaml0LnJldCgpOwotI2Vu
ZGlmCisjZW5kaWYgLy8gRW5kIG9mIFVTRShKU1ZBTFVFMzJfNjQpIHNlY3Rpb24uCiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4g
RklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICJmaXh1cCBhcml0eSIpOworICAg
IFB0clRhZyB0YWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgdGFnLCAiZml4dXAgYXJpdHkiKTsKIH0KIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTU5NCw3ICs2
MDksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0CiAgICAgaml0
LmJyZWFrcG9pbnQoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRh
ZywgInVucmVhY2hhYmxlIHRodW5rIik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIE5lYXJDYWxsUHRyVGFnLCAidW5yZWFjaGFibGUgdGh1bmsiKTsKIH0KIAogc3RhdGlj
IHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0pCkBA
IC0xMTgxLDE2ICsxMTk2LDE2IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRoaXNOb0Fy
Z3NGdW4KICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKSVRDb2RlUG9p
c29uOjprZXkoKSksIEdQUkluZm86OnJlZ1QxKTsKICAgICBqaXQueG9yNjQoR1BSSW5mbzo6cmVn
VDEsIEdQUkluZm86OnJlZ1QwKTsKICNlbmRpZgotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihq
aXQsIEdQUkluZm86OnJlZ1QwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpyZWdUMCwgTm9QdHJU
YWcpOwotICAgIAorICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Qw
LCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6
cmVnVDAsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKwogICAgIGppdC5lbWl0RnVu
Y3Rpb25FcGlsb2d1ZSgpOwogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIGxpbmtCdWZmZXIubGluayhub0Nv
ZGUsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGxXaXRo
b3V0U2F2ZWRUYWdzKHZtKSkpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAgICBs
aW5rQnVmZmVyLCBOb1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlv
biBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOworICAgICAgICBsaW5rQnVmZmVyLCBDb2RlRW50
cnlQdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0
aCBubyBhcmd1bWVudHMiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDM1ICs2MywzMCBAQCB2b2lkIGluaXRpYWxpemUoKQogICAgICAgICBEYXRhOjpzX29w
Y29kZU1hcFtpXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19vcGNvZGVNYXBbaV0sIHRhZyk7CiAgICAg
fQogCi0gICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewotICAgICAgICBmb3IgKGludCBpID0gTlVN
QkVSX09GX0JZVEVDT0RFX0lEUzsgaSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMgKyBOVU1CRVJf
T0ZfQllURUNPREVfSEVMUEVSX0lEUzsgKytpKQotICAgICAgICAgICAgRGF0YTo6c19vcGNvZGVN
YXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCBwdHJUYWcoQnl0ZWNvZGVI
ZWxwZXJQdHJUYWcsIGkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgY29uc3QgUHRy
VGFnIHRhZ3NGb3JPcGNvZGVbXSA9IHsKLSAgICAgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8g
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZQotICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBs
bGludF9ldmFsX3Byb2xvZ3VlCi0gICAgICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50
X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8v
IGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlCi0gICAgICAgICAgICBDb2RlRW50cnlQ
dHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUKLSAgICAgICAg
ICAgIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVjawotICAgICAgICAgICAgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2sKLSAgICAgICAg
ICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQKLSAgICAg
ICAgICAgIEJ5dGVjb2RlUHRyVGFnLCAvLyBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFt
cG9saW5lCi0gICAgICAgICAgICBFeGNlcHRpb25IYW5kbGVyUHRyVGFnLCAvLyBsbGludF90aHJv
d19kdXJpbmdfY2FsbF90cmFtcG9saW5lCi0gICAgICAgICAgICBOYXRpdmVDb2RlUHRyVGFnLCAv
LyBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5lCi0gICAgICAgICAgICBOYXRpdmVDb2RlUHRy
VGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKLSAgICAgICAgICAgIE5h
dGl2ZUNvZGVQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJhbXBvbGlu
ZQotICAgICAgICAgICAgTmF0aXZlQ29kZVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY29uc3RydWN0X3RyYW1wb2xpbmUKLSAgICAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWcsIC8vIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YodGFnc0Zvck9wY29kZSkgLyBzaXplb2YodGFnc0Zvck9wY29kZVsw
XSkgPT0gTlVNQkVSX09GX0JZVEVDT0RFX0hFTFBFUl9JRFMsICIiKTsKLSAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpID09
IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFMsICIiKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IE5VTUJFUl9PRl9CWVRFQ09ERV9IRUxQRVJfSURTOyArK2kpIHsKLSAgICAgICAgICAgIGlu
dCBvcGNvZGVJRCA9IGkgKyBOVU1CRVJfT0ZfQllURUNPREVfSURTOwotICAgICAgICAgICAgRGF0
YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdID0gdGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1hcFtv
cGNvZGVJRF0sIHRhZ3NGb3JPcGNvZGVbaV0pOwotICAgICAgICB9CisgICAgc3RhdGljIGNvbnN0
IFB0clRhZyB0YWdzRm9yT3Bjb2RlW10gPSB7CisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8g
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50
X2V2YWxfcHJvbG9ndWUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9tb2R1bGVf
cHJvZ3JhbV9wcm9sb2d1ZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X2Z1bmN0
aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZQorICAgICAgICBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKKyAg
ICAgICAgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2sKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGlu
dF9nZW5lcmljX3JldHVybl9wb2ludAorICAgICAgICBCeXRlY29kZVB0clRhZywgLy8gbGxpbnRf
dGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZQorICAgICAgICBFeGNlcHRpb25IYW5kbGVy
UHRyVGFnLCAvLyBsbGludF90aHJvd19kdXJpbmdfY2FsbF90cmFtcG9saW5lCisgICAgICAgIENv
ZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZQorICAgICAgICBD
b2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQorICAg
ICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NhbGxfdHJh
bXBvbGluZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X2ludGVybmFsX2Z1bmN0
aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCisgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcs
IC8vIGhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKHRhZ3NGb3JPcGNvZGUpIC8gc2l6ZW9mKHRhZ3NGb3JPcGNvZGVbMF0pID09IE5VTUJF
Ul9PRl9CWVRFQ09ERV9IRUxQRVJfSURTLCAiIik7CisgICAgc3RhdGljX2Fzc2VydChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpID09IE5VTUJFUl9PRl9CWVRF
Q09ERV9JRFMsICIiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX0JZVEVD
T0RFX0hFTFBFUl9JRFM7ICsraSkgeworICAgICAgICBpbnQgb3Bjb2RlSUQgPSBpICsgTlVNQkVS
X09GX0JZVEVDT0RFX0lEUzsKKyAgICAgICAgRGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdID0g
dGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1hcFtvcGNvZGVJRF0sIHRhZ3NGb3JPcGNvZGVbaV0p
OwogICAgIH0KIAogICAgIHZvaWQqIGhhbmRsZXIgPSBMTEludDo6Z2V0Q29kZVB0cihsbGludF90
aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnREYXRhLmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNyBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIoT3Bjb2RlSUQgCiB9CiAKICNpZiBFTkFC
TEUoSklUKQorCiBBTFdBWVNfSU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QdHIoT3Bj
b2RlSUQgY29kZUlkKQogewogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExMSW50Q29kZT4o
Z2V0Q29kZVB0cihjb2RlSWQpKTsKQEAgLTkzLDcgKzk0LDcgQEAgQUxXQVlTX0lOTElORSBMTElu
dENvZGUgZ2V0Q29kZUZ1bmN0aW9uUAogCiBBTFdBWVNfSU5MSU5FIHZvaWQqIGdldENvZGVQdHIo
SlNDOjpFbmNvZGVkSlNWYWx1ZSBnbHVlSGVscGVyKCkpCiB7Ci0gICAgcmV0dXJuIFdURl9QUkVQ
QVJFX0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTihnbHVlSGVscGVyKTsKKyAgICByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqPihnbHVlSGVscGVyKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkxMSW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRy
eXBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRFbnRyeXBvaW50LmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsNDUg
KzcxLDUxIEBAIHN0YXRpYyB2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgQ28KIHsKICNp
ZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5rR2Vu
ZXJhdG9yKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAgICAgYWRv
cHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5l
cmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
aykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBj
b2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNo
ZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpOwogICAgIGNvZGVCbG9j
ay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUp
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsK
KyAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0
YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcp
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRQcm9n
cmFtRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrKQogewogI2lmIEVOQUJM
RShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgeworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0
b3IpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgICAgICBhZG9wdFJl
ZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVy
YXRvciksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNv
ZGVSZWYucmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hl
Y2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSk7CiAgICAgY29kZUJs
b2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfcHJvZ3JhbV9wcm9s
b2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJl
Zi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0
clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNl
dE1vZHVsZVByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1Yihtb2R1bGVQcm9ncmFt
RW50cnlUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAg
ICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKG1vZHVs
ZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERp
cmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFn
LCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAog
ICAgIFVOVVNFRF9QQVJBTSh2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYg
PSBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVf
cHJvZ3JhbV9wcm9sb2d1ZSk7CiAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBh
ZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVM
TEludENvZGVSZWYobGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVF
bnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOwogfQogCiB2b2lkIHNldEVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMSwxMiAr
MTQwMSwxMiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAg
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVu
Y3Rpb24pOwogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0
KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGludGVybmFsRnVuY3Rpb24pOwotICAgICAgICAgICAgICAg
IGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwotICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+Y2FsbFB0clRhZyA9IE5hdGl2ZUNvZGVQdHJUYWc7CisgICAgICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHIucmV0YWdn
ZWQoQ29kZUVudHJ5UHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7CiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIGFzc2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCksIENvZGVFbnRyeVB0clRhZyk7CiAgICAgICAgICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2Vy
dElzTm90UG9pc29uZWQoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAg
IExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgTmF0aXZlQ29kZVB0clRhZyk7CisgICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVS
TihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRy
eVB0clRhZyk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAgICAg
ICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBwYywgY2FsbGVlQXNWYWx1ZSwg
a2luZCk7CkBAIC0xNDIwLDcgKzE0MjAsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNl
dFVwQ2FsbChFeGVjCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAwOwogICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxl
LT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKLSAgICAgICAgY2FsbFB0clRh
ZyA9IE5hdGl2ZUNvZGVQdHJUYWc7CisgICAgICAgIGNhbGxQdHJUYWcgPSBDb2RlRW50cnlXaXRo
QXJpdHlDaGVja1B0clRhZzsKICAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGV4ZWN1dGFibGUpOwogCkBAIC0xNDQ0LDYgKzE0NDQsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIH0KICAgICAgICAgY29kZVB0ciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7CiAgICAgfQorICAgIGFz
c2VydElzVGFnZ2VkV2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxQdHJUYWcp
OwogCiAgICAgQVNTRVJUKCEhY29kZVB0cik7CiAgICAgCkBAIC0xNDU2LDEzICsxNDU3LDEzIEBA
IGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+cmVtb3ZlKCk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2
bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUpOwogICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RT
ZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWUpOwotICAgICAgICBjYWxs
TGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKKyAgICAgICAgY2FsbExpbmtJ
bmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHIucmV0YWdnZWQoY2FsbFB0clRhZywgTExJ
bnRDYWxsSUNQdHJUYWcpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsUHRyVGFnICE9IE5v
UHRyVGFnKTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsUHRyVGFnID0gY2FsbFB0clRhZzsK
ICAgICAgICAgaWYgKGNvZGVCbG9jaykKICAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29t
aW5nQ2FsbChleGVjLCBjYWxsTGlua0luZm8pOwogICAgIH0KIAorICAgIGFzc2VydElzVGFnZ2Vk
V2l0aChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxQdHJUYWcpOwogICAgIFBvaXNv
bmVkTWFzbVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwogICAgIExMSU5UX0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgY2FsbFB0clRhZyk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZW5lcmF0ZVRodQog
ICAgIC8vIEZJWE1FOiB0aGVyZSdzIHByb2JhYmx5IGEgYmV0dGVyIHdheSB0byBkbyBpdCBvbiBY
ODYsIGJ1dCBJJ20gbm90IHN1cmUgSSBjYXJlLgogICAgIExMSW50Q29kZSB0YXJnZXQgPSBMTElu
dDo6Z2V0Q29kZUZ1bmN0aW9uUHRyKG9wY29kZUlEKTsKICAgICBqaXQubW92ZShKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDApOwotICAgIGppdC5qdW1wKEpTSW50ZXJmYWNlSklUOjpyZWdUMCwgcHRy
VGFnKEJ5dGVjb2RlSGVscGVyUHRyVGFnLCBvcGNvZGVJRCkpOworICAgIGppdC5qdW1wKEpTSW50
ZXJmYWNlSklUOjpyZWdUMCwgdGh1bmtUYWcpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hC
dWZmZXIsIHRodW5rVGFnLCAiTExJbnQgJXMgcHJvbG9ndWUgdGh1bmsiLCB0aHVua0tpbmQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82
NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw3ICs5Niw3IEBAIG1hY3JvIGNhbGxTbG93UGF0aChzbG93UGF0aCkKICAgICBtb3Zl
IHIwLCBQQwogZW5kCiAKLW1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCwgdW51c2VkMSwgdW51c2Vk
MikKK21hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBmdW5jdGlvblByb2xvZ3VlKCkKICAg
ICBwdXNoQ2FsbGVlU2F2ZXMoKQogCkBAIC0xOTk1LDggKzE5OTUsOCBAQCBtYWNybyBkb0NhbGwo
c2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudCArIFBh
eWxvYWRPZmZzZXRbdDNdCiAgICAgc3RvcmVpIENlbGxUYWcsIENhbGxlZSArIFRhZ09mZnNldFt0
M10KICAgICBtb3ZlIHQzLCBzcAotICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjpt
YWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIG1hY3JvIChjYWxsUHRyVGFnKSBlbmQp
Ci0gICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRh
cmdldFt0MV0sIE5vUHRyVGFnKQorICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZvOjpt
YWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFnKQorICAg
IGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRb
dDFdLCBMTEludENhbGxJQ1B0clRhZykKIAogLm9wQ2FsbFNsb3c6CiAgICAgc2xvd1BhdGhGb3JD
YWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMzAx
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIG1hY3JvIGNDYWxsNChmdW5j
dGlvbikKICAgICBlbmQKIGVuZAogCi1tYWNybyBkb1ZNRW50cnkobWFrZUNhbGwsIGNhbGxUYWcs
IGNhbGxXaXRoQXJpdHlDaGVja1RhZykKK21hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCkKICAgICBm
dW5jdGlvblByb2xvZ3VlKCkKICAgICBwdXNoQ2FsbGVlU2F2ZXMoKQogCkBAIC0yMjUsMTYgKzIy
NSw3IEBAIG1hY3JvIGRvVk1FbnRyeShtYWtlQ2FsbCwgY2FsbFRhZywgY2FsbFcKIAogICAgIGNo
ZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KGV4dHJhVGVtcFJlZywgMHhiYWQwZGMwMikKIAotICAg
IGlmIFBPSU5URVJfUFJPRklMSU5HCi0gICAgICAgIGJ0Ym56IFByb3RvQ2FsbEZyYW1lOjpoYXNB
cml0eU1pc21hdGNoW3Byb3RvQ2FsbEZyYW1lXSwgLmRvQ2FsbFdpdGhBcml0eUNoZWNrCi0gICAg
ICAgIG1vdmUgY2FsbFRhZywgdDIKLSAgICAgICAgam1wIC5yZWFkeVRvQ2FsbAotICAgIC5kb0Nh
bGxXaXRoQXJpdHlDaGVjazoKLSAgICAgICAgbW92ZSBjYWxsV2l0aEFyaXR5Q2hlY2tUYWcsIHQy
Ci0gICAgLnJlYWR5VG9DYWxsOgotICAgIGVuZAotCi0gICAgbWFrZUNhbGwoZW50cnksIHQzLCB0
MikKKyAgICBtYWtlQ2FsbChlbnRyeSwgdDMpCiAKICAgICAjIFdlIG1heSBoYXZlIGp1c3QgbWFk
ZSBhIGNhbGwgaW50byBhIEpTIGZ1bmN0aW9uLCBzbyB3ZSBjYW4ndCByZWx5IG9uIHNwCiAgICAg
IyBmb3IgYW55dGhpbmcgYnV0IHRoZSBmYWN0IHRoYXQgb3VyIG93biBsb2NhbHMgKGllIHRoZSBW
TUVudHJ5UmVjb3JkKSBhcmUKQEAgLTI1OCwxOCArMjQ5LDE4IEBAIG1hY3JvIGRvVk1FbnRyeSht
YWtlQ2FsbCwgY2FsbFRhZywgY2FsbFcKIGVuZAogCiAKLW1hY3JvIG1ha2VKYXZhU2NyaXB0Q2Fs
bChlbnRyeSwgdGVtcCwgY2FsbFRhZykKK21hY3JvIG1ha2VKYXZhU2NyaXB0Q2FsbChlbnRyeSwg
dGVtcCkKICAgICBhZGRwIDE2LCBzcAogICAgIGlmIENfTE9PUAogICAgICAgICBjbG9vcENhbGxK
U0Z1bmN0aW9uIGVudHJ5CiAgICAgZWxzZQotICAgICAgICBjYWxsIGVudHJ5LCBjYWxsVGFnCisg
ICAgICAgIGNhbGwgZW50cnksIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnCiAgICAgZW5k
CiAgICAgc3VicCAxNiwgc3AKIGVuZAogCiAKLW1hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxsKGVu
dHJ5LCB0ZW1wLCBjYWxsVGFnKQorbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwoZW50cnksIHRl
bXApCiAgICAgbW92ZSBlbnRyeSwgdGVtcAogICAgIHN0b3JlcCBjZnIsIFtzcF0KICAgICBtb3Zl
IHNwLCBhMApAQCAtMjc5LDEwICsyNzAsMTAgQEAgbWFjcm8gbWFrZUhvc3RGdW5jdGlvbkNhbGwo
ZW50cnksIHRlbXAsIAogICAgIGVsc2lmIFg4Nl82NF9XSU4KICAgICAgICAgIyBXZSBuZWVkIHRv
IGFsbG9jYXRlIDMyIGJ5dGVzIG9uIHRoZSBzdGFjayBmb3IgdGhlIHNoYWRvdyBzcGFjZS4KICAg
ICAgICAgc3VicCAzMiwgc3AKLSAgICAgICAgY2FsbCB0ZW1wLCBjYWxsVGFnCisgICAgICAgIGNh
bGwgdGVtcCwgQ29kZUVudHJ5UHRyVGFnCiAgICAgICAgIGFkZHAgMzIsIHNwCiAgICAgZWxzZQot
ICAgICAgICBjYWxsIHRlbXAsIGNhbGxUYWcKKyAgICAgICAgY2FsbCB0ZW1wLCBDb2RlRW50cnlQ
dHJUYWcKICAgICBlbmQKIGVuZAogCkBAIC0yMDYwLDI1ICsyMDUxLDExIEBAIG1hY3JvIGRvQ2Fs
bChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgaWYgUE9JU09OCiAgICAgICAgIGxvYWRwIF9n
X0pJVENvZGVQb2lzb24sIHQyCiAgICAgICAgIHhvcnAgTExJbnRDYWxsTGlua0luZm86Om1hY2hp
bmVDb2RlVGFyZ2V0W3QxXSwgdDIKLSAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQxLCB0MywgdDQs
IG1hY3JvIChjYWxsUHRyVGFnKQotICAgICAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAg
ICAgICAgICAgICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbFB0clRhZ1t0NV0sIGNh
bGxQdHJUYWcKLSAgICAgICAgICAgIGVuZAotICAgICAgICBlbmQpCi0gICAgICAgIGlmIFBPSU5U
RVJfUFJPRklMSU5HCi0gICAgICAgICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbFB0
clRhZ1t0NV0sIHQzCi0gICAgICAgIGVuZAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDIs
IHQzKQorICAgICAgICBwcmVwYXJlQ2FsbCh0MiwgdDEsIHQzLCB0NCwgTExJbnRDYWxsSUNQdHJU
YWcpCisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbih0MiwgTExJbnRDYWxsSUNQdHJUYWcpCiAg
ICAgZWxzZQotICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNv
ZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBtYWNybyAoY2FsbFB0clRhZykKLSAgICAgICAgICAg
IGlmIFBPSU5URVJfUFJPRklMSU5HCi0gICAgICAgICAgICAgICAgbG9hZHAgTExJbnRDYWxsTGlu
a0luZm86OmNhbGxQdHJUYWdbdDVdLCBjYWxsUHRyVGFnCi0gICAgICAgICAgICBlbmQKLSAgICAg
ICAgZW5kKQotICAgICAgICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICAgICAgbG9hZHAg
TExJbnRDYWxsTGlua0luZm86OmNhbGxQdHJUYWdbdDVdLCB0MwotICAgICAgICBlbmQKLSAgICAg
ICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdl
dFt0MV0sIHQzKQorICAgICAgICBwcmVwYXJlQ2FsbChMTEludENhbGxMaW5rSW5mbzo6bWFjaGlu
ZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBMTEludENhbGxJQ1B0clRhZykKKyAgICAgICAg
Y2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5lQ29kZVRhcmdldFt0
MV0sIExMSW50Q2FsbElDUHRyVGFnKQogICAgIGVuZAogCiAub3BDYWxsU2xvdzoKQEAgLTIyMDks
MTIgKzIxODYsMTIgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgog
ICAgIGVsc2UKICAgICAgICAgaWYgWDg2XzY0X1dJTgogICAgICAgICAgICAgc3VicCAzMiwgc3AK
LSAgICAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCBOYXRpdmVD
b2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3Qx
XSwgQ29kZUVudHJ5UHRyVGFnCiAgICAgICAgICAgICBhZGRwIDMyLCBzcAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVDb2RlUG9pc29uLCB0MgogICAgICAgICAgICAg
eG9ycCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0MV0sIHQyCi0gICAgICAgICAgICBjYWxs
IHQyLCBOYXRpdmVDb2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQyLCBDb2RlRW50cnlQdHJU
YWcKICAgICAgICAgZW5kCiAgICAgZW5kCiAKQEAgLTIyNTIsMTIgKzIyMjksMTIgQEAgbWFjcm8g
aW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKG9mZgogICAgIGVsc2UKICAgICAgICAgaWYg
WDg2XzY0X1dJTgogICAgICAgICAgICAgc3VicCAzMiwgc3AKLSAgICAgICAgICAgIGNhbGwgb2Zm
c2V0T2ZGdW5jdGlvblt0MV0sIE5hdGl2ZUNvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgb2Zm
c2V0T2ZGdW5jdGlvblt0MV0sIENvZGVFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwg
c3AKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwg
dDIKICAgICAgICAgICAgIHhvcnAgb2Zmc2V0T2ZGdW5jdGlvblt0MV0sIHQyCi0gICAgICAgICAg
ICBjYWxsIHQyLCBOYXRpdmVDb2RlUHRyVGFnCisgICAgICAgICAgICBjYWxsIHQyLCBDb2RlRW50
cnlQdHJUYWcKICAgICAgICAgZW5kCiAgICAgZW5kCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIz
MDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjY0LDcgKzI2NCw3IEBAIGNvbnN0IEJ5dGVjb2RlUHRy
VGFnID0gY29uc3RleHByIEJ5dGVjb2QKIGNvbnN0IENvZGVFbnRyeVB0clRhZyA9IGNvbnN0ZXhw
ciBDb2RlRW50cnlQdHJUYWcKIGNvbnN0IENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnID0g
Y29uc3RleHByIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnCiBjb25zdCBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnID0gY29uc3RleHByIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcKLWNvbnN0IE5h
dGl2ZUNvZGVQdHJUYWcgPSBjb25zdGV4cHIgTmF0aXZlQ29kZVB0clRhZworY29uc3QgTExJbnRD
YWxsSUNQdHJUYWcgPSBjb25zdGV4cHIgTExJbnRDYWxsSUNQdHJUYWcKIGNvbnN0IE5vUHRyVGFn
ID0gY29uc3RleHByIE5vUHRyVGFnCiBjb25zdCBTbG93UGF0aFB0clRhZyA9IGNvbnN0ZXhwciBT
bG93UGF0aFB0clRhZwogCkBAIC04NTMsMTIgKzg1MywxMiBAQCBtYWNybyBjYWxsVGFyZ2V0RnVu
Y3Rpb24oY2FsbGVlLCBjYWxsUHRyCiAgICAgZGlzcGF0Y2hBZnRlckNhbGwoKQogZW5kCiAKLW1h
Y3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHBy
ZXBhcmVDYWxsUHRyVGFnKQorbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVt
cDEsIHRlbXAyLCB0ZW1wMywgY2FsbFB0clRhZykKICAgICBhZGRwIENhbGxlckZyYW1lQW5kUENT
aXplLCBzcAogZW5kCiAKICMgc3AgcG9pbnRzIHRvIHRoZSBuZXcgZnJhbWUKLW1hY3JvIHByZXBh
cmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIHByZXBhcmVDYWxsUHRy
VGFnKQorbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1w
MywgY2FsbFB0clRhZykKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiAKICAg
ICBsb2FkaSBQYXlsb2FkT2Zmc2V0ICsgQXJndW1lbnRDb3VudFtjZnJdLCB0ZW1wMgpAQCAtOTA3
LDkgKzkwNyw4IEBAIG1hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCAKICAg
ICBzdG9yZXAgdGVtcDMsIFt0ZW1wMSwgdGVtcDIsIDFdCiAgICAgYnRpbnogdGVtcDIsIC5jb3B5
TG9vcAogCi0gICAgcHJlcGFyZUNhbGxQdHJUYWcodGVtcDIpCiAgICAgbW92ZSB0ZW1wMSwgc3AK
LSAgICBqbXAgY2FsbGVlLCB0ZW1wMgorICAgIGptcCBjYWxsZWUsIGNhbGxQdHJUYWcKIGVuZAog
CiBtYWNybyBzbG93UGF0aEZvckNhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQpAQCAtOTE5LDEx
ICs5MTgsNyBAQCBtYWNybyBzbG93UGF0aEZvckNhbGwoc2xvd1BhdGgsIHByZXBhcmVDCiAgICAg
ICAgIG1hY3JvIChjYWxsZWUsIGNhbGxlZUZyYW1lUHRyKQogICAgICAgICAgICAgYnRweiBjYWxs
ZWVGcmFtZVB0ciwgLmRvbnRVcGRhdGVTUAogICAgICAgICAgICAgbW92ZSBjYWxsZWVGcmFtZVB0
ciwgc3AKLSAgICAgICAgICAgIHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgbWFjcm8g
KGNhbGxQdHJUYWdSZWcpCi0gICAgICAgICAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAg
ICAgICAgICAgICAgICAgICAgbW92ZSBTbG93UGF0aFB0clRhZywgY2FsbFB0clRhZ1JlZwotICAg
ICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgZW5kKQorICAgICAgICAgICAgcHJlcGFyZUNh
bGwoY2FsbGVlLCB0MiwgdDMsIHQ0LCBTbG93UGF0aFB0clRhZykKICAgICAgICAgLmRvbnRVcGRh
dGVTUDoKICAgICAgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihjYWxsZWUsIFNsb3dQYXRoUHRy
VGFnKQogICAgICAgICBlbmQpCkBAIC0xMDA1LDcgKzEwMDAsNyBAQCBlbmQKIAogIyBEbyB0aGUg
YmFyZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGV4ZWN1dGUgY29kZS4gU2V0cyB1cCB0aGUgUEMsIGxl
YXZlIHRoZSBDb2RlQmxvY2sqCiAjIGluIHQxLiBNYXkgYWxzbyB0cmlnZ2VyIHByb2xvZ3VlIGVu
dHJ5IE9TUi4KLW1hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dldHRlciwgY29kZUJsb2NrU2V0dGVy
LCBvc3JTbG93UGF0aCwgdHJhY2VTbG93UGF0aCkKK21hY3JvIHByb2xvZ3VlKGNvZGVCbG9ja0dl
dHRlciwgY29kZUJsb2NrU2V0dGVyLCBvc3JTbG93UGF0aCwgdHJhY2VTbG93UGF0aCwgdGFyZ2V0
UHRyVGFnKQogICAgICMgU2V0IHVwIHRoZSBjYWxsIGZyYW1lIGFuZCBjaGVjayBpZiB3ZSBzaG91
bGQgT1NSLgogICAgIHRhZ1JldHVybkFkZHJlc3Mgc3AKICAgICBwcmVzZXJ2ZUNhbGxlclBDQW5k
Q0ZSKCkKQEAgLTEwMzYsMTMgKzEwMzEsMTQgQEAgbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0
dGVyLCBjb2RlQmxvYwogICAgICAgICAjIHBvcCB0aGUgY2FsbGVyRnJhbWUgc2luY2Ugd2Ugd2ls
bCBqdW1wIHRvIGEgZnVuY3Rpb24gdGhhdCB3YW50cyB0byBzYXZlIGl0CiAgICAgICAgIGlmIEFS
TTY0IG9yIEFSTTY0RQogICAgICAgICAgICAgcG9wIGxyLCBjZnIKKyAgICAgICAgICAgIHVudGFn
UmV0dXJuQWRkcmVzcyBzcAogICAgICAgICBlbHNpZiBBUk0gb3IgQVJNdjcgb3IgQVJNdjdfVFJB
RElUSU9OQUwgb3IgTUlQUwogICAgICAgICAgICAgcG9wIGNmcgogICAgICAgICAgICAgcG9wIGxy
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBvcCBjZnIKICAgICAgICAgZW5kCi0gICAgICAg
IGptcCByMCwgQ29kZUVudHJ5UHRyVGFnCisgICAgICAgIGptcCByMCwgdGFyZ2V0UHRyVGFnCiAg
ICAgLnJlY292ZXI6CiAgICAgICAgIGNvZGVCbG9ja0dldHRlcih0MSwgdDIpCiAgICAgLmNvbnRp
bnVlOgpAQCAtMTE2MCw3ICsxMTU2LDcgQEAgZWxzZQogICAgIGdsb2JhbCBfdm1FbnRyeVRvSmF2
YVNjcmlwdAogICAgIF92bUVudHJ5VG9KYXZhU2NyaXB0OgogZW5kCi0gICAgZG9WTUVudHJ5KG1h
a2VKYXZhU2NyaXB0Q2FsbCwgQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVj
a1B0clRhZykKKyAgICBkb1ZNRW50cnkobWFrZUphdmFTY3JpcHRDYWxsKQogCiAKIGlmIENfTE9P
UApAQCAtMTE2OSw3ICsxMTY1LDcgQEAgZWxzZQogICAgIGdsb2JhbCBfdm1FbnRyeVRvTmF0aXZl
CiAgICAgX3ZtRW50cnlUb05hdGl2ZToKIGVuZAotICAgIGRvVk1FbnRyeShtYWtlSG9zdEZ1bmN0
aW9uQ2FsbCwgTmF0aXZlQ29kZVB0clRhZywgTmF0aXZlQ29kZVB0clRhZykKKyAgICBkb1ZNRW50
cnkobWFrZUhvc3RGdW5jdGlvbkNhbGwpCiAKIAogaWYgbm90IENfTE9PUApAQCAtMTI4NywzNCAr
MTI4MywzNCBAQCBfbGxpbnRfZW50cnk6CiBlbmQKIAogX2xsaW50X3Byb2dyYW1fcHJvbG9ndWU6
Ci0gICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9uQ29k
ZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUpCisg
ICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9uQ29kZUJs
b2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUsIENvZGVF
bnRyeVB0clRhZykKICAgICBkaXNwYXRjaCgwKQogCiAKIF9sbGludF9tb2R1bGVfcHJvZ3JhbV9w
cm9sb2d1ZToKLSAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVu
Y3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9s
b2d1ZSkKKyAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVuY3Rp
b25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9sb2d1
ZSwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGRpc3BhdGNoKDApCiAKIAogX2xsaW50X2V2YWxfcHJv
bG9ndWU6Ci0gICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0
aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9n
dWUpCisgICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIsIG5vdEZ1bmN0aW9u
Q29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWUs
IENvZGVFbnRyeVB0clRhZykKICAgICBkaXNwYXRjaCgwKQogCiAKIF9sbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2RlQmxvY2tH
ZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9u
X2Zvcl9jYWxsLCBfbGxpbnRfdHJhY2VfcHJvbG9ndWVfZnVuY3Rpb25fZm9yX2NhbGwpCisgICAg
cHJvbG9ndWUoZnVuY3Rpb25Gb3JDYWxsQ29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9j
a1NldHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbCwgX2xsaW50X3RyYWNl
X3Byb2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jYWxsLCBDb2RlRW50cnlQdHJUYWcpCiAgICAgZnVuY3Rp
b25Jbml0aWFsaXphdGlvbigwKQogICAgIGRpc3BhdGNoKDApCiAgICAgCiAKIF9sbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ29u
c3RydWN0Q29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2Vu
dHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0LCBfbGxpbnRfdHJhY2VfcHJvbG9ndWVfZnVu
Y3Rpb25fZm9yX2NvbnN0cnVjdCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENv
ZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3QsIENvZGVFbnRyeVB0clRhZykKICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9u
KDEpCiAgICAgZGlzcGF0Y2goMCkKICAgICAKIAogX2xsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2Fy
aXR5X2NoZWNrOgotICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ2FsbENvZGVCbG9ja0dldHRlciwg
ZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2Nh
bGxfYXJpdHlDaGVjaywgX2xsaW50X3RyYWNlX2FyaXR5Q2hlY2tfZm9yX2NhbGwpCisgICAgcHJv
bG9ndWUoZnVuY3Rpb25Gb3JDYWxsQ29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1Nl
dHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrLCBfbGxp
bnRfdHJhY2VfYXJpdHlDaGVja19mb3JfY2FsbCwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcpCiAgICAgZnVuY3Rpb25Bcml0eUNoZWNrKC5mdW5jdGlvbkZvckNhbGxCZWdpbiwgX3Nsb3df
cGF0aF9jYWxsX2FyaXR5Q2hlY2spCiAuZnVuY3Rpb25Gb3JDYWxsQmVnaW46CiAgICAgZnVuY3Rp
b25Jbml0aWFsaXphdGlvbigwKQpAQCAtMTMyMiw3ICsxMzE4LDcgQEAgX2xsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX2FyaXR5X2NoZWNrOgogCiAKIF9sbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X2FyaXR5X2NoZWNrOgotICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ29uc3RydWN0Q29kZUJsb2Nr
R2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2ssIF9sbGludF90cmFjZV9hcml0eUNoZWNrX2Zvcl9j
b25zdHJ1Y3QpCisgICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDb2RlQmxvY2tHZXR0
ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlDaGVjaywgX2xsaW50X3RyYWNlX2FyaXR5Q2hlY2tfZm9yX2NvbnN0
cnVjdCwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpCiAgICAgZnVuY3Rpb25Bcml0eUNo
ZWNrKC5mdW5jdGlvbkZvckNvbnN0cnVjdEJlZ2luLCBfc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0
eUNoZWNrKQogLmZ1bmN0aW9uRm9yQ29uc3RydWN0QmVnaW46CiAgICAgZnVuY3Rpb25Jbml0aWFs
aXphdGlvbigxKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlQmFzZS5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTcsNiArNTcsNyBAQCBpbmxpbmUgYm9vbCBpc0NhbGwoQ29kZVNwZWNpYWxpemF0aW9uS2luCiAK
IGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAgZnJpZW5kIGNsYXNz
IEpJVDsKKyAgICBmcmllbmQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1
bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSopOwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IGludCBOVU1fUEFSQU1FVEVSU19JU19IT1NUID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyMzAx
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsMTEgQEAgdm9pZCBOYXRpdmVFeGVjdXRhYmxl
OjpmaW5pc2hDcmVhdGlvbihWTQogICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9
IG1faml0Q29kZUZvckNhbGwtPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KTsKICAgICBt
X2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1faml0Q29kZUZvckNvbnN0cnVj
dC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJpdHkpOwogICAgIG1fbmFtZSA9IG5hbWU7CisK
KyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwo
QXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJU
YWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDb25zdHJ1Y3QtPmFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29k
ZUVudHJ5UHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ2FsbFdp
dGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVdpdGhBcml0eUNoZWNr
UHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0
aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQ
dHJUYWcpOwogfQogCiBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0
cnVjdG9yLCBJbnRyaW5zaWMgaW50cmluc2ljLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogc2ln
bmF0dXJlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVG
dW5jdGlvbi5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKGludHB0cl90IGJpdHMp
IDogbV9wdHIoYml0d2lzZV9jYXN0PHZvaWQqPihiaXRzKSkgeyB9CiAKICAgICBUYWdnZWROYXRp
dmVGdW5jdGlvbihOYXRpdmVGdW5jdGlvbiBmdW5jKQotICAgICAgICA6IG1fcHRyKHRhZ0NGdW5j
dGlvblB0cjx2b2lkKj4oZnVuYy5tX3B0ciwgTmF0aXZlQ29kZVB0clRhZykpCisgICAgICAgIDog
bV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLm1fcHRyLCBDb2RlRW50cnlQdHJUYWcp
KQogICAgIHsgfQogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKFJhd05hdGl2ZUZ1bmN0aW9uIGZ1
bmMpCi0gICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLCBOYXRpdmVD
b2RlUHRyVGFnKSkKKyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMs
IENvZGVFbnRyeVB0clRhZykpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3B0cjsgfQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgTmF0aXZlRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fcHRyKTsKLSAgICAgICAgcmV0dXJuIHVudGFnQ0Z1bmN0aW9uUHRyPE5hdGl2ZUZ1bmN0
aW9uPihtX3B0ciwgTmF0aXZlQ29kZVB0clRhZyk7CisgICAgICAgIHJldHVybiB1bnRhZ0NGdW5j
dGlvblB0cjxOYXRpdmVGdW5jdGlvbj4obV9wdHIsIENvZGVFbnRyeVB0clRhZyk7CiAgICAgfQog
CiAgICAgdm9pZCogcmF3UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24g
MjMwMTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNywgMjAwOCwgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjU3LDYgKzI1Nyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gYXR0cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1
dGVzKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoZ2V0VmFsdWUpOworICAgICAgICBhc3Nl
cnRJc0NGdW5jdGlvblB0cihnZXRWYWx1ZSk7CiAgICAgICAgIG1fZGF0YS5jdXN0b20uZ2V0VmFs
dWUgPSBnZXRWYWx1ZTsKICAgICAgICAgbV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIApAQCAt
Mjc4LDYgKzI3OSw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gYXR0
cmlidXRlc0ZvclN0cnVjdHVyZShhdHRyaWJ1dGVzKSk7CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQoZ2V0VmFsdWUpOworICAgICAgICBhc3NlcnRJc0NGdW5jdGlvblB0cihnZXRWYWx1ZSk7CiAg
ICAgICAgIG1fZGF0YS5jdXN0b20uZ2V0VmFsdWUgPSBnZXRWYWx1ZTsKICAgICAgICAgbV9hdHRy
aWJ1dGVzID0gYXR0cmlidXRlczsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHRyVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHRyVGFnLmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1B0clRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMjIgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgdihDb2RlRW50cnlQdHJUYWcpIFwKICAgICB2KENvZGVFbnRyeVdpdGhBcml0
eUNoZWNrUHRyVGFnKSBcCiAgICAgdihFeGNlcHRpb25IYW5kbGVyUHRyVGFnKSBcCisgICAgdihH
ZXRQcm9wZXJ0eVB0clRhZykgXAorICAgIHYoR2V0dGVyU2V0dGVyUHRyVGFnKSBcCisgICAgdihI
YXNQcm9wZXJ0eVB0clRhZykgXAogICAgIHYoSklUQ29kZVB0clRhZykgXAogICAgIHYoSklUT3Bl
cmF0aW9uUHRyVGFnKSBcCiAgICAgdihKSVRUaHVua1B0clRhZykgXAorICAgIHYoSklUV3JpdGVU
aHVua1B0clRhZykgXAorICAgIHYoTExJbnRDYWxsSUNQdHJUYWcpIFwKKyAgICB2KE1hdGhJQ1B0
clRhZykgXAogICAgIHYoTmF0aXZlQ29kZVB0clRhZykgXAorICAgIHYoT3BlcmF0aW9uTGlua0Nh
bGxQdHJUYWcpIFwKKyAgICB2KE9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxQdHJUYWcpIFwK
KyAgICB2KE9wZXJhdGlvblZpcnR1YWxDYWxsUHRyVGFnKSBcCisgICAgdihQdXRQcm9wZXJ0eVB0
clRhZykgXAogICAgIHYoU2xvd1BhdGhQdHJUYWcpIFwKKyAgICB2KFNwZWNpYWxpemVkVGh1bmtQ
dHJUYWcpIFwKICAgICB2KFN3aXRjaFRhYmxlUHRyVGFnKSBcCiAgICAgXAogICAgIHYoWWFycjhC
aXRQdHJUYWcpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3Bl
cnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5LDYgKzY5
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDdXN0b21WYWx1ZShKU09iamVjdCogYmFzZSwg
UHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQogICAgIHsKKyAgICAgICAgYXNzZXJ0SXNOdWxsT3JDRnVu
Y3Rpb25QdHIoZnVuY3Rpb24pOwogICAgICAgICBtX3R5cGUgPSBDdXN0b21WYWx1ZTsKICAgICAg
ICAgbV9iYXNlID0gYmFzZTsKICAgICAgICAgbV9wdXRGdW5jdGlvbiA9IGZ1bmN0aW9uOwpAQCAt
NzYsNiArNzcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEN1c3RvbUFjY2Vzc29yKEpTT2Jq
ZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24pCiAgICAgeworICAgICAgICBhc3NlcnRJ
c051bGxPckNGdW5jdGlvblB0cihmdW5jdGlvbik7CiAgICAgICAgIG1fdHlwZSA9IEN1c3RvbUFj
Y2Vzc29yOwogICAgICAgICBtX2Jhc2UgPSBiYXNlOwogICAgICAgICBtX3B1dEZ1bmN0aW9uID0g
ZnVuY3Rpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1By
b2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NTcsNyArMzU3LDggQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjp0YWtlU2FtcGxlKGNvbnN0IAog
ICAgICAgICAgICAgICAgIG1hY2hpbmVGcmFtZSA9IE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50
ZXIocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICBjYWxsRnJhbWUgPSBzdGF0aWNfY2FzdDxF
eGVjU3RhdGUqPihtYWNoaW5lRnJhbWUpOwogICAgICAgICAgICAgICAgIG1hY2hpbmVQQyA9IE1h
Y2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJzKTsKLSAgICAgICAgICAg
ICAgICBsbGludFBDID0gTWFjaGluZUNvbnRleHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJl
Z2lzdGVycyk7CisgICAgICAgICAgICAgICAgbGxpbnRQQyA9IHJlbW92ZUNvZGVQdHJUYWcoTWFj
aGluZUNvbnRleHQ6OmxsaW50SW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykpOworICAgICAg
ICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKG1hY2hpbmVQQyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAvLyBGSVhNRTogTGV0cyBoYXZlIGEgd2F5IG9mIGRldGVjdGluZyB3aGVuIHdl
J3JlIHBhcnNpbmcgY29kZS4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTI3NjEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNVHJhcHMuY3BwCShyZXZpc2lvbiAyMzAxMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OSw2ICs1OSw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6
OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMpKQogICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5l
Q29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ2lzdGVycykpCiAgICAgeworICAgICAgICBhc3NlcnRJ
c05vdFRhZ2dlZCh0cmFwUEMpOwogICAgIH0KIAogICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnM7CkBAIC05Myw2ICs5NCw3IEBAIHZvaWQgVk1UcmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVh
a3BvaW50cygKICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gSklUL0xMSW50IGNvZGUsIHdlIGNhbid0
IHJ1biB0aGUgQysrIGNvZGUgYmVsb3cgYmVjYXVzZSBpdAogICAgIC8vIG1hbGxvY3MsIGFuZCB3
ZSBtdXN0IHByb3ZlIHRoZSBKUyB0aHJlYWQgaXNuJ3QgaG9sZGluZyB0aGUgbWFsbG9jIGxvY2sK
ICAgICAvLyB0byBiZSBhYmxlIHRvIGRvIHRoYXQgd2l0aG91dCByaXNraW5nIGEgZGVhZGxvY2su
CisgICAgYXNzZXJ0SXNOb3RUYWdnZWQodHJhcFBDKTsKICAgICBpZiAoIWlzSklUUEModHJhcFBD
KSAmJiAhTExJbnQ6OmlzTExJbnRQQyh0cmFwUEMpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4
Nyw2ICsxODksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWw6OkJhZEFjY2VzcywgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJz
JiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CiAgICAgICAgICAgICAgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKKyAgICAgICAgICAgICAgICBhc3NlcnRJc05vdFRh
Z2dlZChjb250ZXh0LnRyYXBQQyk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRl
eHQudHJhcFBDKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90
SGFuZGxlZDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmNwcAkocmV2aXNpb24gMjMwMTExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0
NSw2ICsxNDUsNyBAQCBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKICAgICBpbnN0
YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0
KHJlZ2lzdGVycyk7CiAKKyAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQoY29udGV4dC5tYWNoaW5l
UEMpOwogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQogICAgICAgICAg
ICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgyLDkgKzMy
ODIsNyBAQCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAKICAgICAg
ICAgbV90cnlSZWFkVW5pY29kZUNoYXJhY3RlckVudHJ5ID0gbGFiZWwoKTsKIAotI2lmIENQVShB
Uk02NCkKLSAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotI2VuZGlmCisgICAgICAgIHRhZ1JldHVybkFkZHJlc3MoKTsKIAogICAgICAgICB0cnlSZWFk
VW5pY29kZUNoYXJJbXBsKHJlZ1QwKTsKIApAQCAtMzM0Nyw3ICszMzQ1LDcgQEAgY2xhc3MgWWFy
ckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbQogICAgICAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6ZWJwLCAyICogc2l6ZW9mKHZvaWQqKSksIG91dHB1dCk7CiAgICAg
I2VuZGlmCiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0ZXIsIHN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAg
ICBpZiAobV9kZWNvZGVTdXJyb2dhdGVQYWlycykgewogICAgICAgICAgICAgcHVzaFBhaXIoZnJh
bWVQb2ludGVyUmVnaXN0ZXIsIGxpbmtSZWdpc3Rlcik7CiAgICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW0zMigweDEwMDAwKSwgc3VwcGxlbWVudGFyeVBsYW5lc0Jhc2UpOwpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIzMDExMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTgtMDMtMzAgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBwb2ludGVyIHByb2ZpbGluZyBzdXBwb3J0IGluIGJhc2VsaW5lIEpJVCBh
bmQgc3VwcG9ydGluZyBmaWxlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE4NDIwMAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzkwNTczMDA+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUG9p
bnRlclByZXBhcmF0aW9ucy5oOgorICAgICAgICAtIFJlbW92ZSBXVEZfUFJFUEFSRV9GVU5DVElP
Tl9QT0lOVEVSX0ZPUl9FWEVDVVRJT04uICBJdCBpcyBubyBsb25nZXIgbmVlZGVkLgorCiAyMDE4
LTAzLTMwICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBJbnRy
b2R1Y2UgV1RGX0xBWllfSU5TVEFOVElBVEUKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BvaW50ZXJQ
cmVwYXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmgJKHJldmlzaW9uIDIzMDExMSkKKysrIFNvdXJjZS9XVEYvd3RmL1BvaW50ZXJQcmVw
YXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDYgQEAKICNpbmNsdWRlIDxX
ZWJLaXRBZGRpdGlvbnMvUG9pbnRlclByZXBhcmF0aW9ucy5oPgogI2VuZGlmCiAKLSNpZm5kZWYg
V1RGX1BSRVBBUkVfRlVOQ1RJT05fUE9JTlRFUl9GT1JfRVhFQ1VUSU9OCi0jZGVmaW5lIFdURl9Q
UkVQQVJFX0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTih2dGJsUHRyKSAocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4odnRibFB0cikpCi0jZW5kaWYKLQogI2lmbmRlZiBXVEZfUFJFUEFSRV9W
VEJMX1BPSU5URVJfRk9SX0lOU1BFQ1RJT04KICNkZWZpbmUgV1RGX1BSRVBBUkVfVlRCTF9QT0lO
VEVSX0ZPUl9JTlNQRUNUSU9OKHZ0YmxQdHIpIChyZWludGVycHJldF9jYXN0PHZvaWQqPih2dGJs
UHRyKSkKICNlbmRpZgo=
</data>
<flag name="review"
          id="355384"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336910</attachid>
            <date>2018-03-30 22:01:10 -0700</date>
            <delta_ts>2018-03-30 23:06:06 -0700</delta_ts>
            <desc>patch for landing w/ Windows build fix.</desc>
            <filename>bug-184200.patch</filename>
            <type>text/plain</type>
            <size>167834</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBA
QAorMjAxOC0wMy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgaW4gYmFzZWxpbmUgSklUIGFuZCBzdXBwb3J0
aW5nIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg0MjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTA1NzMwMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAxLiBUbyBzaW1wbGlmeSBwb2ludGVy
IHByb2ZpbGluZyBzdXBwb3J0LCB2bUVudHJ5VG9KYXZhU2NyaXB0KCkgbm93IGFsd2F5cyBlbnRl
cnMKKyAgICAgICAgICAgdGhlIGNvZGUgdmlhIHRoZSBhcml0eSBjaGVjayBlbnRyeS4KKyAgICAg
ICAgMi4gVG8gYWNjb21tb2RhdGUgKDEpLCBhbGwgSklUQ29kZSBtdXN0IG5vdyBwb3B1bGF0ZSB0
aGVpciBhcml0eSBjaGVjayBlbnRyeSBjb2RlCisgICAgICAgICAgIHBvaW50ZXJzIGFzIHdlbGwu
ICBGb3IgbmF0aXZlIGNvZGUsIHByb2dyYW1zLCBldmFscywgYW5kIG1vZHVsZXMgdGhhdCBkb24n
dAorICAgICAgICAgICBkbyBhcml0eSBjaGVjaywgd2Ugc2V0IHRoZSBub3JtYWwgZW50cnkgYXMg
dGhlIGFyaXR5IGNoZWNrIGVudHJ5ICh0aG91Z2ggd2l0aAorICAgICAgICAgICB0aGUgQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcgcHJvZmlsZSBpbnN0ZWFkKS4KKworICAgICAgICAqIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxs
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAgIChK
U0M6OlNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjphZGRKSVRBZGRJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVROZWdJQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkTWF0aElDKToKKyAgICAgICAgKiBieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAg
IChKU0M6OkxMSW50Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6CisgICAgICAgICogZGlzYXNzZW1i
bGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJs
ZSk6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFyayk6CisgICAgICAg
ICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6Y2FsbEV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
YnVnQ2FsbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRGdW5jdGlvblByb2xvZ3VlKToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAg
IChKU0M6OkNDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdyk6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6Ompp
dFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
Lmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGppdC9KSVQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAgICAg
IChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRD
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6
OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUpOgorICAgICAgICAoSlNDOjpEaXJl
Y3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENv
ZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoK
KyAgICAgICAgKEpTQzo6aXNQcm9maWxlRW1wdHkpOgorICAgICAgICAoSlNDOjpKSVRCaW5hcnlN
YXRoSUM6OkpJVEJpbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkpJVFVuYXJ5TWF0aElDOjpK
SVRVbmFyeU1hdGhJQyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0
QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9z
dEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKToK
KyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAg
ICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRC
eUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6
OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5hdGl2
ZVRhaWxDYWxsR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0
aXZlQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aW50ZXJuYWxG
dW5jdGlvbkNhbGxHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1
bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJpdHlG
aXh1cEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGFy
Q29kZUF0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGFyQXRUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2x6MzJUaHVua0dlbmVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmZsb29yVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpj
ZWlsVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnVuY1RodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphYnNU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJhbmRvbVRodW5rR2VuZXJhdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6CisgICAgICAg
IChKU0M6OkxMSW50OjpnZXRDb2RlUHRyKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9p
bnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICog
bGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJhdGVUaHVu
a1dpdGhKdW1wVG8pOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZlRnVu
Y3Rpb246OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZl
RnVuY3Rpb246Om9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q2FjaGVhYmxlQ3VzdG9tKToKKyAgICAgICAg
KiBydW50aW1lL1B0clRhZy5oOgorICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6
CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tVmFsdWUpOgorICAgICAg
ICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbUFjY2Vzc29yKToKKyAgICAgICAgKiBy
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAg
ICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6Vk1U
cmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICogdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgor
ICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKwogMjAxOC0wMy0zMCAg
SkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6
IHN1cHBvcnQgRGF0YVZpZXcgY29tcGlsYXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcyLDcgKzg3Miw2IEBAIHB1Ymxp
YzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVl
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhl
IGRlZmF1bHQgUHRyVGFnIHZhbHVlIG9uY2Ugd2UndmUgdGFnZ2VkIGFsbCB0aGUgY2xpZW50cy4K
ICAgICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJM
YWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5vUHRyVGFnKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRhZ0NvZGVQdHIoQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBsYWJl
bCksIHRhZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUp
KTsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRy
ZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSwgTmVhckNhbGxQdHJUYWcpLAor
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExp
bmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSwKICAgICAgICAg
ICAgIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpID8gTmVhckNhbGxNb2RlOjpUYWlsIDogTmVh
ckNhbGxNb2RlOjpSZWd1bGFyKTsKICAgICB9CiAKQEAgLTE5MSw3ICsxOTEsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlu
a2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpKSk7CiAg
ICAgfQogCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgZGVmYXVsdCBQdHJUYWcgdmFsdWUgb25j
ZSB3ZSd2ZSB0YWdnZWQgYWxsIHRoZSBjbGllbnRzLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxv
Y2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7CiAgICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRk
cmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpLCB0YWcpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3NCw3ICszNzc0
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxs
LmRhdGFMb2NhdGlvbigpKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5j
dGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIoQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VX
aXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCkBAIC00NDQyLDEw
ICs0NDQyLDEzIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6TmVhcikpCiAgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUs
IGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRF
UiksIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBlbHNlIGlmIChjYWxs
LmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6VGFpbCkpIHsKKyAgICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2Rl
LCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBl
bHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChmdW5j
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIENhY2hlZFRlbXBSZWdpc3RlciBtX2RhdGFNZW1vcnlUZW1w
UmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Nyw3ICs4NjcsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAjZW5kaWYKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxG
cmFtZSk7CiAKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBw
dHJUYWcoR2V0dGVyU2V0dGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MSwxMCArNjEsMTEgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxGdW5jdGlvblR5cGU+KHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cykuLi4p
OwogCi0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwo
Tm9QdHJUYWcpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKHRhZyk7CiAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBtX2Z1bmN0aW9u
OwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIo
ZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBG
dW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMwLDI0
ICsxNDMwLDI0IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAg
ICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCi1KSVRBZGRJQyogQ29k
ZUJsb2NrOjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0pJVEFkZElD
KiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFBy
b2ZpbGUpOworICAgIHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlv
bik7CiB9CiAKLUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQorSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICByZXR1
cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIG1fbXVsSUNzLmFkZChh
cml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKIH0KIAotSklUU3ViSUMqIENvZGVCbG9jazo6YWRk
SklUU3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCitKSVRTdWJJQyogQ29kZUJsb2Nr
OjphZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogewotICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsKKyAg
ICByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogfQogCi1K
SVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSkKK0pJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbmVnSUNz
LmFkZChhcml0aFByb2ZpbGUpOworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRT
dHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwy
MiArMjQ4LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9N
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJv
ZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBK
SVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUQWRkSUMqIGFkZEpJ
VEFkZElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTXVsSUMqIGFkZEpJ
VE11bElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUU3ViSUMqIGFkZEpJ
VFN1YklDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBK
SVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklU
QWRkSUMocHJvZmlsZSk7IH0KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSog
cHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJldHVybiBhZGRKSVRBZGRJQyhw
cm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVy
YXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE11bElDKiBhZGRN
YXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxl
KTsgfQorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlLCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUsIGluc3Ry
dWN0aW9uKTsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTmVnSUMqIGFkZE1hdGhJQyhBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisgICAgSklU
TmVnSUMqIGFkZE1hdGhJQyhBcml0aFByb2ZpbGUqIHByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOyB9CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkTWF0
aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJl
dHVybiBhZGRKSVRTdWJJQyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBhdXRvIHN0dWJJbmZvQmVn
aW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CkBAIC0zMTAsNiArMzEwLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgIH0KICAgICAK
KyAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247CisgICAgdHlwZWRlZiBQ
b2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5w
YWNrZWRJbnN0cnVjdGlvbnM7CisKICAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0QnlJZENh
Y2hlKEluc3RydWN0aW9uKik7CiAKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0cnVj
dGlvbiogcmV0dXJuQWRkcmVzcykKQEAgLTMxOCw5ICszMjEsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVybkFkZHJlc3MpIC0gaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB9CiAKLSAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24g
SW5zdHJ1Y3Rpb247Ci0gICAgdHlwZWRlZiBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxv
Y2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0KICAgICB1bnNp
Z25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LnNpemUoKTsgfQogICAgIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwg
SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQog
ICAgIGNvbnN0IFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1
Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydQogICAgIFJFTEVBU0VfQVNTRVJUKGxp
bmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0KTsK
IAotICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOZWFySnVtcFB0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1w
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIzMDEyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBCYXNpY1IKICAgICB7CiAgICAgICAgIGNhbGxlZS5jbGVhcigpOwogICAgICAgICBt
YWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgICAgICBjYWxs
UHRyVGFnID0gTm9QdHJUYWc7CiAgICAgICAgIGlmIChpc09uTGlzdCgpKQogICAgICAgICAgICAg
cmVtb3ZlKCk7CiAgICAgfQpAQCAtNTksNyArNTgsNiBAQCBzdHJ1Y3QgTExJbnRDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgQmFzaWNSCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBsYXN0U2VlbkNhbGxlZTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbWFjaGluZUNvZGVUYXJnZXQ7Ci0gICAgUHRyVGFnIGNhbGxQdHJUYWcgeyBO
b1B0clRhZyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlz
aW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMCArMTk5LDExIEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0
aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5j
YWxsKHRhZyk7CiAgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIE5vUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFu
ZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsK
ICAgICB9CkBAIC01MzgsNyArNTM5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9y
cGhpY0FjY2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0
RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAg
ICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIGhh
bmRsZXJUb1JlZ2lzdGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobWFrZXNo
aWZ0Q2F0Y2hIYW5kbGVyLCBOZWFySnVtcFB0clRhZyk7CiAgICAgICAgICAgICAgICAgaGFuZGxl
clRvUmVnaXN0ZXIuc3RhcnQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKTsK
ICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5lbmQgPSBuZXdFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlLmJpdHMoKSArIDE7CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBl
bmRFeGNlcHRpb25IYW5kbGVyKGhhbmRsZXJUb1JlZ2lzdGVyKTsKQEAgLTU2OCw3ICs1NjksNyBA
QCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIGRhdGFM
b2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2NrLCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjogR2Vu
ZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAi
XG4iKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9G
T1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIGNv
ZGVCbG9jaywgbGlua0J1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICIlcyIsIHRvQ1N0
cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9y
aWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1w
KGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDggQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6
Y29kZVNpemUoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIG1faml0
Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRh
KCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBDb2Rl
RW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7Cisg
ICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2Vk
Q29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSk7CiAg
ICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigp
KTsKICAgICAKQEAgLTcxLDcgKzcwLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlW
YWx1ZSgpKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5B
TElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBOb1B0clRhZywgIkRGRyBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlu
a0J1ZmZlciwgQ29kZUVudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
KS5kYXRhKCkpLAogICAgICAgICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29kZUJs
b2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzY5LDggKzM3NjksMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KTsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlLCBpbnN0cnVjdGlvbik7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00NDM0LDggKzQ0MzYsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICBib29sIG5lZWRzU2NyYXRj
aEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUU3ViSUMqIHN1YklDID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1p
emU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVT
dWI7CiAgICAgICAgIApAQCAtNDUyMyw4ICs0NTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
SklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07Cisg
ICAgICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgICAgICBib29sIG5lZWRz
U2NyYXRjaEdQUlJlZyA9IHRydWU7CkBAIC00Nzg4LDggKzQ3OTQsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAg
ICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7
CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7
CiAgICAgICAgIApAQCAtOTkwMCw3ICs5OTA4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN3aXRjaEludEp1bXAoCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdC54b3I2NChwb2lz
b25TY3JhdGNoLCBzY3JhdGNoKTsKICNlbmRpZgotICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgTm9Q
dHJUYWcpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJs
ZSk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCB0YWcpOwogICAgIGRhdGEtPmRpZFVzZUp1bXBU
YWJsZSA9IHRydWU7CiB9CiAKQEAgLTk5MjUsNyArOTkzNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gdGVtcDIu
Z3ByKCk7CiAKICAgICAgICAgdmFsdWUudXNlKCk7Ci0gICAgICAgIAorCisgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgdGFibGUgPSBtX2ppdC5jb2RlQmxvY2soKS0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRj
aFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBhdXRvIG5vdEludDMyID0gbV9qaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwogICAgICAgICBlbWl0U3dpdGNoSW50SnVtcChkYXRh
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoLCBzY3JhdGNoMik7CiAgICAgICAgIG5v
dEludDMyLmxpbmsoJm1faml0KTsKQEAgLTk5MzQsNyArOTk0NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1ZVJlZ3MsIGRhdGEt
PnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAK
LSAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBOb1B0clRhZyk7CisgICAgICAgIG1faml0Lmp1
bXAoc2NyYXRjaCwgdGFnKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTAxOTIsMTIgKzEwMjAz
LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICAgICAg
dG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9CiAgICAgCisgICAgYXV0byog
Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CiAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3aXRj
aCB8fCB0b3RhbExlbmd0aCA+IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3Rh
bExlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgIG9w
ZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3
aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBtX2ppdC5qdW1wKHN0cmluZywgTm9QdHJUYWcpOworICAgICAgICBtX2ppdC5q
dW1wKHN0cmluZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEwMjMw
LDEyICsxMDI0NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25T
CiAgICAgZW1pdEJpbmFyeVN3aXRjaFN0cmluZ1JlY3Vyc2UoCiAgICAgICAgIGRhdGEsIGNhc2Vz
LCAwLCAwLCBjYXNlcy5zaXplKCksIHN0cmluZywgbGVuZ3RoR1BSLCB0ZW1wR1BSLCAwLCBmYWxz
ZSk7CiAgICAgCisgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CisKICAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0cmluZyk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBtX2ppdC5qdW1w
KHN0cmluZywgTm9QdHJUYWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vZGUqIG5vZGUsIFN3aXRjaERh
dGEqIGRhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsCiB7CiAgICAgQTY0RE9wY29kZSBhcm02NE9wY29kZTsKIAotICAgIHVp
bnQzMl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50MzJfdCogY3VycmVudFBDID0gcmVtb3ZlQ29k
ZVB0clRhZzx1aW50MzJfdCo+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgc2l6
ZV90IGJ5dGVDb3VudCA9IHNpemU7CiAKICAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE4ICs3MywxOCBAQCBib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVDb21tb24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAotICAg
IGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYoCi0g
ICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBDb2RlRW50cnlQ
dHJUYWcsCi0gICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSkpOwotCi0gICAgaWYgKGVudHJ5cG9pbnRMaW5rQnVmZmVyKSB7Ci0gICAgICAgIGppdENvZGUt
PmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKLSAgICAgICAgICAgIEZJTkFMSVpFX0NP
REVfSUYoCi0gICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtC
dWZmZXIsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLAotICAgICAgICAgICAgICAgICJG
VEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2Rl
OjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSk7Ci0gICAgfQotICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBiM0NvZGVSZWYgPQorICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBE
aXNhc3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVFbnRyeVB0clRhZywKKyAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVy
CisgICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50
TGlua0J1ZmZlciwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsCisgICAgICAgICAgICAi
RlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29k
ZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKKyAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYucmV0YWdnZWRDb2RlKENv
ZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpKTsKKworICAgIGpp
dENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKKyAgICBqaXRDb2RlLT5pbml0aWFs
aXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOworCiAgICAgbV9wbGFu
LmNvZGVCbG9jay0+c2V0SklUQ29kZSgqaml0Q29kZSk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9w
bGFuLmNvbXBpbGF0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwNSwxNCAr
MTgwNSwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQogICAgIHsK
LSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07
CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRp
bWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZUFkZDsKLSAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAg
ICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVEFkZEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbiwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+Ci0gICAgdm9pZCBjb21w
aWxlVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEZ1bmN0aW9uUHRyIHJl
cGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1bmMxLCB0eXBlbmFtZSBG
dW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZnVuY3Rp
b248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5cGU+Ojp2YWx1ZSAmJiBz
dGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8RnVuYzI+Ojp0eXBl
Pjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZVVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIEZ1bmMxIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgRnVuYzIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSog
bm9kZSA9IG1fbm9kZTsKIApAQCAtMTgzOCw3ICsxODQxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAg
ICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFk
ZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1z
WzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRj
aCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKQEAgLTE4OTYsOCArMTg5OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0
Y2hwb2ludCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KLSAg
ICB2b2lkIGNvbXBpbGVCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEZ1
bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1bmMx
LCB0eXBlbmFtZSBGdW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5cGU+
Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8
RnVuYzI+Ojp0eXBlPjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZUJpbmFyeU1hdGhJQyhBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBGdW5jMSBy
ZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmMyIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKICAgICB7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIApAQCAtMTkzMSw3ICsxOTM1LDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbik7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLCBJ
bnZhbGlkRlBSUmVnKTsKQEAgLTIwNjIsMTAgKzIwNjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CiAgICAgICAg
ICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7
CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViOwotICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwor
ICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIxNTYsMTAgKzIxNjIs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewot
ICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0
ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZi
YXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwotICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1h
dGhJQzxKSVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBu
b25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxK
SVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTI3MzcsMTAgKzI3NDUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKTsKLSAgICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9m
dGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXhdOwogICAgICAgICAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKLSAgICAgICAg
ICAgIGNvbXBpbGVVbmFyeU1hdGhJQzxKSVROZWdHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAgY29t
cGlsZVVuYXJ5TWF0aElDPEpJVE5lZ0dlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlv
biwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0
ZUFkZHJlc3MpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgdWludHB0cl90IGFk
ZHJlc3MgPSByZW1vdmVDb2RlUHRyVGFnPHVpbnRwdHJfdD4oY2FuZGlkYXRlQWRkcmVzcyk7CiAg
ICAgICAgIGlmICghSklUU3R1YlJvdXRpbmU6OnBhc3Nlc0ZpbHRlcihhZGRyZXNzKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
Niw4ICszNDYsOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAj
ZWxzZQogICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAjZW5kaWYKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enosIFNsb3dQYXRoUHRyVGFnKSksIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIFNsb3dQYXRoUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiwgdGFnKSksIEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIHRhZyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDAp
OwpAQCAtOTQwLDggKzk0MSw5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0m
IHZtLCAKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0u
IgogI2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihmdW5jdGlv
biwgU2xvd1BhdGhQdHJUYWcpKSwgc2NyYXRjaCk7Ci0gICAgY2FsbChzY3JhdGNoLCBTbG93UGF0
aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGZ1
bmN0aW9uLCB0YWcpKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCB0YWcpOwogCiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgp
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IEdQUkluZm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUyOSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHsKKyAgICAg
ICAgdGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKICAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3Rlciwg
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCAr
NTksOSBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsKICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0uc2hh
ZG93Q2hpY2tlbigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpPigpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIFNsb3dQ
YXRoUHRyVGFnKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKLSAgICBjYWxsKHNjcmF0Y2gxTm9uQXJn
R1BSLCBTbG93UGF0aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRp
b25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB0YWcpKSwgc2NyYXRj
aDFOb25BcmdHUFIpOworICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIHRhZyk7CiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSks
IHNjcmF0Y2gxTm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdH
UFIpLCBzaGFkb3dQYWNrZXQpOwogICAgIG9rLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
Niw4ICs1ODYsMTIgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBjdXJy
ZW50IGZyYW1lIGJleW9uZCB0aGlzIHBvaW50LiBNYXNxdWVyYWRlIGFzIG91cgogICAgICAgICAv
LyBjYWxsZXIuCiAjaWYgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KQotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLCBsaW5rUmVnaXN0ZXIp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7CiAgICAgICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoMiAqIHNpemVvZih2b2lkKikpLCBuZXdGcmFtZVNpemVHUFIpOworI2lmIFVTRShQ
T0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHRl
bXBHUFIpOworICAgICAgICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHRlbXBHUFIpOworI2VuZGlm
CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2Yodm9pZCopKSwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKICAgICAgICAg
c3ViUHRyKFRydXN0ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSksIG5ld0ZyYW1lU2l6ZUdQUik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NDYsOCArNDQ2LDE0IEBAIHZv
aWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKIAogICAgIC8vIFdlIGxvYWQg
dGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG9u
ZQogI2lmIENQVShBUk0pIHx8IENQVShBUk02NCkKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKHZvaWQqKSksCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOworI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKKyAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIpOworICAgIG1faml0LnVudGFnUHRyKE1hY3JvQXNzZW1ibGVyOjps
aW5rUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAg
bV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbmRp
ZgorCiAjZWxpZiBDUFUoTUlQUykKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQq
KSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiArMjM4LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAKKyAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIod3JpdGFibGVBZGRyKSwgeDcpOwogICAgICAgICBqaXQuYWRkUHRyKHg3LCB4MCk7CiAK
QEAgLTI5OCw3ICsyOTksOCBAQCBwcml2YXRlOgogICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhl
IGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZl
ci4KICAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUg
Y29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5nIHRoZQogICAgICAgICAvLyBhc3luY0Rpc2Fzc2Vt
Ymx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHku
Ci0gICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJs
eShOb1B0clRhZyk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUV3JpdGVUaHVua1B0
clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGxp
bmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRhZyk7CiAgICAgfQogI2Vs
c2UgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikK
ICAgICBzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMzAxMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpJ
VENvbXBpbGF0aW9uRWZmb3J0LmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8c3Rk
ZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KQEAgLTkwLDcgKzkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkKiBwZXJm
b3JtSklUTWVtY3B5KHZvaQogICAgICAgICAgICAgLy8gVXNlIGV4ZWN1dGUtb25seSB3cml0ZSB0
aHVuayBmb3Igd3JpdGVzIGluc2lkZSB0aGUgSklUIHJlZ2lvbi4gVGhpcyBpcyBhIHZhcmlhbnQg
b2YKICAgICAgICAgICAgIC8vIG1lbWNweSB0aGF0IHRha2VzIGFuIG9mZnNldCBpbnRvIHRoZSBK
SVQgcmVnaW9uIGFzIGl0cyBkZXN0aW5hdGlvbiAoZmlyc3QpIHBhcmFtZXRlci4KICAgICAgICAg
ICAgIG9mZl90IG9mZnNldCA9IChvZmZfdCkoKHVpbnRwdHJfdClkc3QgLSBzdGFydE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCk7Ci0gICAgICAgICAgICBqaXRXcml0ZVNlcGFyYXRlSGVhcHNG
dW5jdGlvbihvZmZzZXQsIHNyYywgbik7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVFdyaXRlVGh1bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbik7Cisg
ICAgICAgICAgICByZXRhZ0NvZGVQdHIoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24sIHRh
ZywgQ0Z1bmN0aW9uUHRyVGFnKShvZmZzZXQsIHNyYywgbik7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDksOCArNjQ5LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0
TGlua2luZyhKSVRDb21waQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CiAKKyAgICBMYWJlbCBl
bnRyeUxhYmVsKHRoaXMpOwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0U3RhcnRPZkNvZGUoZW50cnlMYWJlbCk7CiAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRs
ZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUgY29kZWdlbgogICAgIGlmIChyYW5kb20oKSAmIDEp
CkBAIC03MzUsMTUgKzczNiwzMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJ
VENvbXBpCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworI2lmIENQVShBUk02NCkgJiYg
VVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7Cisg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCBy
ZWdUMSk7CisgICAgICAgIFB0clRhZyB0ZW1wVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBu
ZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0ZW1wVGFnKSwgcmVn
VDEpOworICAgICAgICB0YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIHN0b3Jl
UHRyKGxpbmtSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpy
ZXR1cm5QQ09mZnNldCgpKSk7CisjZW5kaWYKICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRy
VGFnKEpJVFRodW5rUHRyVGFnLCBtX3ZtKSwgTmVhckNhbGxQdHJUYWcpKTsKKyNpZiBDUFUoQVJN
NjQpICYmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpLCBsaW5rUmVnaXN0
ZXIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGVtcFRhZyksIHJlZ1QxKTsKKyAgICAg
ICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKKyAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBzdG9yZVB0
cihsaW5rUmVnaXN0ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0
dXJuUENPZmZzZXQoKSkpOworI2VuZGlmCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IG1fYnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgog
I2VuZGlmCiAKICAgICAgICAganVtcChiZWdpbkxhYmVsKTsKLSAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIG1fYXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5vdCBhIGZ1bmN0aW9uLgogCiAg
ICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTc4NCwyMyArODAzLDI4
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAgICBBU1NFUlQocmVj
b3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0gU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1bXBU
YWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHMuc2l6ZSgpKTsKIAotICAgICAgICAgICAg
cmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZz
ZXRdLCBOb1B0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBzaW1wbGVKdW1wVGFibGUgPSByZWNv
cmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHNpbXBsZUp1bXBUYWJsZSk7CisgICAgICAgICAgICBz
aW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFi
ZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdLCB0YWcpOwogCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNo
T2Zmc2V0c1tqXTsKLSAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBU
YWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0clRhZykgOiByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBzaW1wbGVK
dW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgPyBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwg
dGFnKQorICAgICAgICAgICAgICAgICAgICA6IHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChyZWNv
cmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OlN0cmluZyk7CiAKICAgICAgICAgICAgIGF1dG8qIHN0
cmluZ0p1bXBUYWJsZSA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlOworICAgICAg
ICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc3RyaW5nSnVtcFRh
YmxlKTsKICAgICAgICAgICAgIHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9Ci0gICAgICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCAr
IHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0sIHRhZyk7CiAKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiBzdHJp
bmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbG9jYXRpb24uYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLmN0aU9mZnNldCA9IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0clRh
ZykKKyAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgdGFnKQogICAgICAgICAgICAgICAgICAgICA6IHN0
cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
ODMyLDkgKzg1Niw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAg
ICBpZiAoSnVtcChwYXRjaGFibGVOb3RJbmRleEp1bXApLmlzU2V0KCkpCiAgICAgICAgICAgICAg
ICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KHBhdGNoYWJsZU5vdEluZGV4SnVtcCkpOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBi
YWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZh
bENvbXBpbGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlv
bkluZm8uZG9uZVRhcmdldCwgTm9QdHJUYWcpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGls
YXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0LCBOb1B0clRhZyk7Ci0gICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlW
YWxDb21waWxhdGlvbkluZm8uc2xvd1BhdGhUYXJnZXQsIE5vUHRyVGFnKTsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5
VmFsQ29tcGlsYXRpb25JbmZvLmRvbmVUYXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29t
cGlsYXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBp
bGF0aW9uSW5mby5zbG93UGF0aFRhcmdldCk7CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxs
IHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25J
bmZvLnJldHVybkFkZHJlc3MpOwogCiAgICAgICAgICAgICAqYnlWYWxDb21waWxhdGlvbkluZm8u
YnlWYWxJbmZvID0gQnlWYWxJbmZvKApAQCAtODY1LDkgKzg4OSw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGpp
dENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjazsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
bV9hcml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2FyaXR5Q2hlY2ssIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKIAogICAgIGlmIChP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVt
cChwYXRjaEJ1ZmZlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTQsNyArNTE0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3Vy
cmVudEluc3RydWN0aW9uKTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3QobmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQpAQCAt
NjYyLDcgKzY2Miw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRPcGUK
IHZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJv
ZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0
aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTcwNSwx
MSArNzA1LDEyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+
YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0YWcs
IHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIE5vUHRy
VGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKIApAQCAtNzc4LDExICs3NzksMTIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGxlZnRSZWdzKTsKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9u
KTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
dGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCB0
YWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTgxNywxNCArODE5LDE1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzwKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIE5v
UHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxh
YmVsKCk7CkBAIC04ODMsMTQgKzg4NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgog
CisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRj
aCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
Y2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIGNhbGxUYWcsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTk3Nyw3ICs5ODEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJVDo6ZW1pdF9v
cF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0
TWF0aElDRmFzdChtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC05OTMsNyArOTk3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX211bChJbnN0cnVjdGlvbiogYwogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Vi
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Qoc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsMTMgKzcxLDcgQEAgSlNWYWx1ZSBK
SVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwotICAgIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oKnZtLCBwcm90b0Nh
bGxGcmFtZS0+Y2FsbGVlKCkpOwotCi0gICAgaWYgKCFmdW5jdGlvbiB8fCAhcHJvdG9DYWxsRnJh
bWUtPm5lZWRBcml0eUNoZWNrKCkpIHsKLSAgICAgICAgQVNTRVJUKCFwcm90b0NhbGxGcmFtZS0+
bmVlZEFyaXR5Q2hlY2soKSk7Ci0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxs
KE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVudHJ5QWRkcmVzcyA9
IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb0phdmFTY3JpcHQoZW50
cnlBZGRyZXNzLCB2bSwgcHJvdG9DYWxsRnJhbWUpKTsKICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsKIH0KQEAgLTEyNyw3ICsxMjEsMTIgQEAgSklUQ29k
ZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKAogdm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwotICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3M8Y2hhcio+KCkgKyBvZmZzZXQ7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIGlmICghb2Zm
c2V0KQorICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisK
KyAgICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9yZWYu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgcmV0dXJu
IHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVFbnRyeVB0clRhZyk7
CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXpl
X3Qgb2Zmc2V0KQpAQCAtMTY2LDYgKzE2NSw4IEBAIERpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoSklUQ29kZTo6Q28KICAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCiAg
ICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQogeworICAgIEFTU0VSVChtX3Jl
Zik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBEaXJlY3RKSVRDb2RlOjp+
RGlyZWN0SklUQ29kZSgpCkBAIC0xNzcsNiArMTc4LDggQEAgdm9pZCBEaXJlY3RKSVRDb2RlOjpp
bml0aWFsaXplQ29kZVJlZihKSQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CiAgICAgbV9y
ZWYgPSByZWY7CiAgICAgbV93aXRoQXJpdHlDaGVjayA9IHdpdGhBcml0eUNoZWNrOworICAgIEFT
U0VSVChtX3JlZik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBKSVRDb2Rl
OjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFy
aXR5KQpAQCAtMjEzLDEwICsyMTYsMTcgQEAgdm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZihDbwogICAgIG1fcmVmID0gcmVmOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIE5hdGl2
ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKQorSklUQ29kZTo6Q29kZVB0
ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKLSAgICByZXR1cm4gbV9yZWYuY29kZSgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2Fz
ZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cisg
ICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgcmV0dXJuIG1fcmVmLnJldGFnZ2VkQ29k
ZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigp
OwogfQogCiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDYgKzg2
LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQogICAgIAogICAg
IEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKIAorICAgIGFzc2VydElzVGFnZ2VkV2l0
aChjYXRjaFJvdXRpbmUsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHZtLT5jYWxsRnJh
bWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKICAgICB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cg
PSBjYXRjaFJvdXRpbmU7CiAgICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9IGNh
dGNoUENGb3JJbnRlcnByZXRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZSwgYm9vbCgqCiBjbGFzcyBKSVRNYXRoSUMgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpJVE1hdGhJQyhBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkKKyAgICBKSVRNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICAgICAgOiBtX2FyaXRoUHJvZmlsZShhcml0aFBy
b2ZpbGUpCisgICAgICAgICwgbV9pbnN0cnVjdGlvbihpbnN0cnVjdGlvbikKICAgICB7CiAgICAg
fQogCkBAIC0xMzksMTEgKzE0MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LmRhdGFMb2NhdGlvbigpLCBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVl
ZHNCcmFuY2hDb21wYWN0aW9uKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZm
ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChtX2NvZGUuY29kZSgpKSk7Ci0gICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBsaW5raW5nIGNvbnN0YW50IGp1bXAgdG8g
b3V0IG9mIGxpbmUgc3R1YiIpOworICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBOZWFySnVtcFB0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91
dCBvZiBsaW5lIHN0dWIiKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIHJlcGxhY2VDYWxs
ID0gWyZdICgpIHsKLSAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGNhbGxSZXBsYWNlbWVudCk7CisgICAgICAgICAg
ICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbV9pbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzbG93UGF0aENhbGxM
b2NhdGlvbigpLCBGdW5jdGlvblB0cihjYWxsUmVwbGFjZW1lbnQsIHRhZykpOwogICAgICAgICB9
OwogCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwpAQCAtMTY2LDcgKzE2OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRvbmVM
b2NhdGlvbigpKTsKIAogICAgICAgICAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTm9Q
dHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJQyBzbmlwcGV0
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJK
dW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMgc25p
cHBldCIpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdGlvblN0YXRlLnNob3Vs
ZFNsb3dQYXRoUmVwYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3Qg
bmVlZCB0byByZWdlbmVyYXRlLCBzbyB3ZSBjYW4gd2lyZSB0aGUgc2xvdyBwYXRoIGNhbGwKQEAg
LTIwOCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xv
d1BhdGhKdW1wTGlzdCwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBt
X2NvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElD
IHNuaXBwZXQiKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJK
dW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQi
KTsKICAgICAgICAgfQogCiAgICAgICAgIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0KCk7CkBA
IC0yMTYsNyArMjE4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZUlubGluZUNvZGUo
Y29uc3QgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKICAgICB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoU3RhcnQsIE5vUHRyVGFnKTsKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuZmFzdFBhdGhT
dGFydCwgTmVhckp1bXBQdHJUYWcpOwogICAgICAgICBtX2lubGluZVN0YXJ0ID0gc3RhcnQ7CiAK
ICAgICAgICAgbV9pbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKQEAgLTIyNiw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGVsdGFGcm9t
U3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c3RhdGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAg
ICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBT
bG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBOb1B0clRhZykpOwogICAgIH0KIAogICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0KQEAg
LTI0Myw2ICsyNDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEFyaXRoUHJvZmlsZSogbV9h
cml0aFByb2ZpbGU7CisgICAgSW5zdHJ1Y3Rpb24qIG1faW5zdHJ1Y3Rpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0
YXJ0OwogICAgIGludDMyX3QgbV9pbmxpbmVTaXplOwpAQCAtMjU5LDggKzI2Miw4IEBAIGlubGlu
ZSBib29sIGlzQmluYXJ5UHJvZmlsZUVtcHR5KEFyaXRoUHIKIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3JUeXBlPgogY2xhc3MgSklUQmluYXJ5TWF0aElDIDogcHVibGljIEpJVE1hdGhJQzxH
ZW5lcmF0b3JUeXBlLCBpc0JpbmFyeVByb2ZpbGVFbXB0eT4gewogcHVibGljOgotICAgIEpJVEJp
bmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLSAgICAgICAgOiBKSVRNYXRo
SUM8R2VuZXJhdG9yVHlwZSwgaXNCaW5hcnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSkKKyAg
ICBKSVRCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNCaW5h
cnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pCiAgICAgewogICAgIH0K
IH07CkBAIC0yNzcsOCArMjgwLDggQEAgaW5saW5lIGJvb2wgaXNVbmFyeVByb2ZpbGVFbXB0eShB
cml0aFBybwogdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBjbGFzcyBKSVRVbmFy
eU1hdGhJQyA6IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2ZpbGVF
bXB0eT4gewogcHVibGljOgotICAgIEpJVFVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKQotICAgICAgICA6IEpJVE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc1VuYXJ5UHJvZmls
ZUVtcHR5Pihhcml0aFByb2ZpbGUpCisgICAgSklUVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRNYXRo
SUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2ZpbGVFbXB0eT4oYXJpdGhQcm9maWxlLCBpbnN0
cnVjdGlvbikKICAgICB7CiAgICAgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0MywxMyArMTA0MywxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFk
ZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9T
bG93UGF0aCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsK
LSAgICAKKwogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9T
VFVCKAogICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAogICAgICAg
ICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5R2VuZXJpYywgTm9QdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjMw
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
SW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBq
dW1wVGFibGUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJu
VmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWcoU3dp
dGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyArNzEy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJldHVy
blZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTE3MCwxMSArMTE3MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgaGFzX2lu
ZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVy
bkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJp
YywgSGFzUHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMzMsNyAr
MTIzMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1QwLCByZWdU
MSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIEhhc1Byb3BlcnR5UHRyVGFnLCBkc3QsIHJlZ1QwLCBy
ZWdUMSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
cy5oIgpAQCAtNzMwLDcgKzczMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE9wdGkKICAgICBpZiAodHJ5UHV0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykp
ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7CiAgICAgICAgIC8vIERvbid0IGV2ZXIg
dHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9V
Ul9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihP
VVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMs
IFB1dFByb3BlcnR5UHRyVGFnKSk7CiAgICAgfQogICAgIHB1dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KQEAgLTgxNCw3ICs4MTUsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgaWYgKHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAgICAg
ICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5j
dGlvblB0cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0
eVB0clRhZykpOwogICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKQEAgLTg2MSw3ICs4NjIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgUHRyVGFnIHJlc3VsdFRhZykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2Fs
bGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtODgwLDIw
ICs4ODEsMjIgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAg
ICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAg
ICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBw
dHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAg
ICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAot
ICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSksCisgICAgICAgICAgICAgICAgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlLCByZXN1bHRUYWcpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NF
UlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAg
IH0KIApAQCAtOTA5LDE4ICs5MTIsMjAgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbAogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVl
KSk7CiAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFn
ID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUsIHJlc3VsdFRhZyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1Rh
ZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIApAQCAtOTMwLDYgKzkzNSw3IEBAIFNsb3dQ
YXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAK
KyAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxsUHRy
VGFnLCB2bSk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZv
LT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKQEAgLTk0NSwxMiArOTUxLDEzIEBAIFNsb3dQYXRoUmV0dXJuVHlw
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5z
ZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxM
aW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CisgICAgICAgICAg
ICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb2RlUHRyLCBDb2RlRW50cnlQdHJUYWcpOwogCi0gICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgdm9pZCogbGlua2Vk
VGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVu
dHJ5UHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5r
SW5mbyk7CisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVB
c1ZhbHVlLCBjYWxsTGlua0luZm8sIGxpbmtlZFRhcmdldFRhZyk7CiAgICAgfQogCiAgICAgSlNG
dW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCk7CkBAIC05NTksNDAgKzk2Niw0NiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgUHRyVGFnIGNvZGVUYWcgPSBOb1B0clRh
ZzsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2Rl
UHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Cisg
ICAgICAgIGNvZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKICAgICB9IGVs
c2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCisgICAgICAgIGF1
dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgUHRyVGFnIHRo
dW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gcmV0
YWdDb2RlUHRyKHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRodW5rVGFnLCBsaW5rZWRUYXJn
ZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKICAgICAg
ICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmls
aXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJs
b2NrKiogY29kZUJsb2NrU2xvdCA9IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwog
ICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JF
eGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPigqdm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpj
b2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KGVycm9yKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CiAgICAg
ICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAgICBBcml0eUNoZWNrTW9kZSBh
cml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBj
YWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAg
ICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
ZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICAgICAg
Y29kZVRhZyA9IENvZGVFbnRyeVB0clRhZzsKKyAgICAgICAgfQogICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKICAgICB9CiAg
ICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExp
bmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgCi0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAq
Y2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwgY29kZVRhZyk7CisKKyAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgbGlua2VkVGFy
Z2V0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGly
ZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Z1
bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDI1LDcgKzEwMzgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0RpcmVjdENhCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgIGVsc2UgewogICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCkBAIC0xMDM1LDIwICsxMDQ4LDE4
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgdGhyb3dTY29wZS5leGNlcHRpb24oKSA9
PSByZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbio+KGVycm9yKSk7CiAgICAgICAgIGlmIChlcnJv
cikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CiAg
ICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhY2tTbG90cyA9IGNhbGxMaW5rSW5mby0+bWF4TnVt
QXJndW1lbnRzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGFyaXR5
ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7CisgICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkucmV0YWdnZWQoQ29kZUVudHJ5UHRyVGFnLCBOZWFyQ2Fs
bFB0clRhZyk7CiAgICAgfQogICAgIAogICAgIGxpbmtEaXJlY3RGb3IoZXhlYywgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQor
ICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpT
Q2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBQdHJUYWcgcmVzdWx0VGFnKQogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CkBAIC0xMDYzLDEwICsxMDc0LDEwIEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxG
dW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgcmVzdWx0VGFnKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlu
a0luZm8pOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVl
QXNWYWx1ZSwgY2FsbExpbmtJbmZvLCByZXN1bHRUYWcpOwogICAgIH0KICAgICAKICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOwpAQCAtMTA3Nyw4ICsxMDg4LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aAogCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdCkgewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIFB0
clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogCkBAIC0xMDg2LDIxICsxMDk4LDI1IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
KnZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8
RXhjZXB0aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBQ
dHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENv
ZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
IH0KIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKQogeworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3Bl
Y2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNG
dW5jdGlvbkNlbGw7Ci0gICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCk7CisgICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsUHRyVGFnLCB2bSk7CisgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCwgcmVzdWx0VGFnKTsKIAogICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxl
ZSwgKmNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsKICAg
ICAKQEAgLTExMDksOCArMTEyNSwxMSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCiB7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVl
LCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CisgICAgUHRyVGFn
IHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25WaXJ0dWFsQ2FsbFB0clRhZywgdm0pOworICAg
IHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywg
Y2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRUYWcpOwogfQogCiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCkBAIC0xNzYxLDcg
KzE3ODAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNT
dHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
KSk7CisgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0eVB0
clRhZykpOwogICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAgICAg
ICAgICB9CkBAIC0xODI5LDcgKzE4NDgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRy
eUdldEJ5VmFsT3B0CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJl
KTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xOTAxLDcgKzE5MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgaWYgKHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykgPT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAg
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9w
ZXJ0eVB0clRhZykpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0QnlW
YWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykp
OwpAQCAtMTk0MSw3ICsxOTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYQogICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAKICAg
ICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKICAg
ICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwor
ICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIo
T1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYywgSGFzUHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MjAwMSw3ICsyMDIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIEFTU0VS
VChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9u
UHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMgOiBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CisgICAgICAgICAgICBhdXRvIGdldEJ5VmFsRnVu
Y3Rpb24gPSBieVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmlj
IDogb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0
aW9uUHRyKGdldEJ5VmFsRnVuY3Rpb24sIEdldFByb3BlcnR5UHRyVGFnKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShl
eGVjKTsKQEAgLTIxNTAsNiArMjE3MCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3dpdGNoQ2hhclcKICAgICAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgo
KnZhbHVlKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjE2
OCw2ICsyMTg5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hJbW1XaQog
ICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oa2V5LmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGVsc2UKICAgICAg
ICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZq
dW1wVGFibGUpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIApAQCAtMjE4Nyw2ICsyMjA5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHJpbgogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRGVm
YXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3Vs
dCwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMzAxMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICBKdW1wTGlz
dCBmYWlsdXJlczsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGZhaWx1cmVzLmFw
cGVuZChqaXQuYnJhbmNoU3RydWN0dXJlKAogICAgICAgICBOb3RFcXVhbCwgCiAgICAgICAgIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIApAQCAtOTAsNyArOTEs
NyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0LnJl
dCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIlN0
cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgTmVhckNhbGxQdHJUYWcsICJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTIzNyw3ICsyMzgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5
VmFsV2l0CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQ
YXRoSnVtcCgpLmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcs
IGRzdCwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIHNsb3dEb25l
Q2FzZSA9IGp1bXAoKTsKIApAQCAtMjc1LDcgKzI3Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBOb1B0clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBHZXRQcm9wZXJ0eVB0
clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQ
YXRoOwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LnJldHVybkFkZHJlc3MgPSBjYWxsOwpAQCAtNDU1LDcgKzQ1Niw3IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKQEAgLTQ5Miw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAg
ICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgTm9QdHJUYWcsIHJlZ1QwLCByZWdUMSwgcmVn
VDIsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGlt
aXplLCBQdXRQcm9wZXJ0eVB0clRhZywgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsK
IAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC01OTMsNyArNTk0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdAogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZS
ZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY1NSw4ICs2
NTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0CiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworCisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNjcxLDggKzY3Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwo
KSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTQsOCArNzE1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdAogICAgIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFB1
dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1w
bCgpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CkBAIC0xMjU4LDExICsxMjU4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
VmFsKEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAg
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBn
ZXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVy
aWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMjkwLDEyICsxMjkwLDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZm
ZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNl
bGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwg
dG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwog
ICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJp
YywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMsIEdldFByb3BlcnR5UHRyVGFnKSk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
CkBAIC0xMzM4LDIzICsxMzM4LDIzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwog
ICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2Fs
bHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxlQWRkcmVzcygpID09IG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5m
cm9tLCBGdW5jdGlvblB0cihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgU2xvd1BhdGhQ
dHJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCku
Y2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
Lmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3QoKS5jYWxsZWUpOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3Qp
IHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAgICAg
ICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7
CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
TmVhckp1bXBQdHJUYWcsCiAgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qg
c3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICB9CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywg
UHV0UHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCkBAIC0xMzgwLDEyICsxMzgwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMg
d2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5p
bXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJ
bmZvKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJ
bmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihw
dXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVy
dHlQdHJUYWcpKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBOYXRpdmVFeGVj
dXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgUmVmUHRyPEpJVENvZGU+IGZvckNh
bGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZW50cnkgPSBnZW5lcmF0b3Iodm0pOwotICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoZW50cnksIGVudHJ5LmNvZGUoKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykp
OworICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZW50cnksIGVu
dHJ5LnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNr
UHRyVGFnKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIH0gZWxzZQogICAgICAgICBm
b3JDYWxsID0gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ2FsbCh2bSkpLCBKSVRDb2RlOjpI
b3N0Q2FsbFRodW5rKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0
dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVP
cHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnlJRAogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTM2OCw4ICszNjgsMTAgQEAgdm9pZCByZXBhdGNoR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25D
YWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNHZXRC
eUlkRnVuY3Rpb24oa2luZCkpOworICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hl
KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRG
dW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKQEAgLTM4NiwxNyAr
Mzg4LDE0IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKIAogc3Rh
dGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1
bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewot
ICAgIGF1dG8gcGlja1Nsb3dQYXRoID0gWyZdICgpIC0+IFZfSklUT3BlcmF0aW9uX0VTc2lKSkkg
ewotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYgKHB1
dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICB9CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
IHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9OwotICAgIHJldHVybiB0YWdD
RnVuY3Rpb25QdHIocGlja1Nsb3dQYXRoKCksIFNsb3dQYXRoUHRyVGFnKTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIGlmIChwdXRL
aW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTQ0Myw3ICs0NDIsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRy
KGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgUHV0
UHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC01NzUsOCArNTc0LDEwIEBAIHZvaWQgcmVwYXRjaFB1dEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1YKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNo
ZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVu
Y3Rpb25QdHIoYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
LCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgIH0KIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlSW4oCkBAIC02OTgsNyArNjk5LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNz
ZW1ibHlPd25lcihKU0NlbGwqIAogCiB2b2lkIGxpbmtGb3IoCiAgICAgRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
Ci0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisg
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIFB0clRh
ZyBjb2RlVGFnKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKQEAgLTcy
MCw3ICs3MjEsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4g
IiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdp
bigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50
IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFy
Q2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQ
dHIpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5o
b3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0ci5yZXRhZ2dlZChjb2RlVGFn
LCBOZWFyQ2FsbFB0clRhZykpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5r
SW5mbyk7CkBAIC03NjcsNiArNzY4LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcigKIAogc3RhdGljIHZv
aWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZikKIHsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVJl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgTmVhckNhbGxQdHJUYWcpOwogICAgIGlmIChj
YWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2Rl
QmxvY2soKTsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5r
SW5mbzo6RGlyZWN0VGFpbENhbGwpCkBAIC0xMDg1LDcgKzEwODcsNyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcg
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAot
ICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAg
ICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAg
ICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAs
IHRhcmdldHMgJXMiLAogICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1i
bHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgpKSwK
QEAgLTExMTIsMTMgKzExMTQsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogCiB2b2lk
IHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQogewotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rp
b25QdHIoYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9w
ZXJ0eVB0clRhZykpOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5m
bywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
ewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdp
c2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHVudGFnQ0Z1
bmN0aW9uUHRyPFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
UHV0UHJvcGVydHlQdHJUYWcpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVk
RnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CkBAIC0xMTMxLDcgKzExMzMsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0KIAotICAgIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCks
IHRhZ0NGdW5jdGlvblB0cihvcHRpbWl6ZWRGdW5jdGlvbiwgU2xvd1BhdGhQdHJUYWcpKTsKKyAg
ICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENh
bGxMb2NhdGlvbigpLCBGdW5jdGlvblB0cihvcHRpbWl6ZWRGdW5jdGlvbiwgUHV0UHJvcGVydHlQ
dHJUYWcpKTsKICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIHN0
dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSgogdm9pZCByZXBhdGNoUHV0QnlJ
RChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQg
YnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50
aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGxpbmtG
b3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBQdHJUYWcpOwogdm9pZCBsaW5rRGlyZWN0Rm9yKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cik7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1
bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTcwLDE0ICsxNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkr
KykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1f
Y2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBOb1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7
CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZUVudHJ5
UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBS
ZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgICAgIC8vIGFuZCByZXR1cm4gdmFs
dWUuIExpa2UgYW55IHNlbnNpYmxlIGFyY2hpdGVjdHVyZSB3b3VsZC4KICAgICAgICAgdm9pZCBj
YWxsRG91YmxlVG9Eb3VibGUoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoU2xvd1BhdGhQdHJUYWcp
LCBmdW5jdGlvbikpOworICAgICAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZnVuY3Rpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNw
ZWNpYWxpemVkVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAgIG1fY2Fs
bHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwodGFnKSwgRnVuY3Rpb25QdHIoZnVuY3Rpb24s
IHRhZykpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9E
b3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjMw
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBw
b2ludGVyR1BSKQordGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KK2lubGluZSB2b2lkIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRh
Z1R5cGUgdGFnKQogewogICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCiAgICAgICAgIHJldHVybjsK
QEAgLTUyLDYgKzUzLDcgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxs
SAogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7CiAgICAgaXNOb25a
ZXJvLmxpbmsoJmppdCk7CiAgICAgaml0LnB1c2hUb1NhdmUocG9pbnRlckdQUik7CisgICAgaml0
LnVudGFnUHRyKHBvaW50ZXJHUFIsIHRhZyk7CiAgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBv
aW50ZXJHUFIpOwogICAgIGppdC5wb3BUb1Jlc3RvcmUocG9pbnRlckdQUik7CiB9CkBAIC02OCwx
OSArNzAsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50
b3BFbnRyeUZyYW1lKTsKIAorICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBO
b1B0clRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NG
dW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyLCBjYWxsVGFnKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxU
YWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKKyAgICBQdHJUYWcg
dGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBO
b1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRodW5rVGFnLCAiVGhyb3cgZXhj
ZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogc3RhdGljIHZvaWQgc2xv
d1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRp
b25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVk
TGlua2VkVGFyZ2V0VGFnKQogeworICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5r
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisKICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgq
dm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOwpAQCAtOTMsOSArOTksOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxUYWcp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKKyAgICBqaXQuY2FsbChHUFJJbmZvOjpub25B
cmdHUFIwLCBjYWxsVGFnKTsKICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIDgpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwog
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKICAgICBqaXQuYWRkUHRyKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkBAIC0xMDMsOSArMTA5LDkgQEAgc3RhdGlj
IHZvaWQgc2xvd1BhdGhGb3IoCiAgICAgaWYgKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1tYXhGcmFt
ZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwogICAgIGppdC5zZXR1cEFyZ3VtZW50czxkZWNsdHlwZShzbG93UGF0aEZ1bmN0aW9uKT4o
R1BSSW5mbzo6cmVnVDIpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHNsb3dQYXRoRnVuY3Rpb24pKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BS
MCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgTm9QdHJUYWcpOworICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWdDRnVuY3Rpb25QdHIoc2xvd1Bh
dGhGdW5jdGlvbiwgY2FsbFRhZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBlbWl0UG9p
bnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKKyAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBjYWxsVGFnKTsKICAgICBpZiAobWF4RnJhbWVF
eHRlbnRGb3JTbG93UGF0aENhbGwpCiAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMTE2LDggKzEyMiw5IEBAIHN0YXRp
YyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIC8vIDMpIFRoZSBmdW5jdGlvbiB0byBjYWxsLgogICAg
IC8vIFRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIEdQUiB3aWxsIGhvbGQgYSBub24temVybyB2YWx1
ZSBmb3IgdGFpbCBjYWxscy4KIAotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOwogICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKIAog
ICAgIFJFTEVBU0VfQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkg
PT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMCkpOwogICAgIENDYWxsSGVscGVyczo6SnVtcCBk
b05vdFRyYXNoID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwpAQCAtMTI2LDcgKzEzMyw3IEBAIHN0YXRpYyB2b2lkIHNsb3dQ
YXRoRm9yKAogICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKIAogICAgIGRvTm90VHJhc2gubGluaygmaml0KTsKLSAgICBqaXQuanVtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworICAgIGppdC5qdW1wKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CiB9CiAKIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKQEAgLTEzNywxMSArMTQ0
LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIKICAgICAvLyB0
byBiZSBpbiByZWdUMC9yZWdUMSAocGF5bG9hZC90YWcpLCB0aGUgQ2FsbEZyYW1lIHRvIGhhdmUg
YWxyZWFkeQogICAgIC8vIGJlZW4gYWRqdXN0ZWQsIGFuZCBhbGwgb3RoZXIgcmVnaXN0ZXJzIHRv
IGJlIGF2YWlsYWJsZSBmb3IgdXNlLgogICAgIENDYWxsSGVscGVycyBqaXQ7Ci0gICAgCi0gICAg
c2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwpOwotICAgIAorCisgICAgUHRy
VGFnIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxsUHRy
VGFnLCB2bSk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0NhbGwsIGV4
cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0
LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVy
LCBOb1B0clRhZywgIkxpbmsgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBw
YXRoIHRodW5rIik7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkg
aW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgpAQCAtMTQ5
LDExICsxNTcsMTIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDYWxsVGh1bmtHZW5lcgog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihW
TSogdm0pCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdDsKLSAgICAKLSAgICBzbG93UGF0aEZvcihq
aXQsIHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKTsKLSAgICAKKworICAgIFB0clRh
ZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsUHRyVGFnLCB2bSk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a1BvbHltb3JwaGljQ2FsbCwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOworCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiTGluayBwb2x5bW9ycGhpYyBjYWxsIHNs
b3cgcGF0aCB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBO
ZWFyQ2FsbFB0clRhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBzbG93IHBhdGggdGh1bmsiKTsK
IH0KIAogLy8gRklYTUU6IFdlIHNob3VsZCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbWVnYW1vcnBo
aWMgdmlydHVhbCBjYWxsIHZzLiBhIHNsb3cKQEAgLTIwMCw3ICsyMDksNyBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbFRodW5rRm9yKFZNCiAgICAgYXV0byBub3RKU0Z1bmN0aW9uID0g
aml0LmJyYW5jaElmTm90VHlwZShHUFJJbmZvOjpyZWdUMCwgSlNGdW5jdGlvblR5cGUpOwogICAg
IAogICAgIC8vIE5vdyB3ZSBrbm93IHdlIGhhdmUgYSBKU0Z1bmN0aW9uLgotICAgIAorCiAgICAg
aml0LmxvYWRQdHIoCiAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAogICAgICAgICBHUFJJbmZvOjpy
ZWdUNCk7CkBAIC0yMjEsMjYgKzIzMCwyOCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVh
bFRodW5rRm9yKFZNCiAKICAgICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJu
IGJhY2sgdG8gSklUIGNvZGUuCiAgICAgSlNJbnRlcmZhY2VKSVQ6OkxhYmVsIGNhbGxDb2RlKGpp
dC5sYWJlbCgpKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdU
NCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDQsIENvZGVF
bnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENh
bGwoKSkgewogICAgICAgICBqaXQucHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUklu
Zm86OnJlZ1QwKTsKICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coR1BSSW5mbzo6
cmVnVDQpOwogICAgIH0KLSAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCwgTm9QdHJUYWcpOwor
ICAgIGppdC5qdW1wKEdQUkluZm86OnJlZ1Q0LCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRh
Zyk7CiAKICAgICBub3RKU0Z1bmN0aW9uLmxpbmsoJmppdCk7CiAgICAgc2xvd0Nhc2UuYXBwZW5k
KGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVnVDAsIEludGVybmFsRnVuY3Rpb25UeXBl
KSk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtLT5nZXRDVElJ
bnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25L
aW5kKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZvOjpyZWdUNCk7CisgICAgdm9pZCog
ZXhlY3V0YWJsZUFkZHJlc3MgPSB2bS0+Z2V0Q1RJSW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVG
b3IoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpKS5yZXRhZ2dlZChDb2RlRW50cnlQ
dHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlQWRk
cmVzcyksIEdQUkluZm86OnJlZ1Q0KTsKICAgICBqaXQuanVtcCgpLmxpbmtUbyhjYWxsQ29kZSwg
JmppdCk7CiAKICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwogICAgIAogICAgIC8vIEhlcmUgd2Ug
ZG9uJ3Qga25vdyBhbnl0aGluZywgc28gcmV2ZXJ0IHRvIHRoZSBmdWxsIHNsb3cgcGF0aC4KLSAg
ICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25WaXJ0dWFsQ2FsbCk7CisgICAgUHRyVGFn
IGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvblZpcnR1YWxDYWxsUHRy
VGFnLCB2bSk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGws
IGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
aml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9DT0RFKAotICAgICAg
ICBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0
clRhZywKICAgICAgICAgIlZpcnR1YWwgJXMgc2xvdyBwYXRoIHRodW5rIiwKICAgICAgICAgY2Fs
bExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlJlZ3VsYXIgPyAiY2FsbCIgOiBjYWxs
TGlua0luZm8uY2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/ICJ0YWlsIGNhbGwiIDogImNv
bnN0cnVjdCIpOwogfQpAQCAtMjkzLDkgKzMwNCw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5j
dGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7CiAgICAgICAgIGppdC54b3JQdHIo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBK
U0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6
QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9u
KSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhK
U0ludGVyZmFjZUpJVDo6cmVnVDEsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZUVu
dHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRP
Zk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2FsbChK
U0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEludGVybmFsRnVu
Y3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBDb2RlRW50cnlQdHJUYWcp
OwogCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgpLCBKU0lu
dGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0zMTQsNyArMzI1LDcgQEAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgICAgICBqaXQubG9h
ZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3RlcnM6OmVzaSwgSW50ZXJuYWxG
dW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIFg4NlJlZ2lzdGVyczo6
cjkpOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoTmF0aXZlQ29k
ZVBvaXNvbjo6a2V5KCkpLCBYODZSZWdpc3RlcnM6OmVzaSk7CiAgICAgaml0LnhvcjY0KFg4NlJl
Z2lzdGVyczo6ZXNpLCBYODZSZWdpc3RlcnM6OnI5KTsKLSAgICBqaXQuY2FsbChYODZSZWdpc3Rl
cnM6OnI5LCBOb1B0clRhZyk7CisgICAgaml0LmNhbGwoWDg2UmVnaXN0ZXJzOjpyOSwgQ29kZUVu
dHJ5UHRyVGFnKTsKIAogI2Vsc2UKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihl
Y3gsIGVkeCwgcjgsIHI5LCAuLi4pOwpAQCAtMzI5LDkgKzM0MCw5IEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0g
VGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJ
bnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplZHgsIEpTRnVuY3Rpb246Om9mZnNl
dE9mRXhlY3V0YWJsZSgpKSwgWDg2UmVnaXN0ZXJzOjpyOSk7CiAgICAgICAgIGppdC54b3JQdHIo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBY
ODZSZWdpc3RlcnM6OnI5KTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJl
c3MoWDg2UmVnaXN0ZXJzOjpyOSwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb24pLCBOb1B0clRh
Zyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVy
czo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVn
aXN0ZXJzOjplZHgsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Io
a2luZCkpLCBOb1B0clRhZyk7CisgICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1
bmN0aW9uRm9yKGtpbmQpKSwgQ29kZUVudHJ5UHRyVGFnKTsKIAogICAgIGppdC5hZGRQdHIoSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig0ICogc2l6ZW9mKGludDY0X3QpKSwgSlNJbnRlcmZh
Y2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICNlbmRpZgpAQCAtMzUzLDcgKzM2NCw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0Lmxv
YWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngxLCBJbnRlcm5h
bEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQVJNNjRSZWdpc3Rl
cnM6OngyKTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2
ZUNvZGVQb2lzb246OmtleSgpKSwgQVJNNjRSZWdpc3RlcnM6OngxKTsKICAgICBqaXQueG9yNjQo
QVJNNjRSZWdpc3RlcnM6OngxLCBBUk02NFJlZ2lzdGVyczo6eDIpOwotICAgIGppdC5jYWxsKEFS
TTY0UmVnaXN0ZXJzOjp4MiwgTm9QdHJUYWcpOworICAgIGppdC5jYWxsKEFSTTY0UmVnaXN0ZXJz
Ojp4MiwgQ29kZUVudHJ5UHRyVGFnKTsKIAogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKE1JUFMpCiAj
aWYgQ1BVKE1JUFMpCkBAIC0zNjksOSArMzgwLDkgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBuYXRpdmVGb3JHZQogICAgIGlmICh0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0
aW9uVHlwZTo6SlNGdW5jdGlvbikgewogICAgICAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJ
VDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIxLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMik7CiAgICAgICAgIGppdC54
b3JQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5
KCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwotICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1
bmN0aW9uKSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDIsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwg
Q29kZUVudHJ5UHRyVGFnKTsKICAgICB9IGVsc2UKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSW50ZXJuYWxGdW5j
dGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIE5vUHRyVGFnKTsKKyAgICAg
ICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3Vt
ZW50R1BSMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5k
KSksIENvZGVFbnRyeVB0clRhZyk7CiAKICNpZiBDUFUoTUlQUykKICAgICAvLyBSZXN0b3JlIHN0
YWNrIHNwYWNlCkBAIC00MjcsNyArNDM4LDcgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBuYXRpdmVGb3JHZQogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xp
bmUiLCB0aHVua0Z1bmN0aW9uVHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/
ICJuYXRpdmUiIDogImludGVybmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZl
ZFRhZ3MgPyAiVGFpbCBXaXRoIFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1
bXBXaXRob3V0U2F2ZWRUYWdzID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9D
U3RyaW5nKGtpbmQpLmRhdGEoKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIENvZGVFbnRyeVB0clRhZywgIiVzICVzJXMgdHJhbXBvbGluZSIsIHRodW5rRnVuY3Rpb25U
eXBlID09IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uID8gIm5hdGl2ZSIgOiAiaW50ZXJu
YWwiLCBlbnRyeVR5cGUgPT0gRW50ZXJWaWFKdW1wV2l0aFNhdmVkVGFncyA/ICJUYWlsIFdpdGgg
U2F2ZWQgVGFncyAiIDogZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhvdXRTYXZlZFRhZ3Mg
PyAiVGFpbCBXaXRob3V0IFNhdmVkIFRhZ3MgIiA6ICIiLCB0b0NTdHJpbmcoa2luZCkuZGF0YSgp
KTsKIH0KIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNhbGxHZW5lcmF0b3IoVk0qIHZt
KQpAQCAtNDc1LDYgKzQ4Niw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2Vu
ZXJhdG8KICMgIGlmIENQVShYODZfNjQpCiAgICAgaml0LnBvcChKU0ludGVyZmFjZUpJVDo6cmVn
VDQpOwogIyAgZW5kaWYKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qz
KTsKICAgICBqaXQubG9hZDMyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklU
OjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVv
ZihSZWdpc3RlcikpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKICAgICBqaXQuYWRk
MzIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycyksIEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjIpOwpAQCAtNTAxLDcgKzUxMyw5
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8KICAgICBqaXQubW92
ZShKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIwLCBleHRyYVRlbXApOwogICAgIGppdC5sc2hp
ZnQ2NChKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDMpLCBleHRyYVRlbXApOwogICAgIGpp
dC5hZGRQdHIoZXh0cmFUZW1wLCBKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgIGppdC51bnRhZ1JldHVybkFkZHJlc3MoKTsKICAgICBqaXQuYWRkUHRyKGV4dHJhVGVtcCwg
SlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQudGFnUmV0dXJu
QWRkcmVzcygpOwogCiAgICAgLy8gTW92ZSBjdXJyZW50IGZyYW1lIGRvd24gYXJndW1lbnRHUFIw
IG51bWJlciBvZiBzbG90cwogICAgIEpTSW50ZXJmYWNlSklUOjpMYWJlbCBjb3B5TG9vcChqaXQu
bGFiZWwoKSk7CkBAIC01MjQsNyArNTM4LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5
Rml4dXBHZW5lcmF0bwogICAgIGppdC5wdXNoKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBl
bmRpZgogICAgIGppdC5yZXQoKTsKLSNlbHNlCisjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSBzZWN0
aW9uIGFib3ZlLCBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9uIGJlbG93LgogIyAgaWYgQ1BVKFg4
NikKICAgICBqaXQucG9wKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgpAQCAtNTgx
LDEwICs1OTUsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0bwog
ICAgIGppdC5wdXNoKEpTSW50ZXJmYWNlSklUOjpyZWdUNCk7CiAjICBlbmRpZgogICAgIGppdC5y
ZXQoKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVuZCBvZiBVU0UoSlNWQUxVRTMyXzY0KSBzZWN0aW9u
LgogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiZml4dXAgYXJp
dHkiKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSk7CisgICAg
cmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRhZywgImZpeHVwIGFyaXR5Iik7CiB9
CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVyYXRvcihWTSogdm0pCkBA
IC01OTQsNyArNjA5LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHVucmVhY2hhYmxlR2VuZXJh
dAogICAgIGppdC5icmVha3BvaW50KCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgTm9QdHJUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCBOZWFyQ2FsbFB0clRhZywgInVucmVhY2hhYmxlIHRodW5rIik7CiB9
CiAKIHN0YXRpYyB2b2lkIHN0cmluZ0NoYXJMb2FkKFNwZWNpYWxpemVkVGh1bmtKSVQmIGppdCwg
Vk0qIHZtKQpAQCAtMTE4MSwxNiArMTE5NiwxNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91
bmRUaGlzTm9BcmdzRnVuCiAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQo
SklUQ29kZVBvaXNvbjo6a2V5KCkpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgaml0LnhvcjY0KEdQ
UkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CiAjZW5kaWYKLSAgICBlbWl0UG9pbnRlclZh
bGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6cmVn
VDAsIE5vUHRyVGFnKTsKLSAgICAKKyAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZWdUMCwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGppdC5jYWxs
KEdQUkluZm86OnJlZ1QwLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CisKICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAgICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICBsaW5rQnVmZmVy
Lmxpbmsobm9Db2RlLCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRh
aWxDYWxsV2l0aG91dFNhdmVkVGFncyh2bSkpKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgK
LSAgICAgICAgbGlua0J1ZmZlciwgTm9QdHJUYWcsICJTcGVjaWFsaXplZCB0aHVuayBmb3IgYm91
bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKTsKKyAgICAgICAgbGlua0J1ZmZl
ciwgQ29kZUVudHJ5UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJvdW5kIGZ1bmN0aW9u
IGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIz
MDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywzNSArNjMsMzAgQEAgdm9pZCBpbml0aWFsaXplKCkKICAgICAgICAg
RGF0YTo6c19vcGNvZGVNYXBbaV0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW2ldLCB0
YWcpOwogICAgIH0KIAotICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKLSAgICAgICAgZm9yIChp
bnQgaSA9IE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSURT
ICsgTlVNQkVSX09GX0JZVEVDT0RFX0hFTFBFUl9JRFM7ICsraSkKLSAgICAgICAgICAgIERhdGE6
OnNfb3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1hcFtpXSwgcHRyVGFn
KEJ5dGVjb2RlSGVscGVyUHRyVGFnLCBpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IFB0clRhZyB0YWdzRm9yT3Bjb2RlW10gPSB7Ci0gICAgICAgICAgICBDb2RlRW50cnlQ
dHJUYWcsIC8vIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUKLSAgICAgICAgICAgIENvZGVFbnRyeVB0
clRhZywgLy8gbGxpbnRfZXZhbF9wcm9sb2d1ZQotICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFn
LCAvLyBsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZQotICAgICAgICAgICAgQ29kZUVudHJ5
UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZQotICAgICAgICAgICAg
Q29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3Vl
Ci0gICAgICAgICAgICBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgLy8gbGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sKLSAgICAgICAgICAgIENvZGVFbnRyeVdpdGhBcml0
eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNr
Ci0gICAgICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X2dlbmVyaWNfcmV0dXJuX3Bv
aW50Ci0gICAgICAgICAgICBCeXRlY29kZVB0clRhZywgLy8gbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZQotICAgICAgICAgICAgRXhjZXB0aW9uSGFuZGxlclB0clRhZywgLy8g
bGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQotICAgICAgICAgICAgTmF0aXZlQ29k
ZVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NhbGxfdHJhbXBvbGluZQotICAgICAgICAgICAgTmF0
aXZlQ29kZVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFtcG9saW5lCi0gICAg
ICAgICAgICBOYXRpdmVDb2RlUHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxs
X3RyYW1wb2xpbmUKLSAgICAgICAgICAgIE5hdGl2ZUNvZGVQdHJUYWcsIC8vIGxsaW50X2ludGVy
bmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lCi0gICAgICAgICAgICBFeGNlcHRpb25I
YW5kbGVyUHRyVGFnLCAvLyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbgotICAgICAgICB9OwotCi0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHRhZ3NGb3JPcGNvZGUpIC8gc2l6ZW9mKHRhZ3NG
b3JPcGNvZGVbMF0pID09IE5VTUJFUl9PRl9CWVRFQ09ERV9IRUxQRVJfSURTLCAiIik7Ci0gICAg
ICAgIHN0YXRpY19hc3NlcnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihsbGludF9wcm9ncmFtX3By
b2xvZ3VlKSA9PSBOVU1CRVJfT0ZfQllURUNPREVfSURTLCAiIik7Ci0KLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQllURUNPREVfSEVMUEVSX0lEUzsgKytpKSB7Ci0gICAg
ICAgICAgICBpbnQgb3Bjb2RlSUQgPSBpICsgTlVNQkVSX09GX0JZVEVDT0RFX0lEUzsKLSAgICAg
ICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW29wY29kZUlEXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19v
cGNvZGVNYXBbb3Bjb2RlSURdLCB0YWdzRm9yT3Bjb2RlW2ldKTsKLSAgICAgICAgfQorICAgIHN0
YXRpYyBjb25zdCBQdHJUYWcgdGFnc0Zvck9wY29kZVtdID0geworICAgICAgICBDb2RlRW50cnlQ
dHJUYWcsIC8vIGxsaW50X3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFn
LCAvLyBsbGludF9ldmFsX3Byb2xvZ3VlCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxp
bnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBs
bGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcs
IC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUKKyAgICAgICAgQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIC8vIGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
X2NoZWNrCisgICAgICAgIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrCisgICAgICAgIENvZGVFbnRyeVB0clRh
ZywgLy8gbGxpbnRfZ2VuZXJpY19yZXR1cm5fcG9pbnQKKyAgICAgICAgQnl0ZWNvZGVQdHJUYWcs
IC8vIGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUKKyAgICAgICAgRXhjZXB0
aW9uSGFuZGxlclB0clRhZywgLy8gbGxpbnRfdGhyb3dfZHVyaW5nX2NhbGxfdHJhbXBvbGluZQor
ICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUK
KyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1w
b2xpbmUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRlcm5hbF9mdW5jdGlv
bl9jYWxsX3RyYW1wb2xpbmUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQorICAgICAgICBFeGNlcHRpb25IYW5k
bGVyUHRyVGFnLCAvLyBoYW5kbGVVbmNhdWdodEV4Y2VwdGlvbgorICAgIH07CisKKyAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZih0YWdzRm9yT3Bjb2RlKSAvIHNpemVvZih0YWdzRm9yT3Bjb2RlWzBd
KSA9PSBOVU1CRVJfT0ZfQllURUNPREVfSEVMUEVSX0lEUywgIiIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RhdGljX2Nhc3Q8dWludHB0cl90PihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSA9PSBOVU1C
RVJfT0ZfQllURUNPREVfSURTLCAiIik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJF
Ul9PRl9CWVRFQ09ERV9IRUxQRVJfSURTOyArK2kpIHsKKyAgICAgICAgaW50IG9wY29kZUlEID0g
aSArIE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7CisgICAgICAgIERhdGE6OnNfb3Bjb2RlTWFwW29w
Y29kZUlEXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19vcGNvZGVNYXBbb3Bjb2RlSURdLCB0YWdzRm9y
T3Bjb2RlW2ldKTsKICAgICB9CiAKICAgICB2b2lkKiBoYW5kbGVyID0gTExJbnQ6OmdldENvZGVQ
dHIobGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDYgKzg1LDcgQEAgQUxXQVlTX0lOTElORSB2b2lkKiBnZXRDb2RlUHRyKE9wY29kZUlEIAogfQog
CiAjaWYgRU5BQkxFKEpJVCkKKwogQUxXQVlTX0lOTElORSBMTEludENvZGUgZ2V0Q29kZUZ1bmN0
aW9uUHRyKE9wY29kZUlEIGNvZGVJZCkKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxM
TEludENvZGU+KGdldENvZGVQdHIoY29kZUlkKSk7CkBAIC05Myw3ICs5NCw3IEBAIEFMV0FZU19J
TkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5jdGlvblAKIAogQUxXQVlTX0lOTElORSB2b2lkKiBn
ZXRDb2RlUHRyKEpTQzo6RW5jb2RlZEpTVmFsdWUgZ2x1ZUhlbHBlcigpKQogewotICAgIHJldHVy
biBXVEZfUFJFUEFSRV9GVU5DVElPTl9QT0lOVEVSX0ZPUl9FWEVDVVRJT04oZ2x1ZUhlbHBlcik7
CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2x1ZUhlbHBlcik7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpMTEludApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50RW50cnlwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50RW50cnlwb2ludC5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTcxLDQ1ICs3MSw1MSBAQCBzdGF0aWMgdm9pZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0s
IENvCiB7CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1YihldmFsRW50
cnlUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAg
ICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGV2YWxFbnRy
eVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
Y29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlX
aXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xvZ3VlKTsKICAg
ICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklU
Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFs
X3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBj
b2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNo
ZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3RhdGljIHZv
aWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRo
dW5rR2VuZXJhdG9yKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICAg
ICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5
VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShj
b2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdp
dGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgVU5VU0VEX1BB
UkFNKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpOwog
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3By
b2dyYW1fcHJvbG9ndWUpLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpKTsKKyAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVS
ZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFy
aXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogfQogCiBzdGF0
aWMgdm9pZCBzZXRNb2R1bGVQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIobW9k
dWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJ
VENvZGUoCi0gICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJ
U3R1Yihtb2R1bGVQcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRS
ZWYoKm5ldyBEaXJlY3RKSVRDb2RlKGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVF
bnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKICAgICBVTlVTRURfUEFSQU0odm0pOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBjb2RlUmVmID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUpOwogICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgK
LSAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlKSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CisgICAg
ICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2Vk
Q29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogdm9pZCBzZXRFbnRyeXBvaW50KFZNJiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MDEsMTIgKzE0MDEsMTIgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwo
RXhlYwogICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwogICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBp
bnRlcm5hbEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVu
Q2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLCBpbnRlcm5hbEZ1bmN0aW9uKTsKLSAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0cjsKLSAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxQdHJUYWcgPSBOYXRpdmVDb2RlUHRyVGFn
OworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2Rl
UHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgTExJbnRDYWxsSUNQdHJUYWcpOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOwogICAgICAgICAgICAgUG9pc29uZWRNYXNt
UHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCksIE5hdGl2ZUNvZGVQdHJUYWcpOworICAgICAgICAgICAgTExJTlRf
Q0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygp
LCBDb2RlRW50cnlQdHJUYWcpOwogICAgICAgICB9CiAgICAgICAgIHRocm93U2NvcGUucmVsZWFz
ZSgpOwogICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgcGMsIGNhbGxl
ZUFzVmFsdWUsIGtpbmQpOwpAQCAtMTQyMCw3ICsxNDIwLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0
dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gMDsKICAg
ICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2RlUHRyID0g
ZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgICAg
IGNhbGxQdHJUYWcgPSBOYXRpdmVDb2RlUHRyVGFnOworICAgICAgICBjYWxsUHRyVGFnID0gQ29k
ZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWc7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIApAQCAtMTQ0NCw2ICsxNDQ0LDcgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICB9CiAgICAgICAgIGNvZGVQ
dHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwogICAg
IH0KKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBj
YWxsUHRyVGFnKTsKIAogICAgIEFTU0VSVCghIWNvZGVQdHIpOwogICAgIApAQCAtMTQ1NiwxMyAr
MTQ1NywxMyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAg
ICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwogICAgICAgICBjYWxsTGlua0luZm8tPmNh
bGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICAgICAgY2FsbExpbmtJ
bmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKLSAg
ICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7CisgICAgICAg
IGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyLnJldGFnZ2VkKGNhbGxQ
dHJUYWcsIExMSW50Q2FsbElDUHRyVGFnKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbFB0
clRhZyAhPSBOb1B0clRhZyk7Ci0gICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbFB0clRhZyA9IGNh
bGxQdHJUYWc7CiAgICAgICAgIGlmIChjb2RlQmxvY2spCiAgICAgICAgICAgICBjb2RlQmxvY2st
PmxpbmtJbmNvbWluZ0NhbGwoZXhlYywgY2FsbExpbmtJbmZvKTsKICAgICB9CiAKKyAgICBhc3Nl
cnRJc1RhZ2dlZFdpdGgoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsUHRyVGFnKTsK
ICAgICBQb2lzb25lZE1hc21QdHI6OmFzc2VydElzTm90UG9pc29uZWQoY29kZVB0ci5leGVjdXRh
YmxlQWRkcmVzcygpKTsKICAgICBMTElOVF9DQUxMX1JFVFVSTihleGVjLCBleGVjQ2FsbGVlLCBj
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIGNhbGxQdHJUYWcpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCShyZXZpc2lvbiAyMzAxMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRUaHVua3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2Vu
ZXJhdGVUaHUKICAgICAvLyBGSVhNRTogdGhlcmUncyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8g
ZG8gaXQgb24gWDg2LCBidXQgSSdtIG5vdCBzdXJlIEkgY2FyZS4KICAgICBMTEludENvZGUgdGFy
Z2V0ID0gTExJbnQ6OmdldENvZGVGdW5jdGlvblB0cihvcGNvZGVJRCk7CiAgICAgaml0Lm1vdmUo
SlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQp
KSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuanVtcChKU0ludGVyZmFjZUpJVDo6
cmVnVDAsIHB0clRhZyhCeXRlY29kZUhlbHBlclB0clRhZywgb3Bjb2RlSUQpKTsKKyAgICBqaXQu
anVtcChKU0ludGVyZmFjZUpJVDo6cmVnVDAsIHRodW5rVGFnKTsKIAogICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwogICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCB0aHVua1RhZywgIkxMSW50ICVzIHByb2xvZ3VlIHRodW5rIiwgdGh1
bmtLaW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBtYWNybyBjYWxsU2xvd1BhdGgoc2xvd1BhdGgp
CiAgICAgbW92ZSByMCwgUEMKIGVuZAogCi1tYWNybyBkb1ZNRW50cnkobWFrZUNhbGwsIHVudXNl
ZDEsIHVudXNlZDIpCittYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgZnVuY3Rpb25Qcm9s
b2d1ZSgpCiAgICAgcHVzaENhbGxlZVNhdmVzKCkKIApAQCAtMTk5NSw4ICsxOTk1LDggQEAgbWFj
cm8gZG9DYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50
Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQogICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxsZWUgKyBU
YWdPZmZzZXRbdDNdCiAgICAgbW92ZSB0Mywgc3AKLSAgICBwcmVwYXJlQ2FsbChMTEludENhbGxM
aW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBtYWNybyAoY2FsbFB0
clRhZykgZW5kKQotICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFj
aGluZUNvZGVUYXJnZXRbdDFdLCBOb1B0clRhZykKKyAgICBwcmVwYXJlQ2FsbChMTEludENhbGxM
aW5rSW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MiwgdDMsIHQ0LCBMTEludENhbGxJQ1B0
clRhZykKKyAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVD
b2RlVGFyZ2V0W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCiAKIC5vcENhbGxTbG93OgogICAgIHNs
b3dQYXRoRm9yQ2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBtYWNybyBj
Q2FsbDQoZnVuY3Rpb24pCiAgICAgZW5kCiBlbmQKIAotbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxs
LCBjYWxsVGFnLCBjYWxsV2l0aEFyaXR5Q2hlY2tUYWcpCittYWNybyBkb1ZNRW50cnkobWFrZUNh
bGwpCiAgICAgZnVuY3Rpb25Qcm9sb2d1ZSgpCiAgICAgcHVzaENhbGxlZVNhdmVzKCkKIApAQCAt
MjI1LDE2ICsyMjUsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwsIGNhbGxUYWcsIGNhbGxX
CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudChleHRyYVRlbXBSZWcsIDB4YmFkMGRj
MDIpCiAKLSAgICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICBidGJueiBQcm90b0NhbGxG
cmFtZTo6aGFzQXJpdHlNaXNtYXRjaFtwcm90b0NhbGxGcmFtZV0sIC5kb0NhbGxXaXRoQXJpdHlD
aGVjawotICAgICAgICBtb3ZlIGNhbGxUYWcsIHQyCi0gICAgICAgIGptcCAucmVhZHlUb0NhbGwK
LSAgICAuZG9DYWxsV2l0aEFyaXR5Q2hlY2s6Ci0gICAgICAgIG1vdmUgY2FsbFdpdGhBcml0eUNo
ZWNrVGFnLCB0MgotICAgIC5yZWFkeVRvQ2FsbDoKLSAgICBlbmQKLQotICAgIG1ha2VDYWxsKGVu
dHJ5LCB0MywgdDIpCisgICAgbWFrZUNhbGwoZW50cnksIHQzKQogCiAgICAgIyBXZSBtYXkgaGF2
ZSBqdXN0IG1hZGUgYSBjYWxsIGludG8gYSBKUyBmdW5jdGlvbiwgc28gd2UgY2FuJ3QgcmVseSBv
biBzcAogICAgICMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgZmFjdCB0aGF0IG91ciBvd24gbG9jYWxz
IChpZSB0aGUgVk1FbnRyeVJlY29yZCkgYXJlCkBAIC0yNTgsMTggKzI0OSwxOCBAQCBtYWNybyBk
b1ZNRW50cnkobWFrZUNhbGwsIGNhbGxUYWcsIGNhbGxXCiBlbmQKIAogCi1tYWNybyBtYWtlSmF2
YVNjcmlwdENhbGwoZW50cnksIHRlbXAsIGNhbGxUYWcpCittYWNybyBtYWtlSmF2YVNjcmlwdENh
bGwoZW50cnksIHRlbXApCiAgICAgYWRkcCAxNiwgc3AKICAgICBpZiBDX0xPT1AKICAgICAgICAg
Y2xvb3BDYWxsSlNGdW5jdGlvbiBlbnRyeQogICAgIGVsc2UKLSAgICAgICAgY2FsbCBlbnRyeSwg
Y2FsbFRhZworICAgICAgICBjYWxsIGVudHJ5LCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRh
ZwogICAgIGVuZAogICAgIHN1YnAgMTYsIHNwCiBlbmQKIAogCi1tYWNybyBtYWtlSG9zdEZ1bmN0
aW9uQ2FsbChlbnRyeSwgdGVtcCwgY2FsbFRhZykKK21hY3JvIG1ha2VIb3N0RnVuY3Rpb25DYWxs
KGVudHJ5LCB0ZW1wKQogICAgIG1vdmUgZW50cnksIHRlbXAKICAgICBzdG9yZXAgY2ZyLCBbc3Bd
CiAgICAgbW92ZSBzcCwgYTAKQEAgLTI3OSwxMCArMjcwLDEwIEBAIG1hY3JvIG1ha2VIb3N0RnVu
Y3Rpb25DYWxsKGVudHJ5LCB0ZW1wLCAKICAgICBlbHNpZiBYODZfNjRfV0lOCiAgICAgICAgICMg
V2UgbmVlZCB0byBhbGxvY2F0ZSAzMiBieXRlcyBvbiB0aGUgc3RhY2sgZm9yIHRoZSBzaGFkb3cg
c3BhY2UuCiAgICAgICAgIHN1YnAgMzIsIHNwCi0gICAgICAgIGNhbGwgdGVtcCwgY2FsbFRhZwor
ICAgICAgICBjYWxsIHRlbXAsIENvZGVFbnRyeVB0clRhZwogICAgICAgICBhZGRwIDMyLCBzcAog
ICAgIGVsc2UKLSAgICAgICAgY2FsbCB0ZW1wLCBjYWxsVGFnCisgICAgICAgIGNhbGwgdGVtcCwg
Q29kZUVudHJ5UHRyVGFnCiAgICAgZW5kCiBlbmQKIApAQCAtMjA2MCwyNSArMjA1MSwxMSBAQCBt
YWNybyBkb0NhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQogICAgIGlmIFBPSVNPTgogICAgICAg
ICBsb2FkcCBfZ19KSVRDb2RlUG9pc29uLCB0MgogICAgICAgICB4b3JwIExMSW50Q2FsbExpbmtJ
bmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyCi0gICAgICAgIHByZXBhcmVDYWxsKHQyLCB0
MSwgdDMsIHQ0LCBtYWNybyAoY2FsbFB0clRhZykKLSAgICAgICAgICAgIGlmIFBPSU5URVJfUFJP
RklMSU5HCi0gICAgICAgICAgICAgICAgbG9hZHAgTExJbnRDYWxsTGlua0luZm86OmNhbGxQdHJU
YWdbdDVdLCBjYWxsUHRyVGFnCi0gICAgICAgICAgICBlbmQKLSAgICAgICAgZW5kKQotICAgICAg
ICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICAgICAgbG9hZHAgTExJbnRDYWxsTGlua0lu
Zm86OmNhbGxQdHJUYWdbdDVdLCB0MwotICAgICAgICBlbmQKLSAgICAgICAgY2FsbFRhcmdldEZ1
bmN0aW9uKHQyLCB0MykKKyAgICAgICAgcHJlcGFyZUNhbGwodDIsIHQxLCB0MywgdDQsIExMSW50
Q2FsbElDUHRyVGFnKQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDIsIExMSW50Q2FsbElD
UHRyVGFnKQogICAgIGVsc2UKLSAgICAgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0luZm86
Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgbWFjcm8gKGNhbGxQdHJUYWcpCi0g
ICAgICAgICAgICBpZiBQT0lOVEVSX1BST0ZJTElORwotICAgICAgICAgICAgICAgIGxvYWRwIExM
SW50Q2FsbExpbmtJbmZvOjpjYWxsUHRyVGFnW3Q1XSwgY2FsbFB0clRhZwotICAgICAgICAgICAg
ZW5kCi0gICAgICAgIGVuZCkKLSAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAgICAgICAg
ICAgIGxvYWRwIExMSW50Q2FsbExpbmtJbmZvOjpjYWxsUHRyVGFnW3Q1XSwgdDMKLSAgICAgICAg
ZW5kCi0gICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGlu
ZUNvZGVUYXJnZXRbdDFdLCB0MykKKyAgICAgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxsTGlua0lu
Zm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJbnRDYWxsSUNQdHJUYWcp
CisgICAgICAgIGNhbGxUYXJnZXRGdW5jdGlvbihMTEludENhbGxMaW5rSW5mbzo6bWFjaGluZUNv
ZGVUYXJnZXRbdDFdLCBMTEludENhbGxJQ1B0clRhZykKICAgICBlbmQKIAogLm9wQ2FsbFNsb3c6
CkBAIC0yMjA5LDEyICsyMTg2LDEyIEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1
dGFibGVPZmYKICAgICBlbHNlCiAgICAgICAgIGlmIFg4Nl82NF9XSU4KICAgICAgICAgICAgIHN1
YnAgMzIsIHNwCi0gICAgICAgICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3Qx
XSwgTmF0aXZlQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvblt0MV0sIENvZGVFbnRyeVB0clRhZwogICAgICAgICAgICAgYWRkcCAzMiwgc3AKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbG9hZHAgX2dfTmF0aXZlQ29kZVBvaXNvbiwgdDIKICAg
ICAgICAgICAgIHhvcnAgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdLCB0MgotICAgICAg
ICAgICAgY2FsbCB0MiwgTmF0aXZlQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCB0MiwgQ29k
ZUVudHJ5UHRyVGFnCiAgICAgICAgIGVuZAogICAgIGVuZAogCkBAIC0yMjUyLDEyICsyMjI5LDEy
IEBAIG1hY3JvIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICBlbHNlCiAg
ICAgICAgIGlmIFg4Nl82NF9XSU4KICAgICAgICAgICAgIHN1YnAgMzIsIHNwCi0gICAgICAgICAg
ICBjYWxsIG9mZnNldE9mRnVuY3Rpb25bdDFdLCBOYXRpdmVDb2RlUHRyVGFnCisgICAgICAgICAg
ICBjYWxsIG9mZnNldE9mRnVuY3Rpb25bdDFdLCBDb2RlRW50cnlQdHJUYWcKICAgICAgICAgICAg
IGFkZHAgMzIsIHNwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWRwIF9nX05hdGl2ZUNv
ZGVQb2lzb24sIHQyCiAgICAgICAgICAgICB4b3JwIG9mZnNldE9mRnVuY3Rpb25bdDFdLCB0Mgot
ICAgICAgICAgICAgY2FsbCB0MiwgTmF0aXZlQ29kZVB0clRhZworICAgICAgICAgICAgY2FsbCB0
MiwgQ29kZUVudHJ5UHRyVGFnCiAgICAgICAgIGVuZAogICAgIGVuZAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShy
ZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBjb25zdCBC
eXRlY29kZVB0clRhZyA9IGNvbnN0ZXhwciBCeXRlY29kCiBjb25zdCBDb2RlRW50cnlQdHJUYWcg
PSBjb25zdGV4cHIgQ29kZUVudHJ5UHRyVGFnCiBjb25zdCBDb2RlRW50cnlXaXRoQXJpdHlDaGVj
a1B0clRhZyA9IGNvbnN0ZXhwciBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZwogY29uc3Qg
RXhjZXB0aW9uSGFuZGxlclB0clRhZyA9IGNvbnN0ZXhwciBFeGNlcHRpb25IYW5kbGVyUHRyVGFn
Ci1jb25zdCBOYXRpdmVDb2RlUHRyVGFnID0gY29uc3RleHByIE5hdGl2ZUNvZGVQdHJUYWcKK2Nv
bnN0IExMSW50Q2FsbElDUHRyVGFnID0gY29uc3RleHByIExMSW50Q2FsbElDUHRyVGFnCiBjb25z
dCBOb1B0clRhZyA9IGNvbnN0ZXhwciBOb1B0clRhZwogY29uc3QgU2xvd1BhdGhQdHJUYWcgPSBj
b25zdGV4cHIgU2xvd1BhdGhQdHJUYWcKIApAQCAtODUzLDEyICs4NTMsMTIgQEAgbWFjcm8gY2Fs
bFRhcmdldEZ1bmN0aW9uKGNhbGxlZSwgY2FsbFB0cgogICAgIGRpc3BhdGNoQWZ0ZXJDYWxsKCkK
IGVuZAogCi1tYWNybyBwcmVwYXJlRm9yUmVndWxhckNhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIs
IHRlbXAzLCBwcmVwYXJlQ2FsbFB0clRhZykKK21hY3JvIHByZXBhcmVGb3JSZWd1bGFyQ2FsbChj
YWxsZWUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsIGNhbGxQdHJUYWcpCiAgICAgYWRkcCBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwgc3AKIGVuZAogCiAjIHNwIHBvaW50cyB0byB0aGUgbmV3IGZyYW1lCi1t
YWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCBwcmVw
YXJlQ2FsbFB0clRhZykKK21hY3JvIHByZXBhcmVGb3JUYWlsQ2FsbChjYWxsZWUsIHRlbXAxLCB0
ZW1wMiwgdGVtcDMsIGNhbGxQdHJUYWcpCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJ
bnQoKQogCiAgICAgbG9hZGkgUGF5bG9hZE9mZnNldCArIEFyZ3VtZW50Q291bnRbY2ZyXSwgdGVt
cDIKQEAgLTkwNyw5ICs5MDcsOCBAQCBtYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0
ZW1wMSwgCiAgICAgc3RvcmVwIHRlbXAzLCBbdGVtcDEsIHRlbXAyLCAxXQogICAgIGJ0aW56IHRl
bXAyLCAuY29weUxvb3AKIAotICAgIHByZXBhcmVDYWxsUHRyVGFnKHRlbXAyKQogICAgIG1vdmUg
dGVtcDEsIHNwCi0gICAgam1wIGNhbGxlZSwgdGVtcDIKKyAgICBqbXAgY2FsbGVlLCBjYWxsUHRy
VGFnCiBlbmQKIAogbWFjcm8gc2xvd1BhdGhGb3JDYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkK
QEAgLTkxOSwxMSArOTE4LDcgQEAgbWFjcm8gc2xvd1BhdGhGb3JDYWxsKHNsb3dQYXRoLCBwcmVw
YXJlQwogICAgICAgICBtYWNybyAoY2FsbGVlLCBjYWxsZWVGcmFtZVB0cikKICAgICAgICAgICAg
IGJ0cHogY2FsbGVlRnJhbWVQdHIsIC5kb250VXBkYXRlU1AKICAgICAgICAgICAgIG1vdmUgY2Fs
bGVlRnJhbWVQdHIsIHNwCi0gICAgICAgICAgICBwcmVwYXJlQ2FsbChjYWxsZWUsIHQyLCB0Mywg
dDQsIG1hY3JvIChjYWxsUHRyVGFnUmVnKQotICAgICAgICAgICAgICAgIGlmIFBPSU5URVJfUFJP
RklMSU5HCi0gICAgICAgICAgICAgICAgICAgIG1vdmUgU2xvd1BhdGhQdHJUYWcsIGNhbGxQdHJU
YWdSZWcKLSAgICAgICAgICAgICAgICBlbmQKLSAgICAgICAgICAgIGVuZCkKKyAgICAgICAgICAg
IHByZXBhcmVDYWxsKGNhbGxlZSwgdDIsIHQzLCB0NCwgU2xvd1BhdGhQdHJUYWcpCiAgICAgICAg
IC5kb250VXBkYXRlU1A6CiAgICAgICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oY2FsbGVlLCBT
bG93UGF0aFB0clRhZykKICAgICAgICAgZW5kKQpAQCAtMTAwNSw3ICsxMDAwLDcgQEAgZW5kCiAK
ICMgRG8gdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBleGVjdXRlIGNvZGUuIFNldHMgdXAg
dGhlIFBDLCBsZWF2ZSB0aGUgQ29kZUJsb2NrKgogIyBpbiB0MS4gTWF5IGFsc28gdHJpZ2dlciBw
cm9sb2d1ZSBlbnRyeSBPU1IuCi1tYWNybyBwcm9sb2d1ZShjb2RlQmxvY2tHZXR0ZXIsIGNvZGVC
bG9ja1NldHRlciwgb3NyU2xvd1BhdGgsIHRyYWNlU2xvd1BhdGgpCittYWNybyBwcm9sb2d1ZShj
b2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9ja1NldHRlciwgb3NyU2xvd1BhdGgsIHRyYWNlU2xvd1Bh
dGgsIHRhcmdldFB0clRhZykKICAgICAjIFNldCB1cCB0aGUgY2FsbCBmcmFtZSBhbmQgY2hlY2sg
aWYgd2Ugc2hvdWxkIE9TUi4KICAgICB0YWdSZXR1cm5BZGRyZXNzIHNwCiAgICAgcHJlc2VydmVD
YWxsZXJQQ0FuZENGUigpCkBAIC0xMDM2LDEzICsxMDMxLDE0IEBAIG1hY3JvIHByb2xvZ3VlKGNv
ZGVCbG9ja0dldHRlciwgY29kZUJsb2MKICAgICAgICAgIyBwb3AgdGhlIGNhbGxlckZyYW1lIHNp
bmNlIHdlIHdpbGwganVtcCB0byBhIGZ1bmN0aW9uIHRoYXQgd2FudHMgdG8gc2F2ZSBpdAogICAg
ICAgICBpZiBBUk02NCBvciBBUk02NEUKICAgICAgICAgICAgIHBvcCBsciwgY2ZyCisgICAgICAg
ICAgICB1bnRhZ1JldHVybkFkZHJlc3Mgc3AKICAgICAgICAgZWxzaWYgQVJNIG9yIEFSTXY3IG9y
IEFSTXY3X1RSQURJVElPTkFMIG9yIE1JUFMKICAgICAgICAgICAgIHBvcCBjZnIKICAgICAgICAg
ICAgIHBvcCBscgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBwb3AgY2ZyCiAgICAgICAgIGVu
ZAotICAgICAgICBqbXAgcjAsIENvZGVFbnRyeVB0clRhZworICAgICAgICBqbXAgcjAsIHRhcmdl
dFB0clRhZwogICAgIC5yZWNvdmVyOgogICAgICAgICBjb2RlQmxvY2tHZXR0ZXIodDEsIHQyKQog
ICAgIC5jb250aW51ZToKQEAgLTExNjAsNyArMTE1Niw3IEBAIGVsc2UKICAgICBnbG9iYWwgX3Zt
RW50cnlUb0phdmFTY3JpcHQKICAgICBfdm1FbnRyeVRvSmF2YVNjcmlwdDoKIGVuZAotICAgIGRv
Vk1FbnRyeShtYWtlSmF2YVNjcmlwdENhbGwsIENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0
aEFyaXR5Q2hlY2tQdHJUYWcpCisgICAgZG9WTUVudHJ5KG1ha2VKYXZhU2NyaXB0Q2FsbCkKIAog
CiBpZiBDX0xPT1AKQEAgLTExNjksNyArMTE2NSw3IEBAIGVsc2UKICAgICBnbG9iYWwgX3ZtRW50
cnlUb05hdGl2ZQogICAgIF92bUVudHJ5VG9OYXRpdmU6CiBlbmQKLSAgICBkb1ZNRW50cnkobWFr
ZUhvc3RGdW5jdGlvbkNhbGwsIE5hdGl2ZUNvZGVQdHJUYWcsIE5hdGl2ZUNvZGVQdHJUYWcpCisg
ICAgZG9WTUVudHJ5KG1ha2VIb3N0RnVuY3Rpb25DYWxsKQogCiAKIGlmIG5vdCBDX0xPT1AKQEAg
LTEyODcsMzQgKzEyODMsMzQgQEAgX2xsaW50X2VudHJ5OgogZW5kCiAKIF9sbGludF9wcm9ncmFt
X3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBub3RG
dW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50X3RyYWNlX3By
b2xvZ3VlKQorICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBub3RGdW5j
dGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50X3RyYWNlX3Byb2xv
Z3VlLCBDb2RlRW50cnlQdHJUYWcpCiAgICAgZGlzcGF0Y2goMCkKIAogCiBfbGxpbnRfbW9kdWxl
X3Byb2dyYW1fcHJvbG9ndWU6Ci0gICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0
ZXIsIG5vdEZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRf
dHJhY2VfcHJvbG9ndWUpCisgICAgcHJvbG9ndWUobm90RnVuY3Rpb25Db2RlQmxvY2tHZXR0ZXIs
IG5vdEZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyLCBfbGxpbnRfdHJh
Y2VfcHJvbG9ndWUsIENvZGVFbnRyeVB0clRhZykKICAgICBkaXNwYXRjaCgwKQogCiAKIF9sbGlu
dF9ldmFsX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVy
LCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50X3Ry
YWNlX3Byb2xvZ3VlKQorICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVyLCBu
b3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50X3RyYWNl
X3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcpCiAgICAgZGlzcGF0Y2goMCkKIAogCiBfbGxpbnRf
ZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWU6Ci0gICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JDYWxs
Q29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29z
cl9mdW5jdGlvbl9mb3JfY2FsbCwgX2xsaW50X3RyYWNlX3Byb2xvZ3VlX2Z1bmN0aW9uX2Zvcl9j
YWxsKQorICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ2FsbENvZGVCbG9ja0dldHRlciwgZnVuY3Rp
b25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGwsIF9s
bGludF90cmFjZV9wcm9sb2d1ZV9mdW5jdGlvbl9mb3JfY2FsbCwgQ29kZUVudHJ5UHRyVGFnKQog
ICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMCkKICAgICBkaXNwYXRjaCgwKQogICAgIAogCiBf
bGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShmdW5j
dGlvbkZvckNvbnN0cnVjdENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIs
IF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCwgX2xsaW50X3RyYWNlX3By
b2xvZ3VlX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QpCisgICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JD
b25zdHJ1Y3RDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRf
ZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QsIF9sbGludF90cmFjZV9wcm9sb2d1ZV9m
dW5jdGlvbl9mb3JfY29uc3RydWN0LCBDb2RlRW50cnlQdHJUYWcpCiAgICAgZnVuY3Rpb25Jbml0
aWFsaXphdGlvbigxKQogICAgIGRpc3BhdGNoKDApCiAgICAgCiAKIF9sbGludF9mdW5jdGlvbl9m
b3JfY2FsbF9hcml0eV9jaGVjazoKLSAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2RlQmxv
Y2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0
aW9uX2Zvcl9jYWxsX2FyaXR5Q2hlY2ssIF9sbGludF90cmFjZV9hcml0eUNoZWNrX2Zvcl9jYWxs
KQorICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ2FsbENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25D
b2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3JfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlD
aGVjaywgX2xsaW50X3RyYWNlX2FyaXR5Q2hlY2tfZm9yX2NhbGwsIENvZGVFbnRyeVdpdGhBcml0
eUNoZWNrUHRyVGFnKQogICAgIGZ1bmN0aW9uQXJpdHlDaGVjayguZnVuY3Rpb25Gb3JDYWxsQmVn
aW4sIF9zbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrKQogLmZ1bmN0aW9uRm9yQ2FsbEJlZ2luOgog
ICAgIGZ1bmN0aW9uSW5pdGlhbGl6YXRpb24oMCkKQEAgLTEzMjIsNyArMTMxOCw3IEBAIF9sbGlu
dF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjazoKIAogCiBfbGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9hcml0eV9jaGVjazoKLSAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVj
dENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrLCBfbGxpbnRfdHJhY2VfYXJpdHlD
aGVja19mb3JfY29uc3RydWN0KQorICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ29uc3RydWN0Q29k
ZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zcl9m
dW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5Q2hlY2ssIF9sbGludF90cmFjZV9hcml0eUNoZWNr
X2Zvcl9jb25zdHJ1Y3QsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKQogICAgIGZ1bmN0
aW9uQXJpdHlDaGVjayguZnVuY3Rpb25Gb3JDb25zdHJ1Y3RCZWdpbiwgX3Nsb3dfcGF0aF9jb25z
dHJ1Y3RfYXJpdHlDaGVjaykKIC5mdW5jdGlvbkZvckNvbnN0cnVjdEJlZ2luOgogICAgIGZ1bmN0
aW9uSW5pdGlhbGl6YXRpb24oMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGVCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZUJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU3LDYgKzU3LDcgQEAgaW5saW5lIGJvb2wgaXNDYWxsKENvZGVTcGVjaWFsaXph
dGlvbktpbgogCiBjbGFzcyBFeGVjdXRhYmxlQmFzZSA6IHB1YmxpYyBKU0NlbGwgewogICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CisgICAgZnJpZW5kIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBib3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNhbGxHZW5lcmF0b3IoVk0qKTsKIAogcHJvdGVjdGVkOgogICAgIHN0
YXRpYyBjb25zdCBpbnQgTlVNX1BBUkFNRVRFUlNfSVNfSE9TVCA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDExIEBAIHZvaWQgTmF0aXZl
RXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0KICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSBtX2ppdENvZGVGb3JDYWxsLT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0
eSk7CiAgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QtPmFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KTsKICAgICBtX25hbWUg
PSBuYW1lOworCisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNhbGwtPmFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29k
ZUVudHJ5UHRyVGFnKTsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgobV9qaXRDb2RlRm9yQ29uc3Ry
dWN0LT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlXaXRo
QXJpdHlDaGVja1B0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNv
bnN0cnVjdFdpdGhBcml0eUNoZWNrLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVdpdGhB
cml0eUNoZWNrUHRyVGFnKTsKIH0KIAogTmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJs
ZShWTSYgdm0sIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5j
dGlvbiBjb25zdHJ1Y3RvciwgSW50cmluc2ljIGludHJpbnNpYywgY29uc3QgRE9NSklUOjpTaWdu
YXR1cmUqIHNpZ25hdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTmF0aXZlRnVuY3Rpb24uaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTAg
KzcwLDEwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBUYWdnZWROYXRpdmVGdW5jdGlvbihpbnRw
dHJfdCBiaXRzKSA6IG1fcHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oYml0cykpIHsgfQogCiAgICAg
VGFnZ2VkTmF0aXZlRnVuY3Rpb24oTmF0aXZlRnVuY3Rpb24gZnVuYykKLSAgICAgICAgOiBtX3B0
cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMubV9wdHIsIE5hdGl2ZUNvZGVQdHJUYWcpKQor
ICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVuYy5tX3B0ciwgQ29kZUVu
dHJ5UHRyVGFnKSkKICAgICB7IH0KICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbihSYXdOYXRpdmVG
dW5jdGlvbiBmdW5jKQotICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2b2lkKj4oZnVu
YywgTmF0aXZlQ29kZVB0clRhZykpCisgICAgICAgIDogbV9wdHIodGFnQ0Z1bmN0aW9uUHRyPHZv
aWQqPihmdW5jLCBDb2RlRW50cnlQdHJUYWcpKQogICAgIHsgfQogCiAgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9wdHI7IH0KQEAgLTg2LDcgKzg2LDcgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IG9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIHJldHVybiB1bnRhZ0NGdW5jdGlvblB0cjxO
YXRpdmVGdW5jdGlvbj4obV9wdHIsIE5hdGl2ZUNvZGVQdHJUYWcpOworICAgICAgICByZXR1cm4g
dW50YWdDRnVuY3Rpb25QdHI8TmF0aXZlRnVuY3Rpb24+KG1fcHRyLCBDb2RlRW50cnlQdHJUYWcp
OwogICAgIH0KIAogICAgIHZvaWQqIHJhd1BvaW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3B0cjsg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmgJ
KHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDcsIDIwMDgsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1Nyw2ICsyNTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzID09IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1
cmUoYXR0cmlidXRlcykpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKGdldFZhbHVlKTsKKyAg
ICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZ2V0VmFsdWUpOwogICAgICAgICBtX2RhdGEuY3Vz
dG9tLmdldFZhbHVlID0gZ2V0VmFsdWU7CiAgICAgICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0
ZXM7CiAKQEAgLTI3OCw2ICsyNzksNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChhdHRyaWJ1
dGVzID09IGF0dHJpYnV0ZXNGb3JTdHJ1Y3R1cmUoYXR0cmlidXRlcykpOwogICAgICAgICAKICAg
ICAgICAgQVNTRVJUKGdldFZhbHVlKTsKKyAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZ2V0
VmFsdWUpOwogICAgICAgICBtX2RhdGEuY3VzdG9tLmdldFZhbHVlID0gZ2V0VmFsdWU7CiAgICAg
ICAgIG1fYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B0clRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B0clRhZy5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdHJUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDIyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIHYoQ29kZUVudHJ5UHRyVGFnKSBcCiAgICAgdihDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZykgXAogICAgIHYoRXhjZXB0aW9uSGFuZGxlclB0clRhZykg
XAorICAgIHYoR2V0UHJvcGVydHlQdHJUYWcpIFwKKyAgICB2KEdldHRlclNldHRlclB0clRhZykg
XAorICAgIHYoSGFzUHJvcGVydHlQdHJUYWcpIFwKICAgICB2KEpJVENvZGVQdHJUYWcpIFwKICAg
ICB2KEpJVE9wZXJhdGlvblB0clRhZykgXAogICAgIHYoSklUVGh1bmtQdHJUYWcpIFwKKyAgICB2
KEpJVFdyaXRlVGh1bmtQdHJUYWcpIFwKKyAgICB2KExMSW50Q2FsbElDUHRyVGFnKSBcCisgICAg
dihNYXRoSUNQdHJUYWcpIFwKICAgICB2KE5hdGl2ZUNvZGVQdHJUYWcpIFwKKyAgICB2KE9wZXJh
dGlvbkxpbmtDYWxsUHRyVGFnKSBcCisgICAgdihPcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
UHRyVGFnKSBcCisgICAgdihPcGVyYXRpb25WaXJ0dWFsQ2FsbFB0clRhZykgXAorICAgIHYoUHV0
UHJvcGVydHlQdHJUYWcpIFwKICAgICB2KFNsb3dQYXRoUHRyVGFnKSBcCisgICAgdihTcGVjaWFs
aXplZFRodW5rUHRyVGFnKSBcCiAgICAgdihTd2l0Y2hUYWJsZVB0clRhZykgXAogICAgIFwKICAg
ICB2KFlhcnI4Qml0UHRyVGFnKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OSw2ICs2OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q3VzdG9tVmFsdWUoSlNPYmpl
Y3QqIGJhc2UsIFB1dFZhbHVlRnVuYyBmdW5jdGlvbikKICAgICB7CisgICAgICAgIGFzc2VydElz
TnVsbE9yQ0Z1bmN0aW9uUHRyKGZ1bmN0aW9uKTsKICAgICAgICAgbV90eXBlID0gQ3VzdG9tVmFs
dWU7CiAgICAgICAgIG1fYmFzZSA9IGJhc2U7CiAgICAgICAgIG1fcHV0RnVuY3Rpb24gPSBmdW5j
dGlvbjsKQEAgLTc2LDYgKzc3LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDdXN0b21BY2Nl
c3NvcihKU09iamVjdCogYmFzZSwgUHV0VmFsdWVGdW5jIGZ1bmN0aW9uKQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SXNOdWxsT3JDRnVuY3Rpb25QdHIoZnVuY3Rpb24pOwogICAgICAgICBtX3R5cGUg
PSBDdXN0b21BY2Nlc3NvcjsKICAgICAgICAgbV9iYXNlID0gYmFzZTsKICAgICAgICAgbV9wdXRG
dW5jdGlvbiA9IGZ1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzU3LDcgKzM1Nyw4IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6dGFrZVNhbXBs
ZShjb25zdCAKICAgICAgICAgICAgICAgICBtYWNoaW5lRnJhbWUgPSBNYWNoaW5lQ29udGV4dDo6
ZnJhbWVQb2ludGVyKHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgY2FsbEZyYW1lID0gc3Rh
dGljX2Nhc3Q8RXhlY1N0YXRlKj4obWFjaGluZUZyYW1lKTsKICAgICAgICAgICAgICAgICBtYWNo
aW5lUEMgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycyk7Ci0g
ICAgICAgICAgICAgICAgbGxpbnRQQyA9IE1hY2hpbmVDb250ZXh0OjpsbGludEluc3RydWN0aW9u
UG9pbnRlcihyZWdpc3RlcnMpOworICAgICAgICAgICAgICAgIGxsaW50UEMgPSByZW1vdmVDb2Rl
UHRyVGFnKE1hY2hpbmVDb250ZXh0OjpsbGludEluc3RydWN0aW9uUG9pbnRlcihyZWdpc3RlcnMp
KTsKKyAgICAgICAgICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChtYWNoaW5lUEMpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IExldHMgaGF2ZSBhIHdheSBvZiBkZXRlY3Rp
bmcgd2hlbiB3ZSdyZSBwYXJzaW5nIGNvZGUuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzYxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTksNiArNTks
NyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVnaXN0ZXJzKSkKICAgICAgICAgLCBmcmFtZVBvaW50
ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihyZWdpc3RlcnMpKQogICAgIHsKKyAgICAg
ICAgYXNzZXJ0SXNOb3RUYWdnZWQodHJhcFBDKTsKICAgICB9CiAKICAgICBQbGF0Zm9ybVJlZ2lz
dGVycyYgcmVnaXN0ZXJzOwpAQCAtOTMsNiArOTQsNyBAQCB2b2lkIFZNVHJhcHM6OnRyeUluc3Rh
bGxUcmFwQnJlYWtwb2ludHMoCiAgICAgLy8gSWYgd2UncmUgbm90IGluIEpJVC9MTEludCBjb2Rl
LCB3ZSBjYW4ndCBydW4gdGhlIEMrKyBjb2RlIGJlbG93IGJlY2F1c2UgaXQKICAgICAvLyBtYWxs
b2NzLCBhbmQgd2UgbXVzdCBwcm92ZSB0aGUgSlMgdGhyZWFkIGlzbid0IGhvbGRpbmcgdGhlIG1h
bGxvYyBsb2NrCiAgICAgLy8gdG8gYmUgYWJsZSB0byBkbyB0aGF0IHdpdGhvdXQgcmlza2luZyBh
IGRlYWRsb2NrLgorICAgIGFzc2VydElzTm90VGFnZ2VkKHRyYXBQQyk7CiAgICAgaWYgKCFpc0pJ
VFBDKHRyYXBQQykgJiYgIUxMSW50Ojppc0xMSW50UEModHJhcFBDKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xODcsNiArMTg5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpCYWRBY2Nlc3MsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9y
bVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24gewogICAgICAgICAgICAgICAg
IFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCisgICAgICAgICAgICAgICAgYXNz
ZXJ0SXNOb3RUYWdnZWQoY29udGV4dC50cmFwUEMpOwogICAgICAgICAgICAgICAgIGlmICghaXNK
SVRQQyhjb250ZXh0LnRyYXBQQykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaWduYWxB
Y3Rpb246Ok5vdEhhbmRsZWQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0xNDUsNiArMTQ1LDcgQEAgc3RhdGljIHZvaWQgaW5zdGFsbENyYXNoSGFuZGxlcigp
CiAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChTaWduYWwsIFNpZ0lu
Zm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSB7CiAgICAgICAgIFNpZ25hbENvbnRl
eHQgY29udGV4dChyZWdpc3RlcnMpOwogCisgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGNvbnRl
eHQubWFjaGluZVBDKTsKICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkK
ICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzI4Miw5ICszMjgyLDcgQEAgY2xhc3MgWWFyckdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bQogCiAgICAgICAgIG1fdHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJFbnRyeSA9IGxhYmVsKCk7CiAK
LSNpZiBDUFUoQVJNNjQpCi0gICAgICAgIHRhZ1B0cihsaW5rUmVnaXN0ZXIsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSNlbmRpZgorICAgICAgICB0YWdSZXR1cm5BZGRyZXNzKCk7CiAKICAgICAg
ICAgdHJ5UmVhZFVuaWNvZGVDaGFySW1wbChyZWdUMCk7CiAKQEAgLTMzNDcsNyArMzM0NSw3IEBA
IGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW0KICAgICAgICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhYODZSZWdpc3RlcnM6OmVicCwgMiAqIHNpemVvZih2b2lkKikpLCBvdXRw
dXQpOwogICAgICNlbmRpZgogI2VsaWYgQ1BVKEFSTTY0KQotICAgICAgICB0YWdQdHIobGlua1Jl
Z2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHRhZ1JldHVybkFkZHJlc3Mo
KTsKICAgICAgICAgaWYgKG1fZGVjb2RlU3Vycm9nYXRlUGFpcnMpIHsKICAgICAgICAgICAgIHB1
c2hQYWlyKGZyYW1lUG9pbnRlclJlZ2lzdGVyLCBsaW5rUmVnaXN0ZXIpOwogICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tMzIoMHgxMDAwMCksIHN1cHBsZW1lbnRhcnlQbGFuZXNCYXNlKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTAzLTMwICBNYXJrIExhbSAgPG1hcmsubGFtQGFw
cGxlLmNvbT4KKworICAgICAgICBBZGQgcG9pbnRlciBwcm9maWxpbmcgc3VwcG9ydCBpbiBiYXNl
bGluZSBKSVQgYW5kIHN1cHBvcnRpbmcgZmlsZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyMDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM5
MDU3MzAwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaDoKKyAgICAgICAgLSBSZW1vdmUgV1RGX1BSRVBB
UkVfRlVOQ1RJT05fUE9JTlRFUl9GT1JfRVhFQ1VUSU9OLiAgSXQgaXMgbm8gbG9uZ2VyIG5lZWRl
ZC4KKwogMjAxOC0wMy0zMCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV29ya1F1ZXVlV2luOiBkb24ndCBtb3ZlIHJ2YWx1ZXMKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9XVEYvd3Rm
L1BvaW50ZXJQcmVwYXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDYgQEAK
ICNpbmNsdWRlIDxXZWJLaXRBZGRpdGlvbnMvUG9pbnRlclByZXBhcmF0aW9ucy5oPgogI2VuZGlm
CiAKLSNpZm5kZWYgV1RGX1BSRVBBUkVfRlVOQ1RJT05fUE9JTlRFUl9GT1JfRVhFQ1VUSU9OCi0j
ZGVmaW5lIFdURl9QUkVQQVJFX0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTih2dGJsUHRy
KSAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odnRibFB0cikpCi0jZW5kaWYKLQogI2lmbmRlZiBX
VEZfUFJFUEFSRV9WVEJMX1BPSU5URVJfRk9SX0lOU1BFQ1RJT04KICNkZWZpbmUgV1RGX1BSRVBB
UkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OKHZ0YmxQdHIpIChyZWludGVycHJldF9jYXN0
PHZvaWQqPih2dGJsUHRyKSkKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336915</attachid>
            <date>2018-03-30 23:06:06 -0700</date>
            <delta_ts>2018-03-30 23:06:06 -0700</delta_ts>
            <desc>patch for landing w/ wincairo build fix.</desc>
            <filename>bug-184200.patch</filename>
            <type>text/plain</type>
            <size>167832</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBA
QAorMjAxOC0wMy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgaW4gYmFzZWxpbmUgSklUIGFuZCBzdXBwb3J0
aW5nIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg0MjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zOTA1NzMwMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAxLiBUbyBzaW1wbGlmeSBwb2ludGVy
IHByb2ZpbGluZyBzdXBwb3J0LCB2bUVudHJ5VG9KYXZhU2NyaXB0KCkgbm93IGFsd2F5cyBlbnRl
cnMKKyAgICAgICAgICAgdGhlIGNvZGUgdmlhIHRoZSBhcml0eSBjaGVjayBlbnRyeS4KKyAgICAg
ICAgMi4gVG8gYWNjb21tb2RhdGUgKDEpLCBhbGwgSklUQ29kZSBtdXN0IG5vdyBwb3B1bGF0ZSB0
aGVpciBhcml0eSBjaGVjayBlbnRyeSBjb2RlCisgICAgICAgICAgIHBvaW50ZXJzIGFzIHdlbGwu
ICBGb3IgbmF0aXZlIGNvZGUsIHByb2dyYW1zLCBldmFscywgYW5kIG1vZHVsZXMgdGhhdCBkb24n
dAorICAgICAgICAgICBkbyBhcml0eSBjaGVjaywgd2Ugc2V0IHRoZSBub3JtYWwgZW50cnkgYXMg
dGhlIGFyaXR5IGNoZWNrIGVudHJ5ICh0aG91Z2ggd2l0aAorICAgICAgICAgICB0aGUgQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcgcHJvZmlsZSBpbnN0ZWFkKS4KKworICAgICAgICAqIGFz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgICogYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25PZk5lYXJDYWxs
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpyZWFkQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmxpbmtDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAg
ICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHA6CisgICAgICAgIChK
U0M6OlNsb3dQYXRoQ2FsbEdlbmVyYXRvcldpdGhBcmd1bWVudHM6OmdlbmVyYXRlSW1wbCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjphZGRKSVRBZGRJQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkSklUTXVsSUMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEpJVFN1YklDKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjphZGRKSVROZWdJQyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkTWF0aElDKToKKyAgICAgICAgKiBieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJB
c0p1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmg6CisgICAgICAg
IChKU0M6OkxMSW50Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6ZW1pdEV4cGxpY2l0RXhjZXB0aW9uSGFuZGxlcik6Cisg
ICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNzOjpyZWdlbmVyYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHSklURmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1Yik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyk6CisgICAgICAgICogZGlzYXNzZW1i
bGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3NlbWJs
ZSk6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbik6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVWYWx1ZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVVbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNv
bXBpbGVCaW5hcnlNYXRoSUMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgICogaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5oOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZVNldDo6bWFyayk6CisgICAgICAg
ICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6Y2FsbEV4Y2VwdGlvbkZ1enopOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmRl
YnVnQ2FsbCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmVtaXRGdW5jdGlvblByb2xvZ3VlKToKKyAgICAgICAgKiBqaXQv
Q0NhbGxIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjplbnN1cmVTaGFk
b3dDaGlja2VuUGFja2V0KToKKyAgICAgICAgKiBqaXQvQ0NhbGxIZWxwZXJzLmg6CisgICAgICAg
IChKU0M6OkNDYWxsSGVscGVyczo6cHJlcGFyZUZvclRhaWxDYWxsU2xvdyk6CisgICAgICAgICog
aml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6Ompp
dFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
Lmg6CisgICAgICAgIChKU0M6OnBlcmZvcm1KSVRNZW1jcHkpOgorICAgICAgICAqIGppdC9KSVQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVXaXRob3V0TGlua2luZyk6CisgICAgICAg
IChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVnYXRlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2FkZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE1hdGhJQ0Zhc3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRNYXRoSUNTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX211
bCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdWIpOgorICAgICAgICAqIGppdC9KSVRD
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6
OkpJVENvZGVXaXRoQ29kZVJlZjo6ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldCk6CisgICAgICAg
IChKU0M6OkRpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENvZGUpOgorICAgICAgICAoSlNDOjpEaXJl
Y3RKSVRDb2RlOjppbml0aWFsaXplQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok5hdGl2ZUpJVENv
ZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKiBqaXQvSklURXhjZXB0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OmdlbmVyaWNVbndpbmQpOgorICAgICAgICAqIGppdC9KSVRNYXRoSUMuaDoK
KyAgICAgICAgKEpTQzo6aXNQcm9maWxlRW1wdHkpOgorICAgICAgICAoSlNDOjpKSVRCaW5hcnlN
YXRoSUM6OkpJVEJpbmFyeU1hdGhJQyk6CisgICAgICAgIChKU0M6OkpJVFVuYXJ5TWF0aElDOjpK
SVRVbmFyeU1hdGhJQyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9zd2l0Y2hfY2hhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5n
KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6dHJ5R2V0
QnlWYWxPcHRpbWl6ZSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgICogaml0L0pJVFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkpJVFRodW5rczo6aG9z
dEZ1bmN0aW9uU3R1Yik6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
Ojp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpyZXBhdGNoR2V0QnlJRCk6CisgICAg
ICAgIChKU0M6OmFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbik6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnJlcGF0Y2hQdXRCeUlEKToK
KyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChKU0M6OnJldmVydENhbGwpOgorICAg
ICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6cmVzZXRHZXRC
eUlEKToKKyAgICAgICAgKEpTQzo6cmVzZXRQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvUmVwYXRj
aC5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6
OlNwZWNpYWxpemVkVGh1bmtKSVQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3BlY2lhbGl6
ZWRUaHVua0pJVDo6Y2FsbERvdWJsZVRvRG91YmxlKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6ZW1pdFBvaW50ZXJWYWxpZGF0aW9uKToKKyAgICAg
ICAgKEpTQzo6dGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6c2xvd1BhdGhGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2FsbFRodW5rR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6dmlydHVhbFRodW5rRm9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlRm9yR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6bmF0aXZlQ2FsbEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Om5hdGl2
ZVRhaWxDYWxsR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0aXZlVGFpbENh
bGxXaXRob3V0U2F2ZWRUYWdzR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bmF0
aXZlQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6aW50ZXJuYWxG
dW5jdGlvbkNhbGxHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjppbnRlcm5hbEZ1
bmN0aW9uQ29uc3RydWN0R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJpdHlG
aXh1cEdlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnVucmVhY2hhYmxlR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6c3RyaW5nQ2hhckxvYWQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpjaGFyVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGFy
Q29kZUF0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjaGFyQXRUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmZyb21DaGFyQ29kZVRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Y2x6MzJUaHVua0dlbmVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OnNxcnRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmZsb29yVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpj
ZWlsVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjp0cnVuY1RodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphYnNU
aHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmltdWxUaHVua0dlbmVyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OnJhbmRvbVRodW5rR2VuZXJhdG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Ym91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludERhdGEuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmg6CisgICAgICAg
IChKU0M6OkxMSW50OjpnZXRDb2RlUHRyKToKKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9p
bnQuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQpOgorICAgICAg
ICAoSlNDOjpMTEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTElu
dDo6c2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xv
d1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICog
bGxpbnQvTExJbnRUaHVua3MuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJhdGVUaHVu
a1dpdGhKdW1wVG8pOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGVCYXNlLmg6CisgICAgICAgICogcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6TmF0aXZlRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAq
IHJ1bnRpbWUvTmF0aXZlRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZlRnVu
Y3Rpb246OlRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6VGFnZ2VkTmF0aXZl
RnVuY3Rpb246Om9wZXJhdG9yIE5hdGl2ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5U2xvdC5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5U2xvdDo6c2V0Q2FjaGVhYmxlQ3VzdG9tKToKKyAgICAgICAg
KiBydW50aW1lL1B0clRhZy5oOgorICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6
CisgICAgICAgIChKU0M6OlB1dFByb3BlcnR5U2xvdDo6c2V0Q3VzdG9tVmFsdWUpOgorICAgICAg
ICAoSlNDOjpQdXRQcm9wZXJ0eVNsb3Q6OnNldEN1c3RvbUFjY2Vzc29yKToKKyAgICAgICAgKiBy
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpTYW1wbGluZ1Byb2Zp
bGVyOjp0YWtlU2FtcGxlKToKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAg
ICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6Vk1U
cmFwczo6dHJ5SW5zdGFsbFRyYXBCcmVha3BvaW50cyk6CisgICAgICAgICogdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgor
ICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5l
cmF0b3I6OmdlbmVyYXRlVHJ5UmVhZFVuaWNvZGVDaGFyYWN0ZXJIZWxwZXIpOgorICAgICAgICAo
SlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKwogMjAxOC0wMy0zMCAg
SkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6
IHN1cHBvcnQgRGF0YVZpZXcgY29tcGlsYXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODcyLDcgKzg3Miw2IEBAIHB1Ymxp
YzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlua1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVl
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhl
IGRlZmF1bHQgUHRyVGFnIHZhbHVlIG9uY2Ugd2UndmUgdGFnZ2VkIGFsbCB0aGUgY2xpZW50cy4K
ICAgICBzdGF0aWMgdm9pZCogZ2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJM
YWJlbCBsYWJlbCwgUHRyVGFnIHRhZyA9IE5vUHRyVGFnKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRhZ0NvZGVQdHIoQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBsYWJl
bCksIHRhZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUp
KTsKICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKLSAgICAgICAg
cmV0dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRy
ZXNzKGNvZGUoKSwgYXBwbHlPZmZzZXQoY2FsbC5tX2xhYmVsKSwgTmVhckNhbGxQdHJUYWcpLAor
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoTWFjcm9Bc3NlbWJsZXI6OmdldExp
bmtlckFkZHJlc3MoY29kZSgpLCBhcHBseU9mZnNldChjYWxsLm1fbGFiZWwpKSwKICAgICAgICAg
ICAgIGNhbGwuaXNGbGFnU2V0KENhbGw6OlRhaWwpID8gTmVhckNhbGxNb2RlOjpUYWlsIDogTmVh
ckNhbGxNb2RlOjpSZWd1bGFyKTsKICAgICB9CiAKQEAgLTE5MSw3ICsxOTEsNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlu
a2VyQWRkcmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpKSk7CiAg
ICAgfQogCi0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgZGVmYXVsdCBQdHJUYWcgdmFsdWUgb25j
ZSB3ZSd2ZSB0YWdnZWQgYWxsIHRoZSBjbGllbnRzLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIGxv
Y2F0aW9uT2YoTGFiZWwgbGFiZWwsIFB0clRhZyB0YWcgPSBOb1B0clRhZykKICAgICB7CiAgICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQWRk
cmVzcyhjb2RlKCksIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpLCB0YWcpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3NCw3ICszNzc0
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEZ1bmN0aW9uUHRyIHJlYWRDYWxsVGFyZ2V0KENv
ZGVMb2NhdGlvbkNhbGwgY2FsbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBGdW5jdGlvblB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChjYWxs
LmRhdGFMb2NhdGlvbigpKSksIENvZGVFbnRyeVB0clRhZyk7CisgICAgICAgIHJldHVybiBGdW5j
dGlvblB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHIoQXNzZW1ibGVyOjpyZWFkQ2FsbFRhcmdldChj
YWxsLmRhdGFMb2NhdGlvbigpKSkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGxhY2VX
aXRoVk1IYWx0KENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQpCkBAIC00NDQyLDEw
ICs0NDQyLDEzIEBAIHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIGlmICghY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6TmVhcikpCiAgICAgICAgICAgICBBc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUs
IGNhbGwubV9sYWJlbC5sYWJlbEF0T2Zmc2V0KFJFUEFUQ0hfT0ZGU0VUX0NBTExfVE9fUE9JTlRF
UiksIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBlbHNlIGlmIChjYWxs
LmlzRmxhZ1NldChDYWxsOjpUYWlsKSkKKyAgICAgICAgZWxzZSBpZiAoY2FsbC5pc0ZsYWdTZXQo
Q2FsbDo6VGFpbCkpIHsKKyAgICAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZ1bmN0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQXNzZW1ibGVyOjpsaW5rSnVtcChjb2Rl
LCBjYWxsLm1fbGFiZWwsIGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBl
bHNlCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChmdW5j
dGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSwgY2FsbC5tX2xhYmVsLCBmdW5jdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIENhY2hlZFRlbXBSZWdpc3RlciBtX2RhdGFNZW1vcnlUZW1w
UmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2UuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2Nyw3ICs4NjcsNyBAQCB2
b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAjZW5kaWYKICAgICAgICAg
ICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLnRvcENhbGxG
cmFtZSk7CiAKLSAgICAgICAgICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVE9wZXJhdGlv
blB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICAgICAgUHRyVGFnIGNhbGxUYWcgPSBw
dHJUYWcoR2V0dGVyU2V0dGVyUHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgICAgICAgICBv
cGVyYXRpb25DYWxsID0gaml0LmNhbGwoY2FsbFRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGwsIEZ1bmN0aW9uUHRyKHRoaXMtPmFzPEdldHRlclNl
dHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvci5vcGFxdWUsIGNhbGxUYWcpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlU25pcHBldFBhcmFt
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vz
c0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC02MSwxMCArNjEsMTEgQEAgcHVibGljOgogCiAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50
czxGdW5jdGlvblR5cGU+KHN0ZDo6Z2V0PEFyZ3VtZW50c0luZGV4PihtX2FyZ3VtZW50cykuLi4p
OwogCi0gICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBvcGVyYXRpb25DYWxsID0gaml0LmNhbGwo
Tm9QdHJUYWcpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9wZXJhdGlvblB0clRh
ZywgbmV4dFB0clRhZ0lEKCkpOworICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgb3BlcmF0aW9u
Q2FsbCA9IGppdC5jYWxsKHRhZyk7CiAgICAgICAgIGF1dG8gZnVuY3Rpb24gPSBtX2Z1bmN0aW9u
OwogICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwgRnVuY3Rpb25QdHIo
ZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhvcGVyYXRpb25DYWxsLCBG
dW5jdGlvblB0cihmdW5jdGlvbiwgdGFnKSk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGppdC5z
ZXR1cFJlc3VsdHMobV9yZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMwLDI0
ICsxNDMwLDI0IEBAIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmFkZFN0dWJJbmYKICAg
ICByZXR1cm4gbV9zdHViSW5mb3MuYWRkKGFjY2Vzc1R5cGUpOwogfQogCi1KSVRBZGRJQyogQ29k
ZUJsb2NrOjphZGRKSVRBZGRJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKK0pJVEFkZElD
KiBDb2RlQmxvY2s6OmFkZEpJVEFkZElDKEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlLCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fYWRkSUNzLmFkZChhcml0aFBy
b2ZpbGUpOworICAgIHJldHVybiBtX2FkZElDcy5hZGQoYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlv
bik7CiB9CiAKLUpJVE11bElDKiBDb2RlQmxvY2s6OmFkZEpJVE11bElDKEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlKQorSklUTXVsSUMqIENvZGVCbG9jazo6YWRkSklUTXVsSUMoQXJpdGhQcm9m
aWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICByZXR1
cm4gbV9tdWxJQ3MuYWRkKGFyaXRoUHJvZmlsZSk7CisgICAgcmV0dXJuIG1fbXVsSUNzLmFkZChh
cml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKIH0KIAotSklUU3ViSUMqIENvZGVCbG9jazo6YWRk
SklUU3ViSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUpCitKSVRTdWJJQyogQ29kZUJsb2Nr
OjphZGRKSVRTdWJJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uKQogewotICAgIHJldHVybiBtX3N1YklDcy5hZGQoYXJpdGhQcm9maWxlKTsKKyAg
ICByZXR1cm4gbV9zdWJJQ3MuYWRkKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogfQogCi1K
SVROZWdJQyogQ29kZUJsb2NrOjphZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSkKK0pJVE5lZ0lDKiBDb2RlQmxvY2s6OmFkZEpJVE5lZ0lDKEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgcmV0dXJuIG1fbmVnSUNz
LmFkZChhcml0aFByb2ZpbGUpOworICAgIHJldHVybiBtX25lZ0lDcy5hZGQoYXJpdGhQcm9maWxl
LCBpbnN0cnVjdGlvbik7CiB9CiAKIFN0cnVjdHVyZVN0dWJJbmZvKiBDb2RlQmxvY2s6OmZpbmRT
dHViSW5mbyhDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwy
MiArMjQ4LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEJ5VmFsSW5mb01hcChCeVZhbEluZm9N
YXAmIHJlc3VsdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKLSAgICBKSVRBZGRJQyogYWRkSklU
QWRkSUMoQXJpdGhQcm9maWxlKik7Ci0gICAgSklUTXVsSUMqIGFkZEpJVE11bElDKEFyaXRoUHJv
ZmlsZSopOwotICAgIEpJVE5lZ0lDKiBhZGRKSVROZWdJQyhBcml0aFByb2ZpbGUqKTsKLSAgICBK
SVRTdWJJQyogYWRkSklUU3ViSUMoQXJpdGhQcm9maWxlKik7CisgICAgSklUQWRkSUMqIGFkZEpJ
VEFkZElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTXVsSUMqIGFkZEpJ
VE11bElDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUTmVnSUMqIGFkZEpJ
VE5lZ0lDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CisgICAgSklUU3ViSUMqIGFkZEpJ
VFN1YklDKEFyaXRoUHJvZmlsZSosIEluc3RydWN0aW9uKik7CiAKICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxHZW5lcmF0b3IsIEpJVEFkZEdlbmVyYXRvcj46OnZhbHVlPjo6dHlwZT4KLSAgICBK
SVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSkgeyByZXR1cm4gYWRkSklU
QWRkSUMocHJvZmlsZSk7IH0KKyAgICBKSVRBZGRJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSog
cHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJldHVybiBhZGRKSVRBZGRJQyhw
cm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0
b3IsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPEdlbmVy
YXRvciwgSklUTXVsR2VuZXJhdG9yPjo6dmFsdWU+Ojp0eXBlPgotICAgIEpJVE11bElDKiBhZGRN
YXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlKSB7IHJldHVybiBhZGRKSVRNdWxJQyhwcm9maWxl
KTsgfQorICAgIEpJVE11bElDKiBhZGRNYXRoSUMoQXJpdGhQcm9maWxlKiBwcm9maWxlLCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGFkZEpJVE11bElDKHByb2ZpbGUsIGluc3Ry
dWN0aW9uKTsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8R2VuZXJhdG9yLCBKSVROZWdH
ZW5lcmF0b3I+Ojp2YWx1ZT46OnR5cGU+Ci0gICAgSklUTmVnSUMqIGFkZE1hdGhJQyhBcml0aFBy
b2ZpbGUqIHByb2ZpbGUpIHsgcmV0dXJuIGFkZEpJVE5lZ0lDKHByb2ZpbGUpOyB9CisgICAgSklU
TmVnSUMqIGFkZE1hdGhJQyhBcml0aFByb2ZpbGUqIHByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikgeyByZXR1cm4gYWRkSklUTmVnSUMocHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOyB9CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxHZW5lcmF0b3IsIEpJVFN1YkdlbmVyYXRvcj46OnZh
bHVlPjo6dHlwZT4KLSAgICBKSVRTdWJJQyogYWRkTWF0aElDKEFyaXRoUHJvZmlsZSogcHJvZmls
ZSkgeyByZXR1cm4gYWRkSklUU3ViSUMocHJvZmlsZSk7IH0KKyAgICBKSVRTdWJJQyogYWRkTWF0
aElDKEFyaXRoUHJvZmlsZSogcHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSB7IHJl
dHVybiBhZGRKSVRTdWJJQyhwcm9maWxlLCBpbnN0cnVjdGlvbik7IH0KIAogICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBhZGRTdHViSW5mbyhBY2Nlc3NUeXBlKTsKICAgICBhdXRvIHN0dWJJbmZvQmVn
aW4oKSB7IHJldHVybiBtX3N0dWJJbmZvcy5iZWdpbigpOyB9CkBAIC0zMTAsNiArMzEwLDkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgIH0KICAgICAK
KyAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247CisgICAgdHlwZWRlZiBQ
b2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxvY2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5w
YWNrZWRJbnN0cnVjdGlvbnM7CisKICAgICBzdGF0aWMgdm9pZCBjbGVhckxMSW50R2V0QnlJZENh
Y2hlKEluc3RydWN0aW9uKik7CiAKICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldChJbnN0cnVj
dGlvbiogcmV0dXJuQWRkcmVzcykKQEAgLTMxOCw5ICszMjEsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxJbnN0cnVjdGlvbio+KHJldHVybkFkZHJlc3MpIC0gaW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB9CiAKLSAgICB0eXBlZGVmIEpTQzo6SW5zdHJ1Y3Rpb24g
SW5zdHJ1Y3Rpb247Ci0gICAgdHlwZWRlZiBQb2lzb25lZFJlZkNvdW50ZWRBcnJheTxDb2RlQmxv
Y2tQb2lzb24sIEluc3RydWN0aW9uPiYgVW5wYWNrZWRJbnN0cnVjdGlvbnM7Ci0KICAgICB1bnNp
Z25lZCBudW1iZXJPZkluc3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25z
LnNpemUoKTsgfQogICAgIFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwg
SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQog
ICAgIGNvbnN0IFBvaXNvbmVkUmVmQ291bnRlZEFycmF5PENvZGVCbG9ja1BvaXNvbiwgSW5zdHJ1
Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUFjY2Vzcy5j
cHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBJ
bmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoU3RydQogICAgIFJFTEVBU0VfQVNTRVJUKGxp
bmtCdWZmZXIuaXNWYWxpZCgpKTsKICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgdGFyZ2V0KTsK
IAotICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgSklUQ29kZVB0clRhZywgIklubGluZUFj
Y2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CisgICAgRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCBOZWFySnVtcFB0clRhZywgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1w
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xMSW50Q2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDIzMDEyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MTEludENhbGxMaW5rSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBCYXNpY1IKICAgICB7CiAgICAgICAgIGNhbGxlZS5jbGVhcigpOwogICAgICAgICBt
YWNoaW5lQ29kZVRhcmdldCA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgICAgICBjYWxs
UHRyVGFnID0gTm9QdHJUYWc7CiAgICAgICAgIGlmIChpc09uTGlzdCgpKQogICAgICAgICAgICAg
cmVtb3ZlKCk7CiAgICAgfQpAQCAtNTksNyArNTgsNiBAQCBzdHJ1Y3QgTExJbnRDYWxsTGlua0lu
Zm8gOiBwdWJsaWMgQmFzaWNSCiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBjYWxsZWU7CiAg
ICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBsYXN0U2VlbkNhbGxlZTsKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgbWFjaGluZUNvZGVUYXJnZXQ7Ci0gICAgUHRyVGFnIGNhbGxQdHJUYWcgeyBO
b1B0clRhZyB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlz
aW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhp
Y0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwxMCArMTk5LDExIEBAIHZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjplbWl0RXhwbGljaXQKICAgICAgICAgICAgIH0pOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGppdC0+c2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUobG9va3VwRXhjZXB0
aW9uSGFuZGxlcik+KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmbV92bSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5jYWxsKE5vUHRyVGFnKTsKKyAgICAgICAgUHRyVGFn
IHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJDYWxsID0gaml0LT5j
YWxsKHRhZyk7CiAgICAgICAgIGppdC0+YWRkTGlua1Rhc2soCiAgICAgICAgICAgICBbPV0gKExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmso
bG9va3VwRXhjZXB0aW9uSGFuZGxlckNhbGwsIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIE5vUHRy
VGFnKTsKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsobG9va3VwRXhjZXB0aW9uSGFu
ZGxlckNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIsIHRhZykpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIGppdC0+anVtcFRvRXhjZXB0aW9uSGFuZGxlcihtX3ZtKTsK
ICAgICB9CkBAIC01MzgsNyArNTM5LDcgQEAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCBQb2x5bW9y
cGhpY0FjY2VzcwogICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9PU1JFeGl0
RXhjZXB0aW9uSGFuZGxlciwgb2xkSGFuZGxlci5uYXRpdmVDb2RlKTsKIAogICAgICAgICAgICAg
ICAgIEhhbmRsZXJJbmZvIGhhbmRsZXJUb1JlZ2lzdGVyID0gb2xkSGFuZGxlcjsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5uYXRpdmVDb2RlID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1ha2VzaGlmdENhdGNoSGFuZGxlciwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIGhh
bmRsZXJUb1JlZ2lzdGVyLm5hdGl2ZUNvZGUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobWFrZXNo
aWZ0Q2F0Y2hIYW5kbGVyLCBOZWFySnVtcFB0clRhZyk7CiAgICAgICAgICAgICAgICAgaGFuZGxl
clRvUmVnaXN0ZXIuc3RhcnQgPSBuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlLmJpdHMoKTsK
ICAgICAgICAgICAgICAgICBoYW5kbGVyVG9SZWdpc3Rlci5lbmQgPSBuZXdFeGNlcHRpb25IYW5k
bGluZ0NhbGxTaXRlLmJpdHMoKSArIDE7CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrLT5hcHBl
bmRFeGNlcHRpb25IYW5kbGVyKGhhbmRsZXJUb1JlZ2lzdGVyKTsKQEAgLTU2OCw3ICs1NjksNyBA
QCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IFBvbHltb3JwaGljQWNjZXNzCiAgICAgICAgIGRhdGFM
b2coRnVsbENvZGVPcmlnaW4oY29kZUJsb2NrLCBzdHViSW5mby5jb2RlT3JpZ2luKSwgIjogR2Vu
ZXJhdGluZyBwb2x5bW9ycGhpYyBhY2Nlc3Mgc3R1YiBmb3IgIiwgbGlzdER1bXAoY2FzZXMpLCAi
XG4iKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERV9G
T1IoCi0gICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIGNv
ZGVCbG9jaywgbGlua0J1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICIlcyIsIHRvQ1N0
cmluZygiQWNjZXNzIHN0dWIgZm9yICIsICpjb2RlQmxvY2ssICIgIiwgc3R1YkluZm8uY29kZU9y
aWdpbiwgIiB3aXRoIHJldHVybiBwb2ludCAiLCBzdWNjZXNzTGFiZWwsICI6ICIsIGxpc3REdW1w
KGNhc2VzKSkuZGF0YSgpKTsKIAogICAgIGJvb2wgZG9lc0NhbGxzID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDggQEAgc2l6ZV90IEpJVEZpbmFsaXplcjo6
Y29kZVNpemUoKQogCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewotICAgIG1faml0
Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCptX2xp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRh
KCkpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGVSZWYgPSBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBDb2Rl
RW50cnlQdHJUYWcsICJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dp
dGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSk7Cisg
ICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2Vk
Q29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSk7CiAg
ICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUuY29weVJlZigp
KTsKICAgICAKQEAgLTcxLDcgKzcwLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVu
Y3Rpb24oKQogewogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3dpdGhBcml0eUNoZWNrLmlzRW1wdHlW
YWx1ZSgpKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKAotICAgICAgICBGSU5B
TElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCBOb1B0clRhZywgIkRGRyBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6REZHSklUKSkuZGF0YSgpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlu
a0J1ZmZlciwgQ29kZUVudHJ5UHRyVGFnLCAiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmlu
ZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQp
KS5kYXRhKCkpLAogICAgICAgICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29kZUJs
b2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZS5jb3B5UmVmKCkpOwogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzY5LDggKzM3NjksMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGJvb2wgbmVlZHNTY3JhdGNoRlBSUmVnID0g
dHJ1ZTsKICNlbmRpZgogCi0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5n
cmFwaCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRk
SUMoYXJpdGhQcm9maWxlKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuZ3JhcGgoKS5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRo
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KTsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAg
ICBKSVRBZGRJQyogYWRkSUMgPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkSklUQWRkSUMoYXJpdGhQ
cm9maWxlLCBpbnN0cnVjdGlvbik7CiAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVy
YXRpb25WYWx1ZUFkZE9wdGltaXplOwogICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0g
b3BlcmF0aW9uVmFsdWVBZGQ7CiAgICAgCkBAIC00NDM0LDggKzQ0MzYsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICBib29sIG5lZWRzU2NyYXRj
aEZQUlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkSklUU3ViSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUg
PSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+
b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUU3ViSUMqIHN1YklDID0gbV9q
aXQuY29kZUJsb2NrKCktPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1p
emU7CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVT
dWI7CiAgICAgICAgIApAQCAtNDUyMyw4ICs0NTI3LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVBcml0aE5lZ2F0ZSgKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2ppdC5ncmFwaCgpLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFyaXRoUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
SklUTmVnSUMqIG5lZ0lDID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZEpJVE5lZ0lDKGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5ncmFw
aCgpLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
IEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gYmFzZWxpbmVDb2RlQmxvY2stPmFyaXRoUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07Cisg
ICAgICAgIEpJVE5lZ0lDKiBuZWdJQyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRKSVROZWdJQyhh
cml0aFByb2ZpbGUsIGluc3RydWN0aW9uKTsKICAgICAgICAgYXV0byByZXBhdGNoaW5nRnVuY3Rp
b24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICBhdXRvIG5vblJlcGF0
Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvbkFyaXRoTmVnYXRlOwogICAgICAgICBib29sIG5lZWRz
U2NyYXRjaEdQUlJlZyA9IHRydWU7CkBAIC00Nzg4LDggKzQ3OTQsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICBib29sIG5lZWRzU2NyYXRjaEZQ
UlJlZyA9IHRydWU7CiAjZW5kaWYKIAotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmls
ZSA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBKSVRNdWxJQyogbXVsSUMgPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlKTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmdyYXBoKCkuYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBi
YXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW25vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgSklUTXVsSUMqIG11bElDID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAg
ICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7
CiAgICAgICAgIGF1dG8gbm9uUmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVNdWw7
CiAgICAgICAgIApAQCAtOTkwMCw3ICs5OTA4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dFN3aXRjaEludEp1bXAoCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBtX2ppdC54b3I2NChwb2lz
b25TY3JhdGNoLCBzY3JhdGNoKTsKICNlbmRpZgotICAgIG1faml0Lmp1bXAoc2NyYXRjaCwgTm9Q
dHJUYWcpOworICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJs
ZSk7CisgICAgbV9qaXQuanVtcChzY3JhdGNoLCB0YWcpOwogICAgIGRhdGEtPmRpZFVzZUp1bXBU
YWJsZSA9IHRydWU7CiB9CiAKQEAgLTk5MjUsNyArOTkzNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gdGVtcDIu
Z3ByKCk7CiAKICAgICAgICAgdmFsdWUudXNlKCk7Ci0gICAgICAgIAorCisgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgdGFibGUgPSBtX2ppdC5jb2RlQmxvY2soKS0+c3dpdGNoSnVtcFRhYmxlKGRh
dGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFN3aXRj
aFRhYmxlUHRyVGFnLCAmdGFibGUpOwogICAgICAgICBhdXRvIG5vdEludDMyID0gbV9qaXQuYnJh
bmNoSWZOb3RJbnQzMih2YWx1ZVJlZ3MpOwogICAgICAgICBlbWl0U3dpdGNoSW50SnVtcChkYXRh
LCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoLCBzY3JhdGNoMik7CiAgICAgICAgIG5v
dEludDMyLmxpbmsoJm1faml0KTsKQEAgLTk5MzQsNyArOTk0NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBzY3JhdGNoLCB2YWx1ZVJlZ3MsIGRhdGEt
PnN3aXRjaFRhYmxlSW5kZXgpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKCk7CiAK
LSAgICAgICAgbV9qaXQuanVtcChzY3JhdGNoLCBOb1B0clRhZyk7CisgICAgICAgIG1faml0Lmp1
bXAoc2NyYXRjaCwgdGFnKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTAxOTIsMTIgKzEwMjAz
LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblMKICAgICAgICAg
dG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKICAgICB9CiAgICAgCisgICAgYXV0byog
Y29kZUJsb2NrID0gbV9qaXQuY29kZUJsb2NrKCk7CiAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3aXRj
aCB8fCB0b3RhbExlbmd0aCA+IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3Rh
bExlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2st
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAg
UHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgJnRhYmxlKTsKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgIG9w
ZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3
aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBtX2ppdC5qdW1wKHN0cmluZywgTm9QdHJUYWcpOworICAgICAgICBtX2ppdC5q
dW1wKHN0cmluZywgdGFnKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEwMjMw
LDEyICsxMDI0NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nT25T
CiAgICAgZW1pdEJpbmFyeVN3aXRjaFN0cmluZ1JlY3Vyc2UoCiAgICAgICAgIGRhdGEsIGNhc2Vz
LCAwLCAwLCBjYXNlcy5zaXplKCksIHN0cmluZywgbGVuZ3RoR1BSLCB0ZW1wR1BSLCAwLCBmYWxz
ZSk7CiAgICAgCisgICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jay0+c3RyaW5n
U3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgIFB0clRhZyB0YWcg
PSBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZ0YWJsZSk7CisKICAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOwogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0cmluZyk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIHN0cmluZywgc3RhdGljX2Nhc3Q8c2l6
ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5nKTsKICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBtX2ppdC5qdW1w
KHN0cmluZywgTm9QdHJUYWcpOworICAgIG1faml0Lmp1bXAoc3RyaW5nLCB0YWcpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoU3RyaW5nKE5vZGUqIG5vZGUsIFN3aXRjaERh
dGEqIGRhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL0FSTTY0
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Mi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNyArMzcsNyBAQCBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsCiB7CiAgICAgQTY0RE9wY29kZSBhcm02NE9wY29kZTsKIAotICAgIHVp
bnQzMl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB1aW50MzJfdCogY3VycmVudFBDID0gcmVtb3ZlQ29k
ZVB0clRhZzx1aW50MzJfdCo+KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgc2l6
ZV90IGJ5dGVDb3VudCA9IHNpemU7CiAKICAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDE4ICs3MywxOCBAQCBib29sIEpJVEZpbmFsaXplcjo6
ZmluYWxpemVDb21tb24oKQogewogICAgIGJvb2wgZHVtcERpc2Fzc2VtYmx5ID0gc2hvdWxkRHVt
cERpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6YXN5bmNEaXNhc3NlbWJseSgpOwogICAgIAotICAg
IGppdENvZGUtPmluaXRpYWxpemVCM0NvZGUoCi0gICAgICAgIEZJTkFMSVpFX0NPREVfSUYoCi0g
ICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICpiM0NvZGVMaW5rQnVmZmVyLCBDb2RlRW50cnlQ
dHJUYWcsCi0gICAgICAgICAgICAiRlRMIEIzIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSkpOwotCi0gICAgaWYgKGVudHJ5cG9pbnRMaW5rQnVmZmVyKSB7Ci0gICAgICAgIGppdENvZGUt
PmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgKLSAgICAgICAgICAgIEZJTkFMSVpFX0NP
REVfSUYoCi0gICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5LCAqZW50cnlwb2ludExpbmtC
dWZmZXIsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLAotICAgICAgICAgICAgICAgICJG
VEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0ZWQgY29kZSBhdCAlcCIs
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2Rl
OjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSk7Ci0gICAgfQotICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBiM0NvZGVSZWYgPQorICAgICAgICBGSU5BTElaRV9DT0RFX0lGKGR1bXBE
aXNhc3NlbWJseSwgKmIzQ29kZUxpbmtCdWZmZXIsIENvZGVFbnRyeVB0clRhZywKKyAgICAgICAg
ICAgICJGVEwgQjMgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcml0eUNoZWNrQ29kZVJlZiA9IGVudHJ5cG9pbnRMaW5rQnVmZmVy
CisgICAgICAgID8gRklOQUxJWkVfQ09ERV9JRihkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50
TGlua0J1ZmZlciwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsCisgICAgICAgICAgICAi
RlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggQjMgZ2VuZXJhdGVkIGNvZGUgYXQgJXAi
LCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29k
ZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikKKyAgICAgICAgOiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihiM0NvZGVSZWYucmV0YWdnZWRDb2RlKENv
ZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpKTsKKworICAgIGpp
dENvZGUtPmluaXRpYWxpemVCM0NvZGUoYjNDb2RlUmVmKTsKKyAgICBqaXRDb2RlLT5pbml0aWFs
aXplQXJpdHlDaGVja0VudHJ5cG9pbnQoYXJpdHlDaGVja0NvZGVSZWYpOworCiAgICAgbV9wbGFu
LmNvZGVCbG9jay0+c2V0SklUQ29kZSgqaml0Q29kZSk7CiAKICAgICBpZiAoVU5MSUtFTFkobV9w
bGFuLmNvbXBpbGF0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwNSwxNCAr
MTgwNSwxNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQogICAgIHsK
LSAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2Z0bFN0YXRlLmdyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNlbGluZUNvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07
CiAgICAgICAgIGF1dG8gcmVwYXRjaGluZ0Z1bmN0aW9uID0gb3BlcmF0aW9uVmFsdWVBZGRPcHRp
bWl6ZTsKICAgICAgICAgYXV0byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25WYWx1
ZUFkZDsKLSAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRBZGRHZW5lcmF0b3I+KGFyaXRo
UHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAg
ICAgICBjb21waWxlQmluYXJ5TWF0aElDPEpJVEFkZEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbiwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3I+Ci0gICAgdm9pZCBjb21w
aWxlVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEZ1bmN0aW9uUHRyIHJl
cGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1bmMxLCB0eXBlbmFtZSBG
dW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfZnVuY3Rp
b248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5cGU+Ojp2YWx1ZSAmJiBz
dGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8RnVuYzI+Ojp0eXBl
Pjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZVVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIEZ1bmMxIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgRnVuYzIgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSog
bm9kZSA9IG1fbm9kZTsKIApAQCAtMTgzOCw3ICsxODQxLDcgQEAgcHJpdmF0ZToKICNlbmRpZgog
CiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT4gbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0ZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQyA9IGppdC5jb2RlQmxv
Y2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlKTsKKyAgICAgICAgICAgICAg
ICBKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFk
ZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IoSlNWYWx1ZVJlZ3MocGFyYW1z
WzBdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRj
aCgwKSk7CiAKICAgICAgICAgICAgICAgICBib29sIHNob3VsZEVtaXRQcm9maWxpbmcgPSBmYWxz
ZTsKQEAgLTE4OTYsOCArMTg5OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUocGF0
Y2hwb2ludCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvcj4KLSAg
ICB2b2lkIGNvbXBpbGVCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEZ1
bmN0aW9uUHRyIHJlcGF0Y2hpbmdGdW5jdGlvbiwgRnVuY3Rpb25QdHIgbm9uUmVwYXRjaGluZ0Z1
bmN0aW9uKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIEZ1bmMx
LCB0eXBlbmFtZSBGdW5jMiwKKyAgICAgICAgdHlwZW5hbWUgPSBzdGQ6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfZnVuY3Rpb248dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxGdW5jMT46OnR5cGU+
Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Z1bmN0aW9uPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8
RnVuYzI+Ojp0eXBlPjo6dmFsdWU+PgorICAgIHZvaWQgY29tcGlsZUJpbmFyeU1hdGhJQyhBcml0
aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBGdW5jMSBy
ZXBhdGNoaW5nRnVuY3Rpb24sIEZ1bmMyIG5vblJlcGF0Y2hpbmdGdW5jdGlvbikKICAgICB7CiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CiAgICAgICAgIApAQCAtMTkzMSw3ICsxOTM1LDcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgICAgICAgICAgICAgQm94PE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZT4gbWF0aElDR2VuZXJhdGlvblN0YXRlID0gQm94PE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZT46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIEpJVEJpbmFyeU1hdGhJQzxHZW5lcmF0b3I+
KiBtYXRoSUMgPSBqaXQuY29kZUJsb2NrKCktPmFkZE1hdGhJQzxHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSk7CisgICAgICAgICAgICAgICAgSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJ
QyA9IGppdC5jb2RlQmxvY2soKS0+YWRkTWF0aElDPEdlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBp
bnN0cnVjdGlvbik7CiAgICAgICAgICAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVy
YXRvcihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpLAogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBK
U1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZnBTY3JhdGNoKDApLAogICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLCBJ
bnZhbGlkRlBSUmVnKTsKQEAgLTIwNjIsMTAgKzIwNjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleF07CiAgICAgICAg
ICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlU3ViT3B0aW1pemU7
CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9wZXJhdGlvblZhbHVl
U3ViOwotICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFy
aXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwor
ICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxKSVRTdWJHZW5lcmF0b3I+KGFyaXRoUHJv
ZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdGdW5jdGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0
aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTIxNTYsMTAgKzIxNjIs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewot
ICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Z0bFN0YXRlLmdyYXBo
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJpdGhQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRl
eCk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9mdGxTdGF0
ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IGJhc2VsaW5lQ29kZUJsb2Nr
LT5hcml0aFByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5i
eXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZi
YXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
Ynl0ZWNvZGVJbmRleF07CiAgICAgICAgICAgICBhdXRvIHJlcGF0Y2hpbmdGdW5jdGlvbiA9IG9w
ZXJhdGlvblZhbHVlTXVsT3B0aW1pemU7CiAgICAgICAgICAgICBhdXRvIG5vblJlcGF0Y2hpbmdG
dW5jdGlvbiA9IG9wZXJhdGlvblZhbHVlTXVsOwotICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1h
dGhJQzxKSVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBu
b25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAgY29tcGlsZUJpbmFyeU1hdGhJQzxK
SVRNdWxHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24sIHJlcGF0Y2hpbmdGdW5j
dGlvbiwgbm9uUmVwYXRjaGluZ0Z1bmN0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKQEAgLTI3MzcsMTAgKzI3NDUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UsIG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKTsKLSAgICAgICAgICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9m
dGxTdGF0ZS5ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFyaXRoUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IG1fZnRsU3RhdGUuZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBiYXNl
bGluZUNvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21fbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXhdOwogICAgICAgICAgICAgYXV0byByZXBhdGNoaW5n
RnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplOwogICAgICAgICAgICAgYXV0
byBub25SZXBhdGNoaW5nRnVuY3Rpb24gPSBvcGVyYXRpb25Bcml0aE5lZ2F0ZTsKLSAgICAgICAg
ICAgIGNvbXBpbGVVbmFyeU1hdGhJQzxKSVROZWdHZW5lcmF0b3I+KGFyaXRoUHJvZmlsZSwgcmVw
YXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOworICAgICAgICAgICAgY29t
cGlsZVVuYXJ5TWF0aElDPEpJVE5lZ0dlbmVyYXRvcj4oYXJpdGhQcm9maWxlLCBpbnN0cnVjdGlv
biwgcmVwYXRjaGluZ0Z1bmN0aW9uLCBub25SZXBhdGNoaW5nRnVuY3Rpb24pOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KSVRTdHViUm91dGluZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0
ZUFkZHJlc3MpCiAgICAgewotICAgICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVBZGRyZXNzKTsKKyAgICAgICAgdWludHB0cl90IGFk
ZHJlc3MgPSByZW1vdmVDb2RlUHRyVGFnPHVpbnRwdHJfdD4oY2FuZGlkYXRlQWRkcmVzcyk7CiAg
ICAgICAgIGlmICghSklUU3R1YlJvdXRpbmU6OnBhc3Nlc0ZpbHRlcihhZGRyZXNzKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
Niw4ICszNDYsOSBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooCiAj
ZWxzZQogICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CiAjZW5kaWYKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRy
KG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enosIFNsb3dQYXRoUHRyVGFnKSksIEdQUkluZm86Om5vblBy
ZXNlcnZlZE5vblJldHVybkdQUik7Ci0gICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsIFNsb3dQYXRoUHRyVGFnKTsKKyAgICBQdHJUYWcgdGFnID0gcHRyVGFnKEpJVE9w
ZXJhdGlvblB0clRhZywgbmV4dFB0clRhZ0lEKCkpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0
YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiwgdGFnKSksIEdQUkluZm86Om5v
blByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgY2FsbChHUFJJbmZvOjpub25QcmVzZXJ2ZWRO
b25SZXR1cm5HUFIsIHRhZyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6cmVnVDAp
OwpAQCAtOTQwLDggKzk0MSw5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjpkZWJ1Z0NhbGwoVk0m
IHZtLCAKICNlbHNlCiAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0u
IgogI2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHRhZ0NGdW5jdGlvblB0cihmdW5jdGlv
biwgU2xvd1BhdGhQdHJUYWcpKSwgc2NyYXRjaCk7Ci0gICAgY2FsbChzY3JhdGNoLCBTbG93UGF0
aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRpb25QdHJUYWcsIG5l
eHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKGZ1
bmN0aW9uLCB0YWcpKSwgc2NyYXRjaCk7CisgICAgY2FsbChzY3JhdGNoLCB0YWcpOwogCiAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFkZHJlc3NPZkFjdGl2ZUxlbmd0aCgp
KSwgR1BSSW5mbzo6cmVnVDApOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciks
IEdQUkluZm86OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUyOSw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHsKKyAgICAg
ICAgdGFnUmV0dXJuQWRkcmVzcygpOwogICAgICAgICBwdXNoUGFpcihmcmFtZVBvaW50ZXJSZWdp
c3RlciwgbGlua1JlZ2lzdGVyKTsKICAgICAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3Rlciwg
ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NDYWxsSGVscGVycy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCAr
NTksOSBAQCB2b2lkIENDYWxsSGVscGVyczo6ZW5zdXJlU2hhZG93Q2hpY2tlblBhCiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gxTm9uQXJnR1BSKSwgc2hhZG93UGFja2V0KTsKICAgICBKdW1w
IG9rID0gYnJhbmNoUHRyKEJlbG93LCBzaGFkb3dQYWNrZXQsIFRydXN0ZWRJbW1QdHIodm0uc2hh
ZG93Q2hpY2tlbigpLmxvZ0VuZCgpKSk7CiAgICAgc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUob3Bl
cmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2cpPigpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cih0YWdDRnVuY3Rpb25QdHIob3BlcmF0aW9uUHJvY2Vzc1NoYWRvd0NoaWNrZW5Mb2csIFNsb3dQ
YXRoUHRyVGFnKSksIHNjcmF0Y2gxTm9uQXJnR1BSKTsKLSAgICBjYWxsKHNjcmF0Y2gxTm9uQXJn
R1BSLCBTbG93UGF0aFB0clRhZyk7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRPcGVyYXRp
b25QdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGFnQ0Z1
bmN0aW9uUHRyKG9wZXJhdGlvblByb2Nlc3NTaGFkb3dDaGlja2VuTG9nLCB0YWcpKSwgc2NyYXRj
aDFOb25BcmdHUFIpOworICAgIGNhbGwoc2NyYXRjaDFOb25BcmdHUFIsIHRhZyk7CiAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKHZtLnNoYWRvd0NoaWNrZW4oKS5hZGRyZXNzT2ZMb2dDdXJzb3IoKSks
IHNjcmF0Y2gxTm9uQXJnR1BSKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaDFOb25BcmdH
UFIpLCBzaGFkb3dQYWNrZXQpOwogICAgIG9rLmxpbmsodGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
Niw4ICs1ODYsMTIgQEAgcHVibGljOgogICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBjdXJy
ZW50IGZyYW1lIGJleW9uZCB0aGlzIHBvaW50LiBNYXNxdWVyYWRlIGFzIG91cgogICAgICAgICAv
LyBjYWxsZXIuCiAjaWYgQ1BVKEFSTSkgfHwgQ1BVKEFSTTY0KQotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLCBsaW5rUmVnaXN0ZXIp
OworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFt
ZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7CiAgICAgICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoMiAqIHNpemVvZih2b2lkKikpLCBuZXdGcmFtZVNpemVHUFIpOworI2lmIFVTRShQ
T0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHRl
bXBHUFIpOworICAgICAgICB1bnRhZ1B0cihsaW5rUmVnaXN0ZXIsIHRlbXBHUFIpOworI2VuZGlm
CiAjZWxpZiBDUFUoTUlQUykKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGZyYW1lUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2Yodm9pZCopKSwgcmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKICAgICAgICAg
c3ViUHRyKFRydXN0ZWRJbW0zMigyICogc2l6ZW9mKHZvaWQqKSksIG5ld0ZyYW1lU2l6ZUdQUik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NDYsOCArNDQ2LDE0IEBAIHZv
aWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JUYWlsQ2EKIAogICAgIC8vIFdlIGxvYWQg
dGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG9u
ZQogI2lmIENQVShBUk0pIHx8IENQVShBUk02NCkKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKHZvaWQqKSksCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhN
YWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENP
ZmZzZXQoKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOworI2lmIFVT
RShQT0lOVEVSX1BST0ZJTElORykKKyAgICBtX2ppdC5hZGRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBNYWNyb0Fzc2VtYmxlcjo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIpOworICAgIG1faml0LnVudGFnUHRyKE1hY3JvQXNzZW1ibGVyOjps
aW5rUmVnaXN0ZXIsIE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAg
bV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyNlbmRp
ZgorCiAjZWxpZiBDUFUoTUlQUykKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQq
KSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXR1cm5BZGRyZXNzUmVnaXN0ZXIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiArMjM4LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CiAKKyAgICAgICAgaml0LnRhZ1Jl
dHVybkFkZHJlc3MoKTsKICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIod3JpdGFibGVBZGRyKSwgeDcpOwogICAgICAgICBqaXQuYWRkUHRyKHg3LCB4MCk7CiAK
QEAgLTI5OCw3ICsyOTksOCBAQCBwcml2YXRlOgogICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhl
IGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZl
ci4KICAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUg
Y29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5nIHRoZQogICAgICAgICAvLyBhc3luY0Rpc2Fzc2Vt
Ymx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHku
Ci0gICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJs
eShOb1B0clRhZyk7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoSklUV3JpdGVUaHVua1B0
clRhZywgJmppdFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGxp
bmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KHRhZyk7CiAgICAgfQogI2Vs
c2UgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikK
ICAgICBzdGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyMzAxMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpJ
VENvbXBpbGF0aW9uRWZmb3J0LmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSA8c3Rk
ZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KQEAgLTkwLDcgKzkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkKiBwZXJm
b3JtSklUTWVtY3B5KHZvaQogICAgICAgICAgICAgLy8gVXNlIGV4ZWN1dGUtb25seSB3cml0ZSB0
aHVuayBmb3Igd3JpdGVzIGluc2lkZSB0aGUgSklUIHJlZ2lvbi4gVGhpcyBpcyBhIHZhcmlhbnQg
b2YKICAgICAgICAgICAgIC8vIG1lbWNweSB0aGF0IHRha2VzIGFuIG9mZnNldCBpbnRvIHRoZSBK
SVQgcmVnaW9uIGFzIGl0cyBkZXN0aW5hdGlvbiAoZmlyc3QpIHBhcmFtZXRlci4KICAgICAgICAg
ICAgIG9mZl90IG9mZnNldCA9IChvZmZfdCkoKHVpbnRwdHJfdClkc3QgLSBzdGFydE9mRml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbCk7Ci0gICAgICAgICAgICBqaXRXcml0ZVNlcGFyYXRlSGVhcHNG
dW5jdGlvbihvZmZzZXQsIHNyYywgbik7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFn
KEpJVFdyaXRlVGh1bmtQdHJUYWcsICZqaXRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbik7Cisg
ICAgICAgICAgICByZXRhZ0NvZGVQdHIoaml0V3JpdGVTZXBhcmF0ZUhlYXBzRnVuY3Rpb24sIHRh
ZywgQ0Z1bmN0aW9uUHRyVGFnKShvZmZzZXQsIHNyYywgbik7CiAgICAgICAgICAgICByZXR1cm4g
ZHN0OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
cmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDksOCArNjQ5LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVXaXRob3V0
TGlua2luZyhKSVRDb21waQogICAgIAogICAgIG1fcGNUb0NvZGVPcmlnaW5NYXBCdWlsZGVyLmFw
cGVuZEl0ZW0obGFiZWwoKSwgQ29kZU9yaWdpbigwLCBudWxscHRyKSk7CiAKKyAgICBMYWJlbCBl
bnRyeUxhYmVsKHRoaXMpOwogICAgIGlmIChtX2Rpc2Fzc2VtYmxlcikKLSAgICAgICAgbV9kaXNh
c3NlbWJsZXItPnNldFN0YXJ0T2ZDb2RlKGxhYmVsKCkpOworICAgICAgICBtX2Rpc2Fzc2VtYmxl
ci0+c2V0U3RhcnRPZkNvZGUoZW50cnlMYWJlbCk7CiAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRs
ZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUgY29kZWdlbgogICAgIGlmIChyYW5kb20oKSAmIDEp
CkBAIC03MzUsMTUgKzczNiwzMyBAQCB2b2lkIEpJVDo6Y29tcGlsZVdpdGhvdXRMaW5raW5nKEpJ
VENvbXBpCiAgICAgICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCkKICAgICAg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIobWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwp
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgICAgIGJyYW5jaFRlc3QzMihaZXJvLCByZXR1
cm5WYWx1ZUdQUikubGlua1RvKGJlZ2luTGFiZWwsIHRoaXMpOworI2lmIENQVShBUk02NCkgJiYg
VVNFKFBPSU5URVJfUFJPRklMSU5HKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIGxpbmtSZWdpc3Rlcik7Cisg
ICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCBy
ZWdUMSk7CisgICAgICAgIFB0clRhZyB0ZW1wVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCBu
ZXh0UHRyVGFnSUQoKSk7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cih0ZW1wVGFnKSwgcmVn
VDEpOworICAgICAgICB0YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIHN0b3Jl
UHRyKGxpbmtSZWdpc3RlciwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpy
ZXR1cm5QQ09mZnNldCgpKSk7CisjZW5kaWYKICAgICAgICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CisgICAgICAgIGVtaXROYWtlZENh
bGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGUocHRy
VGFnKEpJVFRodW5rUHRyVGFnLCBtX3ZtKSwgTmVhckNhbGxQdHJUYWcpKTsKKyNpZiBDUFUoQVJN
NjQpICYmIFVTRShQT0lOVEVSX1BST0ZJTElORykKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNh
bGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpLCBsaW5rUmVnaXN0
ZXIpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIodGVtcFRhZyksIHJlZ1QxKTsKKyAgICAg
ICAgdW50YWdQdHIobGlua1JlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1Qx
KTsKKyAgICAgICAgdGFnUHRyKGxpbmtSZWdpc3RlciwgcmVnVDEpOworICAgICAgICBzdG9yZVB0
cihsaW5rUmVnaXN0ZXIsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0
dXJuUENPZmZzZXQoKSkpOworI2VuZGlmCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IG1fYnl0ZWNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
IC8vIFJlc2V0IHRoaXMsIGluIG9yZGVyIHRvIGd1YXJkIGl0cyB1c2Ugd2l0aCBBU1NFUlRzLgog
I2VuZGlmCiAKICAgICAgICAganVtcChiZWdpbkxhYmVsKTsKLSAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIG1fYXJpdHlDaGVjayA9IGVudHJ5TGFiZWw7IC8vIE5vdCBhIGZ1bmN0aW9uLgogCiAg
ICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTc4NCwyMyArODAzLDI4
IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAgICBBU1NFUlQocmVj
b3JkLnR5cGUgPT0gU3dpdGNoUmVjb3JkOjpJbW1lZGlhdGUgfHwgcmVjb3JkLnR5cGUgPT0gU3dp
dGNoUmVjb3JkOjpDaGFyYWN0ZXIpOyAKICAgICAgICAgICAgIEFTU0VSVChyZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkgPT0gcmVjb3JkLmp1bXBU
YWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aU9mZnNldHMuc2l6ZSgpKTsKIAotICAgICAgICAgICAg
cmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZl
ci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZz
ZXRdLCBOb1B0clRhZyk7CisgICAgICAgICAgICBhdXRvKiBzaW1wbGVKdW1wVGFibGUgPSByZWNv
cmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZTsKKyAgICAgICAgICAgIFB0clRhZyB0YWcgPSBw
dHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIHNpbXBsZUp1bXBUYWJsZSk7CisgICAgICAgICAgICBz
aW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFi
ZWxzW2J5dGVjb2RlT2Zmc2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdLCB0YWcpOwogCiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNo
T2Zmc2V0c1tqXTsKLSAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBU
YWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldCA/IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YobV9s
YWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0clRhZykgOiByZWNvcmQuanVtcFRh
YmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKKyAgICAgICAgICAgICAgICBzaW1wbGVK
dW1wVGFibGUtPmN0aU9mZnNldHNbal0gPSBvZmZzZXQKKyAgICAgICAgICAgICAgICAgICAgPyBw
YXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwg
dGFnKQorICAgICAgICAgICAgICAgICAgICA6IHNpbXBsZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChyZWNv
cmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OlN0cmluZyk7CiAKICAgICAgICAgICAgIGF1dG8qIHN0
cmluZ0p1bXBUYWJsZSA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlOworICAgICAg
ICAgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhTd2l0Y2hUYWJsZVB0clRhZywgc3RyaW5nSnVtcFRh
YmxlKTsKICAgICAgICAgICAgIHN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9Ci0gICAgICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubG9jYXRpb25PZihtX2xhYmVsc1tieXRlY29kZU9mZnNldCAr
IHJlY29yZC5kZWZhdWx0T2Zmc2V0XSwgTm9QdHJUYWcpOworICAgICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyByZWNvcmQuZGVmYXVs
dE9mZnNldF0sIHRhZyk7CiAKICAgICAgICAgICAgIGZvciAoYXV0byYgbG9jYXRpb24gOiBzdHJp
bmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0ID0gbG9jYXRpb24uYnJhbmNoT2Zmc2V0OwogICAgICAgICAgICAgICAgIGxv
Y2F0aW9uLmN0aU9mZnNldCA9IG9mZnNldAotICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2YobV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdLCBOb1B0clRh
ZykKKyAgICAgICAgICAgICAgICAgICAgPyBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKG1fbGFiZWxz
W2J5dGVjb2RlT2Zmc2V0ICsgb2Zmc2V0XSwgdGFnKQogICAgICAgICAgICAgICAgICAgICA6IHN0
cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
ODMyLDkgKzg1Niw5IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgICAgICAg
ICBpZiAoSnVtcChwYXRjaGFibGVOb3RJbmRleEp1bXApLmlzU2V0KCkpCiAgICAgICAgICAgICAg
ICAgbm90SW5kZXhKdW1wID0gQ29kZUxvY2F0aW9uSnVtcChwYXRjaEJ1ZmZlci5sb2NhdGlvbk9m
KHBhdGNoYWJsZU5vdEluZGV4SnVtcCkpOwogICAgICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBi
YWRUeXBlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAocGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZh
bENvbXBpbGF0aW9uSW5mby5iYWRUeXBlSnVtcCkpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZG9uZVRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlWYWxDb21waWxhdGlv
bkluZm8uZG9uZVRhcmdldCwgTm9QdHJUYWcpOwotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGls
YXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0LCBOb1B0clRhZyk7Ci0gICAgICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93UGF0aFRhcmdldCA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYnlW
YWxDb21waWxhdGlvbkluZm8uc2xvd1BhdGhUYXJnZXQsIE5vUHRyVGFnKTsKKyAgICAgICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIGRvbmVUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5
VmFsQ29tcGlsYXRpb25JbmZvLmRvbmVUYXJnZXQpOworICAgICAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgbmV4dEhvdFBhdGhUYXJnZXQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29t
cGlsYXRpb25JbmZvLm5leHRIb3RQYXRoVGFyZ2V0KTsKKyAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dQYXRoVGFyZ2V0ID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihieVZhbENvbXBp
bGF0aW9uSW5mby5zbG93UGF0aFRhcmdldCk7CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxs
IHJldHVybkFkZHJlc3MgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGJ5VmFsQ29tcGlsYXRpb25J
bmZvLnJldHVybkFkZHJlc3MpOwogCiAgICAgICAgICAgICAqYnlWYWxDb21waWxhdGlvbkluZm8u
YnlWYWxJbmZvID0gQnlWYWxJbmZvKApAQCAtODY1LDkgKzg4OSw3IEBAIENvbXBpbGF0aW9uUmVz
dWx0IEpJVDo6bGluaygpCiAgICAgfQogICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKGpp
dENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB3
aXRoQXJpdHlDaGVjazsKLSAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rp
b25Db2RlKQotICAgICAgICB3aXRoQXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2Yo
bV9hcml0eUNoZWNrLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZiht
X2FyaXR5Q2hlY2ssIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKIAogICAgIGlmIChP
cHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSkgewogICAgICAgICBtX2Rpc2Fzc2VtYmxlci0+ZHVt
cChwYXRjaEJ1ZmZlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRo
bWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQXJpdGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MTQsNyArNTE0LDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIAogdm9pZCBKSVQ6OmVtaXRf
b3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3Vy
cmVudEluc3RydWN0aW9uKTsKLSAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2Nv
ZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
ICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJ
Qyk7CiAgICAgZW1pdE1hdGhJQ0Zhc3QobmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3Bl
cmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOwogfQpAQCAt
NjYyLDcgKzY2Miw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRPcGUK
IHZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJv
ZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSklUQWRkSUMqIGFkZElDID0gbV9j
b2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSk7CisgICAgSklUQWRkSUMqIGFkZElD
ID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0
aW9uKTsKICAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YWRkSUMpOwogICAgIGVtaXRNYXRoSUNGYXN0KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9w
ZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlQWRkKTsKIH0KQEAgLTcwNSwx
MSArNzA1LDEyIEBAIHZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1hdGhJQzwKIAog
ICAgIGJvb2wgZ2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRo
aXMsIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSk7CiAgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2Rl
KSB7CisgICAgICAgIFB0clRhZyB0YWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5z
dHJ1Y3Rpb24pOwogICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+
YXJpdGhQcm9maWxlKCk7CiAgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRG
dW5jdGlvbiwgTm9QdHJUYWcsIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCB0YWcs
IHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIE5vUHRy
VGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRo
UmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0UmVncywgc3JjUmVncyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKIApAQCAtNzc4LDExICs3NzksMTIgQEAgdm9pZCBKSVQ6OmVtaXRNYXRoSUNG
YXN0KEpJVEJpbmFyeU1hdGhJQwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGxlZnRSZWdzKTsKICAgICAgICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkK
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAg
ICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9u
KTsKICAgICAgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJv
ZmlsZSgpOwogICAgICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwg
dGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxl
ZEZ1bmN0aW9uLCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCB0
YWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MpOwogICAgIH0gZWxzZQogICAgICAg
ICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7CiAKQEAg
LTgxNywxNCArODE5LDE1IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJ
QzwKICAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogI2VuZGlmCiAKKyAgICBQdHJU
YWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgY3VycmVudEluc3RydWN0aW9uKTsKICAgICBB
cml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CiAgICAg
aWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgaWYg
KG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAg
ICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhS
ZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBh
dGNoRnVuY3Rpb24pLCBOb1B0clRhZywgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0
aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHRhZywgcmVzdWx0UmVncywgc3Jj
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVz
dWx0KHByb2ZpbGVkRnVuY3Rpb24sIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0
aFByb2ZpbGUpOworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHRhZywgcmVzdWx0
UmVncywgc3JjUmVncywgYXJpdGhQcm9maWxlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJl
aW50ZXJwcmV0X2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIE5v
UHRyVGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAg
ICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVwYXRjaEZ1
bmN0aW9uKSwgdGFnLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykp
OwogCiAjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCiAgICAgYXV0byBzbG93UGF0aEVuZCA9IGxh
YmVsKCk7CkBAIC04ODMsMTQgKzg4NiwxNSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklU
QmluYXJ5TWF0aElDCiAgICAgYXV0byBzbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKICNlbmRpZgog
CisgICAgUHRyVGFnIGNhbGxUYWcgPSBwdHJUYWcoTWF0aElDUHRyVGFnLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
ewogICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRj
aCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywg
cmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOworICAgICAgICAgICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdp
c2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwg
Y2FsbFRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0ciht
YXRoSUMpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24s
IE5vUHRyVGFnLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFByb2ZpbGUp
OworICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIGNhbGxUYWcsIHJlc3VsdFJlZ3Ms
IGxlZnRSZWdzLCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7CiAgICAgfSBlbHNlCi0gICAgICAg
IG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJl
c3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24p
LCBOb1B0clRhZywgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0
cihtYXRoSUMpKTsKKyAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSkpN
aWM+KHJlcGF0Y2hGdW5jdGlvbiksIGNhbGxUYWcsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CiAKICNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKICAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKQEAgLTk3Nyw3ICs5ODEsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJVDo6ZW1pdF9v
cF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBcml0aFByb2Zp
bGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRN
dWxJQyhhcml0aFByb2ZpbGUpOworICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29kZUJsb2NrLT5h
ZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgbV9pbnN0
cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsKICAgICBlbWl0
TWF0aElDRmFzdChtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFBy
b2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7CiB9CkBAIC05OTMsNyArOTk3LDcgQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX211bChJbnN0cnVjdGlvbiogYwogdm9pZCBKSVQ6OmVtaXRfb3Bfc3Vi
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3Ry
dWN0aW9uKTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMo
YXJpdGhQcm9maWxlKTsKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklU
U3ViSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIG1faW5zdHJ1Y3Rp
b25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7CiAgICAgZW1pdE1hdGhJ
Q0Zhc3Qoc3ViSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxl
ZCwgb3BlcmF0aW9uVmFsdWVTdWIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENvZGUuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzEsMTMgKzcxLDcgQEAgSlNWYWx1ZSBK
SVRDb2RlOjpleGVjdXRlKFZNKiB2bSwgUHJvdG9DYQogewogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwotICAgIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oKnZtLCBwcm90b0Nh
bGxGcmFtZS0+Y2FsbGVlKCkpOwotCi0gICAgaWYgKCFmdW5jdGlvbiB8fCAhcHJvdG9DYWxsRnJh
bWUtPm5lZWRBcml0eUNoZWNrKCkpIHsKLSAgICAgICAgQVNTRVJUKCFwcm90b0NhbGxGcmFtZS0+
bmVlZEFyaXR5Q2hlY2soKSk7Ci0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGVudHJ5QWRkcmVzcyA9IGFkZHJlc3NGb3JDYWxs
KE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGVudHJ5QWRkcmVzcyA9
IGFkZHJlc3NGb3JDYWxsKE11c3RDaGVja0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb0phdmFTY3JpcHQoZW50
cnlBZGRyZXNzLCB2bSwgcHJvdG9DYWxsRnJhbWUpKTsKICAgICByZXR1cm4gc2NvcGUuZXhjZXB0
aW9uKCkgPyBqc051bGwoKSA6IHJlc3VsdDsKIH0KQEAgLTEyNyw3ICsxMjEsMTIgQEAgSklUQ29k
ZVdpdGhDb2RlUmVmOjp+SklUQ29kZVdpdGhDb2RlUmVmKAogdm9pZCogSklUQ29kZVdpdGhDb2Rl
UmVmOjpleGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KHNpemVfdCBvZmZzZXQpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQobV9yZWYpOwotICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3M8Y2hhcio+KCkgKyBvZmZzZXQ7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1fcmVmLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIGlmICghb2Zm
c2V0KQorICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisK
KyAgICBjaGFyKiBleGVjdXRhYmxlQWRkcmVzcyA9IHVudGFnQ29kZVB0cjxjaGFyKj4obV9yZWYu
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENvZGVFbnRyeVB0clRhZyk7CisgICAgcmV0dXJu
IHRhZ0NvZGVQdHIoZXhlY3V0YWJsZUFkZHJlc3MgKyBvZmZzZXQsIENvZGVFbnRyeVB0clRhZyk7
CiB9CiAKIHZvaWQqIEpJVENvZGVXaXRoQ29kZVJlZjo6ZGF0YUFkZHJlc3NBdE9mZnNldChzaXpl
X3Qgb2Zmc2V0KQpAQCAtMTY2LDYgKzE2NSw4IEBAIERpcmVjdEpJVENvZGU6OkRpcmVjdEpJVENv
ZGUoSklUQ29kZTo6Q28KICAgICA6IEpJVENvZGVXaXRoQ29kZVJlZihyZWYsIGppdFR5cGUpCiAg
ICAgLCBtX3dpdGhBcml0eUNoZWNrKHdpdGhBcml0eUNoZWNrKQogeworICAgIEFTU0VSVChtX3Jl
Zik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBEaXJlY3RKSVRDb2RlOjp+
RGlyZWN0SklUQ29kZSgpCkBAIC0xNzcsNiArMTc4LDggQEAgdm9pZCBEaXJlY3RKSVRDb2RlOjpp
bml0aWFsaXplQ29kZVJlZihKSQogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlZik7CiAgICAgbV9y
ZWYgPSByZWY7CiAgICAgbV93aXRoQXJpdHlDaGVjayA9IHdpdGhBcml0eUNoZWNrOworICAgIEFT
U0VSVChtX3JlZik7CisgICAgQVNTRVJUKG1fd2l0aEFyaXR5Q2hlY2spOwogfQogCiBKSVRDb2Rl
OjpDb2RlUHRyIERpcmVjdEpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlIGFy
aXR5KQpAQCAtMjEzLDEwICsyMTYsMTcgQEAgdm9pZCBOYXRpdmVKSVRDb2RlOjppbml0aWFsaXpl
Q29kZVJlZihDbwogICAgIG1fcmVmID0gcmVmOwogfQogCi1KSVRDb2RlOjpDb2RlUHRyIE5hdGl2
ZUpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tNb2RlKQorSklUQ29kZTo6Q29kZVB0
ciBOYXRpdmVKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTW9kZSBhcml0eSkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghIW1fcmVmKTsKLSAgICByZXR1cm4gbV9yZWYuY29kZSgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKG1fcmVmKTsKKyAgICBzd2l0Y2ggKGFyaXR5KSB7CisgICAgY2Fz
ZSBBcml0eUNoZWNrTm90UmVxdWlyZWQ6CisgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7Cisg
ICAgY2FzZSBNdXN0Q2hlY2tBcml0eToKKyAgICAgICAgcmV0dXJuIG1fcmVmLnJldGFnZ2VkQ29k
ZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ29kZVB0cigp
OwogfQogCiAjaWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklURXhjZXB0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRFeGNlcHRpb25zLmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg2LDYgKzg2
LDcgQEAgdm9pZCBnZW5lcmljVW53aW5kKFZNKiB2bSwgRXhlY1N0YXRlKiBjYQogICAgIAogICAg
IEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjYWxsRnJhbWUpIDwgYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4odm0tPnRvcEVudHJ5RnJhbWUpKTsKIAorICAgIGFzc2VydElzVGFnZ2VkV2l0
aChjYXRjaFJvdXRpbmUsIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcpOwogICAgIHZtLT5jYWxsRnJh
bWVGb3JDYXRjaCA9IGNhbGxGcmFtZTsKICAgICB2bS0+dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3cg
PSBjYXRjaFJvdXRpbmU7CiAgICAgdm0tPnRhcmdldEludGVycHJldGVyUENGb3JUaHJvdyA9IGNh
dGNoUENGb3JJbnRlcnByZXRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
TWF0aElDLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRNYXRo
SUMuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRN
YXRoSUMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCArNTYsOSBAQCB0ZW1wbGF0ZSA8dHlwZW5h
bWUgR2VuZXJhdG9yVHlwZSwgYm9vbCgqCiBjbGFzcyBKSVRNYXRoSUMgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIEpJVE1hdGhJQyhBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSkKKyAgICBKSVRNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKICAgICAgICAgOiBtX2FyaXRoUHJvZmlsZShhcml0aFBy
b2ZpbGUpCisgICAgICAgICwgbV9pbnN0cnVjdGlvbihpbnN0cnVjdGlvbikKICAgICB7CiAgICAg
fQogCkBAIC0xMzksMTEgKzE0MCwxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoaml0LCBtX2lubGluZVN0YXJ0LmRhdGFMb2NhdGlvbigpLCBqaXQubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuY29kZVNpemUoKSwgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgbmVl
ZHNCcmFuY2hDb21wYWN0aW9uKTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpbmtCdWZm
ZXIuaXNWYWxpZCgpKTsKICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9j
YXRpb25MYWJlbChtX2NvZGUuY29kZSgpKSk7Ci0gICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBsaW5raW5nIGNvbnN0YW50IGp1bXAgdG8g
b3V0IG9mIGxpbmUgc3R1YiIpOworICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCBOZWFySnVtcFB0clRhZywgIkpJVE1hdGhJQzogbGlua2luZyBjb25zdGFudCBqdW1wIHRvIG91
dCBvZiBsaW5lIHN0dWIiKTsKICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIHJlcGxhY2VDYWxs
ID0gWyZdICgpIHsKLSAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGNhbGxSZXBsYWNlbWVudCk7CisgICAgICAgICAg
ICBQdHJUYWcgdGFnID0gcHRyVGFnKE1hdGhJQ1B0clRhZywgbV9pbnN0cnVjdGlvbik7CisgICAg
ICAgICAgICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzbG93UGF0aENhbGxM
b2NhdGlvbigpLCBGdW5jdGlvblB0cihjYWxsUmVwbGFjZW1lbnQsIHRhZykpOwogICAgICAgICB9
OwogCiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdFByb2ZpbGluZyA9ICFKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpOwpAQCAtMTY2LDcgKzE2OCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0RvbmUsIGRvbmVM
b2NhdGlvbigpKTsKIAogICAgICAgICAgICAgICAgICAgICBtX2NvZGUgPSBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgbGlua0J1ZmZlciwgTm9Q
dHJUYWcsICJKSVRNYXRoSUM6IGdlbmVyYXRpbmcgb3V0IG9mIGxpbmUgZmFzdCBJQyBzbmlwcGV0
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJK
dW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIGZhc3QgSUMgc25p
cHBldCIpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmICghZ2VuZXJhdGlvblN0YXRlLnNob3Vs
ZFNsb3dQYXRoUmVwYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3Qg
bmVlZCB0byByZWdlbmVyYXRlLCBzbyB3ZSBjYW4gd2lyZSB0aGUgc2xvdyBwYXRoIGNhbGwKQEAg
LTIwOCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xv
d1BhdGhKdW1wTGlzdCwgc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogCiAgICAgICAgICAgICBt
X2NvZGUgPSBGSU5BTElaRV9DT0RFX0ZPUigKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElD
IHNuaXBwZXQiKTsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2ssIGxpbmtCdWZmZXIsIE5lYXJK
dW1wUHRyVGFnLCAiSklUTWF0aElDOiBnZW5lcmF0aW5nIG91dCBvZiBsaW5lIElDIHNuaXBwZXQi
KTsKICAgICAgICAgfQogCiAgICAgICAgIGxpbmtKdW1wVG9PdXRPZkxpbmVTbmlwcGV0KCk7CkBA
IC0yMTYsNyArMjE4LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBmaW5hbGl6ZUlubGluZUNvZGUo
Y29uc3QgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSwgTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikKICAgICB7Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0ID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHN0YXRlLmZhc3RQYXRoU3RhcnQsIE5vUHRyVGFnKTsKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhdGUuZmFzdFBhdGhT
dGFydCwgTmVhckp1bXBQdHJUYWcpOwogICAgICAgICBtX2lubGluZVN0YXJ0ID0gc3RhcnQ7CiAK
ICAgICAgICAgbV9pbmxpbmVTaXplID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VCZXR3ZWVu
Q29kZVB0cigKQEAgLTIyNiw3ICsyMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fZGVsdGFGcm9t
U3RhcnRUb1Nsb3dQYXRoQ2FsbExvY2F0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OmRpZmZlcmVuY2VC
ZXR3ZWVuQ29kZVB0cigKICAgICAgICAgICAgIHN0YXJ0LCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yo
c3RhdGUuc2xvd1BhdGhDYWxsKSk7CiAgICAgICAgIG1fZGVsdGFGcm9tU3RhcnRUb1Nsb3dQYXRo
U3RhcnQgPSBNYWNyb0Fzc2VtYmxlcjo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAotICAgICAg
ICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBT
bG93UGF0aFB0clRhZykpOworICAgICAgICAgICAgc3RhcnQsIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzdGF0ZS5zbG93UGF0aFN0YXJ0LCBOb1B0clRhZykpOwogICAgIH0KIAogICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcml0aFByb2ZpbGU7IH0KQEAg
LTI0Myw2ICsyNDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIEFyaXRoUHJvZmlsZSogbV9h
cml0aFByb2ZpbGU7CisgICAgSW5zdHJ1Y3Rpb24qIG1faW5zdHJ1Y3Rpb247CiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2lubGluZVN0
YXJ0OwogICAgIGludDMyX3QgbV9pbmxpbmVTaXplOwpAQCAtMjU5LDggKzI2Miw4IEBAIGlubGlu
ZSBib29sIGlzQmluYXJ5UHJvZmlsZUVtcHR5KEFyaXRoUHIKIHRlbXBsYXRlIDx0eXBlbmFtZSBH
ZW5lcmF0b3JUeXBlPgogY2xhc3MgSklUQmluYXJ5TWF0aElDIDogcHVibGljIEpJVE1hdGhJQzxH
ZW5lcmF0b3JUeXBlLCBpc0JpbmFyeVByb2ZpbGVFbXB0eT4gewogcHVibGljOgotICAgIEpJVEJp
bmFyeU1hdGhJQyhBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSkKLSAgICAgICAgOiBKSVRNYXRo
SUM8R2VuZXJhdG9yVHlwZSwgaXNCaW5hcnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSkKKyAg
ICBKSVRCaW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUsIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNCaW5h
cnlQcm9maWxlRW1wdHk+KGFyaXRoUHJvZmlsZSwgaW5zdHJ1Y3Rpb24pCiAgICAgewogICAgIH0K
IH07CkBAIC0yNzcsOCArMjgwLDggQEAgaW5saW5lIGJvb2wgaXNVbmFyeVByb2ZpbGVFbXB0eShB
cml0aFBybwogdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvclR5cGU+CiBjbGFzcyBKSVRVbmFy
eU1hdGhJQyA6IHB1YmxpYyBKSVRNYXRoSUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2ZpbGVF
bXB0eT4gewogcHVibGljOgotICAgIEpJVFVuYXJ5TWF0aElDKEFyaXRoUHJvZmlsZSogYXJpdGhQ
cm9maWxlKQotICAgICAgICA6IEpJVE1hdGhJQzxHZW5lcmF0b3JUeXBlLCBpc1VuYXJ5UHJvZmls
ZUVtcHR5Pihhcml0aFByb2ZpbGUpCisgICAgSklUVW5hcnlNYXRoSUMoQXJpdGhQcm9maWxlKiBh
cml0aFByb2ZpbGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKKyAgICAgICAgOiBKSVRNYXRo
SUM8R2VuZXJhdG9yVHlwZSwgaXNVbmFyeVByb2ZpbGVFbXB0eT4oYXJpdGhQcm9maWxlLCBpbnN0
cnVjdGlvbikKICAgICB7CiAgICAgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0MywxMyArMTA0MywxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsKE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFk
ZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9T
bG93UGF0aCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsK
LSAgICAKKwogICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9T
VFVCKAogICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAogICAgICAg
ICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1
ZSgpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5i
YWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5R2VuZXJpYywgTm9QdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjMw
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
SW5zdHJ1Y3Rpb24KIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5
cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRh
Zyk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCBq
dW1wVGFibGUpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvCiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNjcnV0aW5lZSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hh
cldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJu
VmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBwdHJUYWcoU3dp
dGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03MTIsNyArNzEy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdAogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5k
ZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqdW1wKHJldHVy
blZhbHVlR1BSLCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsIGp1bXBUYWJsZSkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTE3MCwxMSArMTE3MCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVyCiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwogICAgIAogICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIE5lYXJKdW1wUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgaGFzX2lu
ZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1i
bGVyQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVy
bkFkZHJlc3MpKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJp
YywgSGFzUHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMzMsNyAr
MTIzMyw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXIKICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIHJlZ1QwLCByZWdU
MSwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIEhhc1Byb3BlcnR5UHRyVGFnLCBkc3QsIHJlZ1QwLCBy
ZWdUMSwgYnlWYWxJbmZvKTsKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNh
bGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUG9s
eW1vcnBoaWNBY2Nlc3MuaCIKICNpbmNsdWRlICJQcm9ncmFtQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlOYW1lLmgiCisjaW5jbHVkZSAiUHRyVGFnLmgiCiAjaW5jbHVkZSAiUmVnRXhw
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50
cy5oIgpAQCAtNzMwLDcgKzczMSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE9wdGkKICAgICBpZiAodHJ5UHV0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1
YnNjcmlwdCwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykp
ID09IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwKSB7CiAgICAgICAgIC8vIERvbid0IGV2ZXIg
dHJ5IHRvIG9wdGltaXplLgogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
Ci0gICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9V
Ul9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihP
VVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMs
IFB1dFByb3BlcnR5UHRyVGFnKSk7CiAgICAgfQogICAgIHB1dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1
ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KQEAgLTgxNCw3ICs4MTUsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWCiAgICAgaWYgKHRyeURpcmVj
dFB1dEJ5VmFsT3B0aW1pemUoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6
OkdpdmVVcCkgewogICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KICAgICAg
ICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwotICAgICAgICBjdGlQYXRjaENhbGxC
eVJldHVybkFkZHJlc3MoUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5j
dGlvblB0cihvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKKyAgICAgICAgY3RpUGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNT
KSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljLCBQdXRQcm9wZXJ0
eVB0clRhZykpOwogICAgIH0KIAogICAgIGRpcmVjdFB1dEJ5VmFsKGV4ZWMsIG9iamVjdCwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKQEAgLTg2MSw3ICs4NjIsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogfQogCi1zdGF0aWMgU2xvd1BhdGhSZXR1cm5UeXBlIGhhbmRsZUhvc3RDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBjYWxsZWUsIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvKQorc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgY2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbywgUHRyVGFnIHJlc3VsdFRhZykKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBleGVjQ2Fs
bGVlLT5jYWxsZXJGcmFtZSgpOwogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtODgwLDIw
ICs4ODEsMjIgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbAogICAg
ICAgICAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVlKGFzT2JqZWN0KGNhbGxlZSkpOwogICAgICAg
ICAgICAgdm0tPmhvc3RDYWxsUmV0dXJuVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICBQdHJUYWcgdGh1bmtUYWcgPSBw
dHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhH
ZW5lcmF0b3IpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0
aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAg
ICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRv
cikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNzKCks
CiAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFt
ZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAot
ICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4oZ2V0SG9zdENhbGxSZXR1cm5WYWx1
ZSksCisgICAgICAgICAgICAgICAgdGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihnZXRIb3N0Q2FsbFJl
dHVyblZhbHVlLCByZXN1bHRUYWcpLAogICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKICAgICAgICAgfQogICAgIAogICAgICAgICBBU1NF
UlQoY2FsbFR5cGUgPT0gQ2FsbFR5cGU6Ok5vbmUpOwogICAgICAgICB0aHJvd0V4Y2VwdGlvbihl
eGVjLCBzY29wZSwgY3JlYXRlTm90QUZ1bmN0aW9uRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAg
ICAgIFB0clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhj
ZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoCi0gICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxs
U2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICAg
ICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAg
IH0KIApAQCAtOTA5LDE4ICs5MTIsMjAgQEAgc3RhdGljIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5k
bGVIb3N0Q2FsbAogICAgICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZWUoYXNPYmplY3QoY2FsbGVl
KSk7CiAgICAgICAgIHZtLT5ob3N0Q2FsbFJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNv
bnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKGV4ZWNDYWxsZWUpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgUHRyVGFnIHRodW5rVGFn
ID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICB2bS0+
Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZSh0aHVua1RhZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdl
dEhvc3RDYWxsUmV0dXJuVmFsdWUpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0YWdDRnVuY3Rpb25QdHI8dm9pZCo+
KGdldEhvc3RDYWxsUmV0dXJuVmFsdWUsIHJlc3VsdFRhZyksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEtlZXBUaGVGcmFtZSkpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoY29uc3RydWN0VHlw
ZSA9PSBDb25zdHJ1Y3RUeXBlOjpOb25lKTsKICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCBzY29w
ZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgY2FsbGVlKSk7CisgICAgUHRyVGFn
IHRodW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9t
Q2FsbFNsb3dQYXRoR2VuZXJhdG9yKTsKICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAg
ICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3Ip
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJv
d0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZSh0aHVua1Rh
ZywgcmVzdWx0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICByZWludGVycHJldF9j
YXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKIH0KIApAQCAtOTMwLDYgKzkzNSw3IEBAIFNsb3dQ
YXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CiAK
KyAgICBQdHJUYWcgbGlua2VkVGFyZ2V0VGFnID0gcHRyVGFnKE9wZXJhdGlvbkxpbmtDYWxsUHRy
VGFnLCB2bSk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZv
LT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKICAgICAKQEAgLTk0NSwxMiArOTUxLDEzIEBAIFNsb3dQYXRoUmV0dXJuVHlw
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIGlmICghY2FsbExpbmtJbmZvLT5z
ZWVuT25jZSgpKQogICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmtGb3IoZXhlY0NhbGxlZSwgKmNhbGxM
aW5rSW5mbywgbnVsbHB0ciwgaW50ZXJuYWxGdW5jdGlvbiwgY29kZVB0cik7CisgICAgICAgICAg
ICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBudWxscHRyLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb2RlUHRyLCBDb2RlRW50cnlQdHJUYWcpOwogCi0gICAgICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgdm9pZCogbGlua2Vk
VGFyZ2V0ID0gcmV0YWdDb2RlUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVu
dHJ5UHRyVGFnLCBsaW5rZWRUYXJnZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChsaW5rZWRUYXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+
Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVhc2UoKTsKLSAgICAgICAg
cmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIGNhbGxlZUFzVmFsdWUsIGNhbGxMaW5r
SW5mbyk7CisgICAgICAgIHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVB
c1ZhbHVlLCBjYWxsTGlua0luZm8sIGxpbmtlZFRhcmdldFRhZyk7CiAgICAgfQogCiAgICAgSlNG
dW5jdGlvbiogY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCk7CkBAIC05NTksNDAgKzk2Niw0NiBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgUHRyVGFnIGNvZGVUYWcgPSBOb1B0clRh
ZzsKICAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICBjb2Rl
UHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Cisg
ICAgICAgIGNvZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKICAgICB9IGVs
c2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCisgICAgICAgIGF1
dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgeworICAgICAgICAgICAgUHRyVGFnIHRo
dW5rVGFnID0gcHRyVGFnKEpJVFRodW5rUHRyVGFnLCB2bSwgdGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gcmV0
YWdDb2RlUHRyKHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRodW5rVGFnLCBsaW5rZWRUYXJn
ZXRUYWcpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKICAgICAg
ICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmls
aXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CiAgICAgICAgICAg
ICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RBQ29uc3RydWN0b3JF
cnJvcihleGVjLCBjYWxsZWUpKTsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0g
ICAgICAgICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBoYW5kbGVUaHJvd0V4Y2VwdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJs
b2NrKiogY29kZUJsb2NrU2xvdCA9IGV4ZWNDYWxsZWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwog
ICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JF
eGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPigqdm0sIGNhbGxlZSwgc2NvcGUsIGtpbmQsICpj
b2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2Vw
dGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8RXhjZXB0aW9uKj4oZXJyb3IpKTsKLSAgICAgICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAg
ICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KGVycm9yKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CiAgICAg
ICAgIGNvZGVCbG9jayA9ICpjb2RlQmxvY2tTbG90OwogICAgICAgICBBcml0eUNoZWNrTW9kZSBh
cml0eTsKLSAgICAgICAgaWYgKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBj
YWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby0+aXNWYXJhcmdzKCkpIHsKICAgICAgICAg
ICAgIGFyaXR5ID0gTXVzdENoZWNrQXJpdHk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
ZGVUYWcgPSBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZzsKKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJlcXVpcmVkOworICAgICAgICAgICAg
Y29kZVRhZyA9IENvZGVFbnRyeVB0clRhZzsKKyAgICAgICAgfQogICAgICAgICBjb2RlUHRyID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKICAgICB9CiAg
ICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+
c2V0U2VlbigpOwogICAgIGVsc2UKLSAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAqY2FsbExp
bmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7Ci0gICAgCi0gICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNl
VGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgbGlua0ZvcihleGVjQ2FsbGVlLCAq
Y2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0ciwgY29kZVRhZyk7CisKKyAg
ICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIucmV0YWdnZWQoY29kZVRhZywgbGlua2VkVGFy
Z2V0VGFnKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxs
TGlua0luZm8tPmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDog
S2VlcFRoZUZyYW1lKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGly
ZWN0Q2FsbChFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0Z1
bmN0aW9uKiBjYWxsZWUpCkBAIC0xMDI1LDcgKzEwMzgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0RpcmVjdENhCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwogICAgIGlmIChleGVjdXRhYmxl
LT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgICAgIGNvZGVQdHIgPSBleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgIGVsc2UgewogICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCkBAIC0xMDM1LDIwICsxMDQ4LDE4
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rRGlyZWN0Q2EKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVF9VTlVTRUQodGhyb3dTY29wZSwgdGhyb3dTY29wZS5leGNlcHRpb24oKSA9
PSByZWludGVycHJldF9jYXN0PEV4Y2VwdGlvbio+KGVycm9yKSk7CiAgICAgICAgIGlmIChlcnJv
cikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQXJpdHlDaGVja01vZGUgYXJpdHk7CiAg
ICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50U3RhY2tTbG90cyA9IGNhbGxMaW5rSW5mby0+bWF4TnVt
QXJndW1lbnRzKCk7CiAgICAgICAgIGlmIChhcmd1bWVudFN0YWNrU2xvdHMgPCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkKLSAgICAgICAgICAgIGFyaXR5
ID0gTXVzdENoZWNrQXJpdHk7CisgICAgICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KS5yZXRhZ2dlZChDb2RlRW50
cnlXaXRoQXJpdHlDaGVja1B0clRhZywgTmVhckNhbGxQdHJUYWcpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKLSAgICAgICAgY29kZVB0
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7CisgICAg
ICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQs
IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCkucmV0YWdnZWQoQ29kZUVudHJ5UHRyVGFnLCBOZWFyQ2Fs
bFB0clRhZyk7CiAgICAgfQogICAgIAogICAgIGxpbmtEaXJlY3RGb3IoZXhlYywgKmNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjb2RlUHRyKTsKIH0KIAogaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlw
ZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpTQ2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsKQor
ICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIEpT
Q2VsbComIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCBQdHJUYWcgcmVzdWx0VGFnKQogewogICAgIEV4
ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CkBAIC0xMDYzLDEwICsxMDc0LDEwIEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxG
dW5jdGlvbio+KCp2bSwgY2FsbGVlQXNWYWx1ZSkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlUHRyID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGtpbmQpOwogICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWls
ID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICAgICAgcmV0dXJuIGVu
Y29kZVJlc3VsdChjb2RlUHRyLnJldGFnZ2VkKENvZGVFbnRyeVB0clRhZywgcmVzdWx0VGFnKS5l
eGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjYWxsTGlua0luZm8t
PmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyBSZXVzZVRoZUZyYW1lIDogS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7Ci0gICAgICAg
IHJldHVybiBoYW5kbGVIb3N0Q2FsbChleGVjQ2FsbGVlLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlu
a0luZm8pOworICAgICAgICByZXR1cm4gaGFuZGxlSG9zdENhbGwoZXhlY0NhbGxlZSwgY2FsbGVl
QXNWYWx1ZSwgY2FsbExpbmtJbmZvLCByZXN1bHRUYWcpOwogICAgIH0KICAgICAKICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNl
bGwpOwpAQCAtMTA3Nyw4ICsxMDg4LDkgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0
dWFsRm9yV2l0aAogCiAgICAgICAgIGlmICghaXNDYWxsKGtpbmQpICYmIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Y29uc3RydWN0QWJpbGl0eSgpID09IENvbnN0cnVjdEFiaWxpdHk6OkNhbm5vdENvbnN0
cnVjdCkgewogICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3Jl
YXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZXhlYywgZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIFB0
clRhZyB0aHVua1RhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0sIHRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVz
dWx0KAotICAgICAgICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNh
bGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAg
ICAgICAgICAgdm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGUodGh1bmtUYWcsIHJlc3VsdFRhZykuZXhlY3V0YWJsZUFkZHJl
c3MoKSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJh
bWUpKTsKICAgICAgICAgfQogCkBAIC0xMDg2LDIxICsxMDk4LDI1IEBAIGlubGluZSBTbG93UGF0
aFJldHVyblR5cGUgdmlydHVhbEZvcldpdGgKICAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uPEZ1bmN0aW9uRXhlY3V0YWJsZT4o
KnZtLCBmdW5jdGlvbiwgc2NvcGUsIGtpbmQsICpjb2RlQmxvY2tTbG90KTsKICAgICAgICAgRVhD
RVBUSU9OX0FTU0VSVCh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpID09IHJlaW50ZXJwcmV0X2Nhc3Q8
RXhjZXB0aW9uKj4oZXJyb3IpKTsKICAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBQ
dHJUYWcgdGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdCgKLSAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLAorICAgICAg
ICAgICAgICAgIHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdl
bmVyYXRvcikucmV0YWdnZWRDb2RlKHRodW5rVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZy
YW1lKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGVuY29kZVJlc3VsdChleGVjdXRh
YmxlLT5lbnRyeXBvaW50Rm9yKAotICAgICAgICBraW5kLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0
YWJsZUFkZHJlc3MoKSwKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLnJldGFnZ2VkKENv
ZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCByZXN1bHRUYWcpLmV4ZWN1dGFibGVBZGRyZXNz
KCksCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1v
ZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsK
IH0KIAogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvKQogeworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7
CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby0+c3Bl
Y2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwpOwogICAgIEpTQ2VsbCogY2FsbGVlQXNG
dW5jdGlvbkNlbGw7Ci0gICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1YWxGb3JX
aXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCk7CisgICAgUHRyVGFnIHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsUHRyVGFnLCB2bSk7CisgICAgU2xvd1BhdGhSZXR1cm5UeXBlIHJlc3VsdCA9IHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCwgcmVzdWx0VGFnKTsKIAogICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxl
ZSwgKmNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQoY2FsbGVlQXNGdW5jdGlvbkNlbGwpKTsKICAg
ICAKQEAgLTExMDksOCArMTEyNSwxMSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpCiAKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZp
cnR1YWxDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCiB7CisgICAgRXhlY1N0YXRlKiBleGVjID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25D
ZWxsSWdub3JlZDsKLSAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVl
LCBjYWxsTGlua0luZm8sIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CisgICAgUHRyVGFn
IHJlc3VsdFRhZyA9IHB0clRhZyhPcGVyYXRpb25WaXJ0dWFsQ2FsbFB0clRhZywgdm0pOworICAg
IHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywg
Y2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkLCByZXN1bHRUYWcpOwogfQogCiBzaXplX3QgSklU
X09QRVJBVElPTiBvcGVyYXRpb25Db21wYXJlTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCkBAIC0xNzYxLDcg
KzE3ODAsNyBAQCBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAg
ICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNT
dHJpbmcoYmFzZVZhbHVlKSkgewogICAgICAgICAgICAgaWYgKGFzU3RyaW5nKGJhc2VWYWx1ZSkt
PmNhbkdldEluZGV4KGkpKSB7Ci0gICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
KSk7CisgICAgICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nLCBHZXRQcm9wZXJ0eVB0
clRhZykpOwogICAgICAgICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAgICAg
ICAgICB9CkBAIC0xODI5LDcgKzE4NDgsNyBAQCBzdGF0aWMgT3B0aW1pemF0aW9uUmVzdWx0IHRy
eUdldEJ5VmFsT3B0CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJl
KTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+Y29k
ZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAg
ICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbCgmdm0sIGNvZGVCbG9jaywgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0xOTAxLDcgKzE5MjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgaWYgKHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVl
LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykgPT0gT3B0aW1pemF0aW9uUmVz
dWx0OjpHaXZlVXApIHsKICAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCiAg
ICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKLSAgICAgICAgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYykpOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9w
ZXJ0eVB0clRhZykpOwogICAgIH0KIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZ2V0QnlW
YWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcykp
OwpAQCAtMTk0MSw3ICsxOTYwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25IYQogICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAKICAg
ICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRz
R2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKICAg
ICAgICAgICAgIC8vIERvbid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwor
ICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIo
T1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYywgSGFzUHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MjAwMSw3ICsyMDIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25H
ZQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
ICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGJhc2VWYWx1ZSkpIHsKICAgICAgICAgICAgIEFTU0VS
VChleGVjLT5ieXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9u
UHRyKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPyBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMgOiBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplKSk7CisgICAgICAgICAgICBhdXRvIGdldEJ5VmFsRnVu
Y3Rpb24gPSBieVZhbEluZm8tPnN0dWJSb3V0aW5lID8gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmlj
IDogb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0
aW9uUHRyKGdldEJ5VmFsRnVuY3Rpb24sIEdldFByb3BlcnR5UHRyVGFnKSk7CiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBiYXNlVmFsdWUucmVxdWlyZU9iamVjdENvZXJjaWJsZShl
eGVjKTsKQEAgLTIxNTAsNiArMjE3MCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3dpdGNoQ2hhclcKICAgICAgICAgICAgIHJlc3VsdCA9IGp1bXBUYWJsZS5jdGlGb3JWYWx1ZSgo
KnZhbHVlKVswXSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKKyAgICBhc3NlcnRJc1Rh
Z2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZqdW1wVGFibGUpKTsK
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsKIH0KIApAQCAtMjE2
OCw2ICsyMTg5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hJbW1XaQog
ICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oa2V5LmFzRG91YmxlKCkpKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIGVsc2UKICAgICAg
ICAgcmVzdWx0ID0ganVtcFRhYmxlLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAg
ICBhc3NlcnRJc1RhZ2dlZFdpdGgocmVzdWx0LCBwdHJUYWcoU3dpdGNoVGFibGVQdHJUYWcsICZq
dW1wVGFibGUpKTsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocmVzdWx0KTsK
IH0KIApAQCAtMjE4Nyw2ICsyMjA5LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHJpbgogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBqdW1wVGFibGUuY3RpRGVm
YXVsdC5leGVjdXRhYmxlQWRkcmVzcygpOwogCisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKHJlc3Vs
dCwgcHRyVGFnKFN3aXRjaFRhYmxlUHRyVGFnLCAmanVtcFRhYmxlKSk7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMzAxMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKICAgICBKdW1wTGlz
dCBmYWlsdXJlczsKKyAgICBqaXQudGFnUmV0dXJuQWRkcmVzcygpOwogICAgIGZhaWx1cmVzLmFw
cGVuZChqaXQuYnJhbmNoU3RydWN0dXJlKAogICAgICAgICBOb3RFcXVhbCwgCiAgICAgICAgIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIApAQCAtOTAsNyArOTEs
NyBAQCBKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0LnJl
dCgpOwogICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIlN0
cmluZyBnZXRfYnlfdmFsIHN0dWIiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgTmVhckNhbGxQdHJUYWcsICJTdHJpbmcgZ2V0X2J5X3ZhbCBzdHViIik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKQEAgLTIzNyw3ICsyMzgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5
VmFsV2l0CiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQ
YXRoSnVtcCgpLmxpbmsodGhpcyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCBy
ZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcs
IGRzdCwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogICAgIHNsb3dEb25l
Q2FzZSA9IGp1bXAoKTsKIApAQCAtMjc1LDcgKzI3Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LCBOb1B0clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBHZXRQcm9wZXJ0eVB0
clRhZywgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQ
YXRoOwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LnJldHVybkFkZHJlc3MgPSBjYWxsOwpAQCAtNDU1LDcgKzQ1Niw3IEBAIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXQKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKIAotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCks
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBQdXRQcm9wZXJ0eVB0clRhZywgZ2Vu
LnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKICAgICBkb25lQ2FzZXMu
YXBwZW5kKGp1bXAoKSk7CiAKQEAgLTQ5Miw3ICs0OTMsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbChJbnN0cnVjCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKICAg
ICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgTm9QdHJUYWcsIHJlZ1QwLCByZWdUMSwgcmVn
VDIsIGJ5VmFsSW5mbyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGlt
aXplLCBQdXRQcm9wZXJ0eVB0clRhZywgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsK
IAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC01OTMsNyArNTk0
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdAogCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZv
KCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZS
ZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CiAgICAgCiAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KQEAgLTY1NSw4ICs2
NTYsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0CiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAg
ICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICAKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBy
ZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworCisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgR2V0UHJvcGVydHlQdHJUYWcsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgaWRlbnQtPmltcGwoKSk7CiAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQpAQCAtNjcxLDggKzY3Miw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWRfd2l0aF90aGkKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdl
biA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwogICAgIAog
ICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwo
KSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIEdldFByb3BlcnR5UHRyVGFnLCByZXN1bHRWUmVnLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CkBAIC03MTQsOCArNzE1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZChJbnN0cnVjdAogICAgIAogICAg
IEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107
CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAotICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIFB1
dFByb3BlcnR5UHRyVGFnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1w
bCgpKTsKIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CkBAIC0xMjU4LDExICsxMjU4LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
VmFsKEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlw
ZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CiAgICAg
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBn
ZXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlv
bkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVy
aWMsIFNsb3dQYXRoUHRyVGFnKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljLCBHZXRQcm9wZXJ0eVB0clRhZykpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUpCkBAIC0xMjkwLDEyICsxMjkwLDEyIEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZm
ZXIpOwogCiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNl
bGluZSBnZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwg
dG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwog
ICAgIGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKIAogICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJp
YywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29k
ZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMsIEdldFByb3BlcnR5UHRyVGFnKSk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUp
CkBAIC0xMzM4LDIzICsxMzM4LDIzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFs
KEJ5VmFsSW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwog
ICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2Fs
bHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxlQWRkcmVzcygpID09IG9wZXJhdGlvbldyaXRlQmFy
cmllclNsb3dQYXRoKTsKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5m
cm9tLCBGdW5jdGlvblB0cihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgU2xvd1BhdGhQ
dHJUYWcpKTsKKyAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCku
Y2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
Lmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3QoKS5jYWxsZWUpOwogICAgIH0KICAgICAKICAgICBi
b29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwogICAgIGlmICghaXNEaXJlY3Qp
IHsKICAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NU
VUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAgICAg
ICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7
CiAgICAgICAgIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBOb1B0clRhZywKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
TmVhckp1bXBQdHJUYWcsCiAgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbF9kaXJlY3Qg
c3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICB9CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fz
c2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywg
UHV0UHJvcGVydHlQdHJUYWcpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCkBAIC0xMzgwLDEyICsxMzgwLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2gKICAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwogCiAgICAgYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgTmVhckp1bXBQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMg
d2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5p
bXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0
dXJuQWRkcmVzcy52YWx1ZSgpKTsKICAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJ
bmZvKCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJ
bmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihw
dXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJh
dGlvblB1dEJ5VmFsR2VuZXJpYywgU2xvd1BhdGhQdHJUYWcpKTsKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbChNYWNyb0Fzc2VtYmxlckNvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYywgUHV0UHJvcGVy
dHlQdHJUYWcpKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRo
dW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVu
a3MuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRodW5rcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCBOYXRpdmVFeGVj
dXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiAgICAgUmVmUHRyPEpJVENvZGU+IGZvckNh
bGw7CiAgICAgaWYgKGdlbmVyYXRvcikgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZW50cnkgPSBnZW5lcmF0b3Iodm0pOwotICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoZW50cnksIGVudHJ5LmNvZGUoKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykp
OworICAgICAgICBmb3JDYWxsID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoZW50cnksIGVu
dHJ5LnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNr
UHRyVGFnKSwgSklUQ29kZTo6SG9zdENhbGxUaHVuaykpOwogICAgIH0gZWxzZQogICAgICAgICBm
b3JDYWxsID0gYWRvcHRSZWYobmV3IE5hdGl2ZUpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ2FsbCh2bSkpLCBKSVRDb2RlOjpI
b3N0Q2FsbFRodW5rKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNyBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBn
ZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKHN0
dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+KGJhc2VDZWxsKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmdGxU
aHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2Nh
dGlvbigpLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUlkRnVuY3Rpb24oa2luZCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVP
cHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEFycmF5TGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnlJRAogICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0ZWRDb2RlSW5saW5lKSB7CiAg
ICAgICAgICAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlJZFNlbGZQYXRjaCwgc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSwgcHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhD
YWxsTG9jYXRpb24oKSwgRnVuY3Rpb25QdHIoYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1
bmN0aW9uKGtpbmQpLCBHZXRQcm9wZXJ0eVB0clRhZykpOwogICAgICAgICAgICAgICAgICAgICBz
dHViSW5mby5pbml0R2V0QnlJZFNlbGYoY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVk
T2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTM2OCw4ICszNjgsMTAgQEAgdm9pZCByZXBhdGNoR2V0QnlJ
RChFeGVjU3RhdGUqIGV4ZWMsIEpTVgogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKICAgICAKLSAgICBpZiAodHJ5Q2FjaGVHZXRCeUlEKGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25D
YWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygp
LCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0ZUdlbmVyaWNHZXRC
eUlkRnVuY3Rpb24oa2luZCkpOworICAgIGlmICh0cnlDYWNoZUdldEJ5SUQoZXhlYywgYmFzZVZh
bHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hl
KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Cisg
ICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQ
YXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRyKGFwcHJvcHJpYXRlR2VuZXJpY0dldEJ5SWRG
dW5jdGlvbihraW5kKSwgR2V0UHJvcGVydHlQdHJUYWcpKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBW
X0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihj
b25zdCBQdXRQcm9wZXJ0eVNsb3QgJnNsb3QsIFB1dEtpbmQgcHV0S2luZCkKQEAgLTM4NiwxNyAr
Mzg4LDE0IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQKIAogc3Rh
dGljIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1
bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0S2luZCBwdXRLaW5kKQogewot
ICAgIGF1dG8gcGlja1Nsb3dQYXRoID0gWyZdICgpIC0+IFZfSklUT3BlcmF0aW9uX0VTc2lKSkkg
ewotICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkgewotICAgICAgICAgICAgaWYgKHB1
dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdE9wdGltaXplOwotICAgICAgICB9CisgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
IHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0KQotICAgICAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICB9OwotICAgIHJldHVybiB0YWdD
RnVuY3Rpb25QdHIocGlja1Nsb3dQYXRoKCksIFNsb3dQYXRoUHRyVGFnKTsKKyAgICAgICAgICAg
IHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemU7CisgICAgfQorICAgIGlmIChwdXRL
aW5kID09IERpcmVjdCkKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZTsKKyAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGlt
aXplOwogfQogCiBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCkKQEAgLTQ0Myw3ICs0NDIsNyBA
QCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVT
ZWxmUHJvcGVydHlSZXBsYWNlKHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeUlkU2VsZlBhdGNoLCBz
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxs
TG9jYXRpb24oKSwgYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1
dEtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIEZ1bmN0aW9uUHRy
KGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgUHV0
UHJvcGVydHlQdHJUYWcpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQ
dXRCeUlkUmVwbGFjZShjb2RlQmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC01NzUsOCArNTc0LDEwIEBAIHZvaWQgcmVwYXRjaFB1dEJ5SUQo
RXhlY1N0YXRlKiBleGVjLCBKU1YKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBs
ZXJTY29wZShmYWxzZSk7CiAgICAgCi0gICAgaWYgKHRyeUNhY2hlUHV0QnlJRChleGVjLCBiYXNl
VmFsdWUsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCkg
PT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKGV4ZWMt
PmNvZGVCbG9jaygpLCBzdHViSW5mby5zbG93UGF0aENhbGxMb2NhdGlvbigpLCBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOworICAgIGlmICh0cnlDYWNo
ZVB1dEJ5SUQoZXhlYywgYmFzZVZhbHVlLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdCwg
c3R1YkluZm8sIHB1dEtpbmQpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICAgICAgZnRsVGh1bmtBd2FyZVJl
cGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVu
Y3Rpb25QdHIoYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
LCBQdXRQcm9wZXJ0eVB0clRhZykpOworICAgIH0KIH0KIAogc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlSW4oCkBAIC02OTgsNyArNjk5LDcgQEAgc3RhdGljIEpTQ2VsbCogd2ViQXNz
ZW1ibHlPd25lcihKU0NlbGwqIAogCiB2b2lkIGxpbmtGb3IoCiAgICAgRXhlY1N0YXRlKiBleGVj
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ss
Ci0gICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisg
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIFB0clRh
ZyBjb2RlVGFnKQogewogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7CiAKQEAgLTcy
MCw3ICs3MjEsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJs
eUZvcihjYWxsZXJDb2RlQmxvY2spKQogICAgICAgICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4g
IiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJsb2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdp
bigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50
IGF0ICIsIGNvZGVQdHIsICJcbiIpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFy
Q2FsbChjYWxsTGlua0luZm8uaG90UGF0aE90aGVyKCksIENvZGVMb2NhdGlvbkxhYmVsKGNvZGVQ
dHIpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5o
b3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0ci5yZXRhZ2dlZChjb2RlVGFn
LCBOZWFyQ2FsbFB0clRhZykpKTsKIAogICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCiAgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5r
SW5mbyk7CkBAIC03NjcsNiArNzY4LDcgQEAgdm9pZCBsaW5rU2xvd0ZvcigKIAogc3RhdGljIHZv
aWQgcmV2ZXJ0Q2FsbChWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY29kZVJlZikKIHsKKyAgICBhc3NlcnRJc1RhZ2dlZFdpdGgoY29kZVJl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgTmVhckNhbGxQdHJUYWcpOwogICAgIGlmIChj
YWxsTGlua0luZm8uaXNEaXJlY3QoKSkgewogICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2Rl
QmxvY2soKTsKICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5jYWxsVHlwZSgpID09IENhbGxMaW5r
SW5mbzo6RGlyZWN0VGFpbENhbGwpCkBAIC0xMDg1LDcgKzEwODcsNyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgYXV0byBzdHViUm91dGluZSA9IGFkb3B0UmVmKCpuZXcg
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAot
ICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgTm9QdHJUYWcsCisgICAg
ICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBOZWFySnVtcFB0clRhZywKICAg
ICAgICAgICAgICJQb2x5bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAs
IHRhcmdldHMgJXMiLAogICAgICAgICAgICAgICAgIGlzV2ViQXNzZW1ibHkgPyAiV2ViQXNzZW1i
bHkiIDogdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExpbmtJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbigpLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwK
ICAgICAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgpKSwK
QEAgLTExMTIsMTMgKzExMTQsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogCiB2b2lk
IHJlc2V0R2V0QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBHZXRCeUlES2luZCBraW5kKQogewotICAgIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCksIGFwcHJvcHJpYXRl
T3B0aW1pemluZ0dldEJ5SWRGdW5jdGlvbihraW5kKSk7CisgICAgZnRsVGh1bmtBd2FyZVJlcGF0
Y2hDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSwgRnVuY3Rp
b25QdHIoYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlJZEZ1bmN0aW9uKGtpbmQpLCBHZXRQcm9w
ZXJ0eVB0clRhZykpOwogICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcChzdHViSW5m
bywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKCkpOwogfQogCiB2b2lkIHJlc2V0UHV0
QnlJRChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQog
ewotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IGJpdHdp
c2VfY2FzdDxWX0pJVE9wZXJhdGlvbl9FU3NpSkpJPihyZWFkQ2FsbFRhcmdldChjb2RlQmxvY2ss
IHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHVudGFnQ0Z1
bmN0aW9uUHRyPFZfSklUT3BlcmF0aW9uX0VTc2lKSkk+KHJlYWRDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8uc2xvd1BhdGhDYWxsTG9jYXRpb24oKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
UHV0UHJvcGVydHlQdHJUYWcpOwogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3B0aW1pemVk
RnVuY3Rpb247CiAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZSkKICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemU7CkBAIC0xMTMxLDcgKzExMzMsNyBAQCB2b2lkIHJlc2V0UHV0QnlJRChDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgCiAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOwogICAgIH0KIAotICAgIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLnNsb3dQYXRoQ2FsbExvY2F0aW9uKCks
IHRhZ0NGdW5jdGlvblB0cihvcHRpbWl6ZWRGdW5jdGlvbiwgU2xvd1BhdGhQdHJUYWcpKTsKKyAg
ICBmdGxUaHVua0F3YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5zbG93UGF0aENh
bGxMb2NhdGlvbigpLCBGdW5jdGlvblB0cihvcHRpbWl6ZWRGdW5jdGlvbiwgUHV0UHJvcGVydHlQ
dHJUYWcpKTsKICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXAoc3R1YkluZm8sIHN0
dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9p
ZCBidWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSgogdm9pZCByZXBhdGNoUHV0QnlJ
RChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQg
YnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQ
dXRLaW5kKTsKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50
aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTT2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cik7Cit2b2lkIGxpbmtG
b3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBQdHJUYWcpOwogdm9pZCBsaW5rRGlyZWN0Rm9yKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cik7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYpOwogdm9pZCB1
bmxpbmtGb3IoVk0mLCBDYWxsTGlua0luZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTcwLDE0ICsxNzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkr
KykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1f
Y2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCBOb1B0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciAlcyIsIHRodW5rS2luZCk7
CisgICAgICAgICAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgQ29kZUVudHJ5
UHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yICVzIiwgdGh1bmtLaW5kKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBS
ZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CiAgICAgICAgIC8vIGFuZCByZXR1cm4gdmFs
dWUuIExpa2UgYW55IHNlbnNpYmxlIGFyY2hpdGVjdHVyZSB3b3VsZC4KICAgICAgICAgdm9pZCBj
YWxsRG91YmxlVG9Eb3VibGUoRnVuY3Rpb25QdHIgZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1fY2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwoU2xvd1BhdGhQdHJUYWcp
LCBmdW5jdGlvbikpOworICAgICAgICAgICAgYXNzZXJ0SXNDRnVuY3Rpb25QdHIoZnVuY3Rpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBQdHJUYWcgdGFnID0gcHRyVGFnKFNw
ZWNpYWxpemVkVGh1bmtQdHJUYWcsIG5leHRQdHJUYWdJRCgpKTsKKyAgICAgICAgICAgIG1fY2Fs
bHMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGNhbGwodGFnKSwgRnVuY3Rpb25QdHIoZnVuY3Rpb24s
IHRhZykpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBjYWxsRG91YmxlVG9E
b3VibGVQcmVzZXJ2aW5nUmV0dXJuKEZ1bmN0aW9uUHRyIGZ1bmN0aW9uKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjMw
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgdm9pZCBlbWl0UG9pbnRlclZhbGlkYXRpb24oQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBw
b2ludGVyR1BSKQordGVtcGxhdGU8dHlwZW5hbWUgVGFnVHlwZT4KK2lubGluZSB2b2lkIGVtaXRQ
b2ludGVyVmFsaWRhdGlvbihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBvaW50ZXJHUFIsIFRh
Z1R5cGUgdGFnKQogewogICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCiAgICAgICAgIHJldHVybjsK
QEAgLTUyLDYgKzUzLDcgQEAgaW5saW5lIHZvaWQgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKENDYWxs
SAogICAgIGppdC5hYm9ydFdpdGhSZWFzb24oVEdJbnZhbGlkUG9pbnRlcik7CiAgICAgaXNOb25a
ZXJvLmxpbmsoJmppdCk7CiAgICAgaml0LnB1c2hUb1NhdmUocG9pbnRlckdQUik7CisgICAgaml0
LnVudGFnUHRyKHBvaW50ZXJHUFIsIHRhZyk7CiAgICAgaml0LmxvYWQ4KHBvaW50ZXJHUFIsIHBv
aW50ZXJHUFIpOwogICAgIGppdC5wb3BUb1Jlc3RvcmUocG9pbnRlckdQUik7CiB9CkBAIC02OCwx
OSArNzAsMjMgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRocm93RXhjZXB0aW9uRnJvbQogCiAg
ICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLT50
b3BFbnRyeUZyYW1lKTsKIAorICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5rUHRy
VGFnLCBuZXh0UHRyVGFnSUQoKSk7CiAgICAgaml0LnNldHVwQXJndW1lbnRzPGRlY2x0eXBlKGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIpPihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodm0pLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4obG9va3VwRXhjZXB0aW9uSGFuZGxlcikp
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwLCBO
b1B0clRhZyk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhZ0NG
dW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyLCBjYWxsVGFnKSksIEdQUkluZm86Om5v
bkFyZ0dQUjApOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFy
Z0dQUjAsIGNhbGxUYWcpOworICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIGNhbGxU
YWcpOwogICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSk7CiAKKyAgICBQdHJUYWcg
dGh1bmtUYWcgPSBwdHJUYWcoSklUVGh1bmtQdHJUYWcsIHZtLCB0aHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBO
b1B0clRhZywgIlRocm93IGV4Y2VwdGlvbiBmcm9tIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7Cisg
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIHRodW5rVGFnLCAiVGhyb3cgZXhj
ZXB0aW9uIGZyb20gY2FsbCBzbG93IHBhdGggdGh1bmsiKTsKIH0KIAogc3RhdGljIHZvaWQgc2xv
d1BhdGhGb3IoCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIFZNKiB2bSwgU3BydF9KSVRPcGVyYXRp
b25fRUNsaSBzbG93UGF0aEZ1bmN0aW9uKQorICAgIENDYWxsSGVscGVycyYgaml0LCBWTSogdm0s
IFNwcnRfSklUT3BlcmF0aW9uX0VDbGkgc2xvd1BhdGhGdW5jdGlvbiwgUHRyVGFnIGV4cGVjdGVk
TGlua2VkVGFyZ2V0VGFnKQogeworICAgIFB0clRhZyBjYWxsVGFnID0gcHRyVGFnKEpJVFRodW5r
UHRyVGFnLCBuZXh0UHRyVGFnSUQoKSk7CisKICAgICBqaXQuc2FuaXRpemVTdGFja0lubGluZSgq
dm0sIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgp
OwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BD
YWxsRnJhbWUpOwpAQCAtOTMsOSArOTksOSBAQCBzdGF0aWMgdm9pZCBzbG93UGF0aEZvcigKICAg
ICBqaXQubW92ZShHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKICAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDMyKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBqaXQubW92
ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKLSAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQq
PihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGVtaXRQb2lu
dGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQYXRoRnVuY3Rpb24sIGNhbGxUYWcp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgY2FsbFRhZyk7CiAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCA4KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsK
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CiAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCksIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpAQCAtMTAzLDkgKzEwOSw5IEBAIHN0YXRp
YyB2b2lkIHNsb3dQYXRoRm9yKAogICAgIGlmIChtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCkKICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtbWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKICAgICBqaXQuc2V0dXBBcmd1bWVudHM8ZGVjbHR5cGUoc2xvd1BhdGhGdW5jdGlvbik+
KEdQUkluZm86OnJlZ1QyKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYml0d2lzZV9jYXN0PHZvaWQqPihzbG93UGF0aEZ1bmN0aW9uKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE5vUHRyVGFnKTsKKyAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFnQ0Z1bmN0aW9uUHRyKHNsb3dQ
YXRoRnVuY3Rpb24sIGNhbGxUYWcpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgZW1pdFBv
aW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CisgICAg
aml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCwgY2FsbFRhZyk7CiAgICAgaWYgKG1heEZyYW1l
RXh0ZW50Rm9yU2xvd1BhdGhDYWxsKQogICAgICAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKSwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKQEAgLTExNiw4ICsxMjIsOSBAQCBzdGF0
aWMgdm9pZCBzbG93UGF0aEZvcigKICAgICAvLyAzKSBUaGUgZnVuY3Rpb24gdG8gY2FsbC4KICAg
ICAvLyBUaGUgc2Vjb25kIHJldHVybiB2YWx1ZSBHUFIgd2lsbCBob2xkIGEgbm9uLXplcm8gdmFs
dWUgZm9yIHRhaWwgY2FsbHMuCiAKLSAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKICAgICBqaXQu
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAK
ICAgICBSRUxFQVNFX0FTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
ID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDApKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZG9Ob3RUcmFzaCA9IGppdC5icmFuY2hUZXN0UHRyKENDYWxsSGVscGVyczo6WmVybywgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIyKTsKQEAgLTEyNiw3ICsxMzMsNyBAQCBzdGF0aWMgdm9pZCBzbG93
UGF0aEZvcigKICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdyhHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7CiAKICAgICBkb05vdFRyYXNoLmxpbmsoJmppdCk7Ci0gICAgaml0Lmp1bXAoR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKKyAgICBqaXQuanVtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcpOwogfQogCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCkBAIC0xMzcsMTEgKzE0
NCwxMiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NhbGxUaHVua0dlbmVyCiAgICAgLy8g
dG8gYmUgaW4gcmVnVDAvcmVnVDEgKHBheWxvYWQvdGFnKSwgdGhlIENhbGxGcmFtZSB0byBoYXZl
IGFscmVhZHkKICAgICAvLyBiZWVuIGFkanVzdGVkLCBhbmQgYWxsIG90aGVyIHJlZ2lzdGVycyB0
byBiZSBhdmFpbGFibGUgZm9yIHVzZS4KICAgICBDQ2FsbEhlbHBlcnMgaml0OwotICAgIAotICAg
IHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsKTsKLSAgICAKKworICAgIFB0
clRhZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhPcGVyYXRpb25MaW5rQ2FsbFB0
clRhZywgdm0pOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtDYWxsLCBl
eHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CisKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGpp
dCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgTm9QdHJUYWcsICJMaW5rIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7CisgICAgcmV0dXJuIEZJ
TkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5lYXJDYWxsUHRyVGFnLCAiTGluayBjYWxsIHNsb3cg
cGF0aCB0aHVuayIpOwogfQogCiAvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25zLCB3ZSBvbmx5
IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBmb3IKQEAgLTE0
OSwxMSArMTU3LDEyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2FsbFRodW5rR2VuZXIK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQogewogICAgIENDYWxsSGVscGVycyBqaXQ7Ci0gICAgCi0gICAgc2xvd1BhdGhGb3Io
aml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbCk7Ci0gICAgCisKKyAgICBQdHJU
YWcgZXhwZWN0ZWRMaW5rZWRUYXJnZXRUYWcgPSBwdHJUYWcoT3BlcmF0aW9uTGlua1BvbHltb3Jw
aGljQ2FsbFB0clRhZywgdm0pOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxp
bmtQb2x5bW9ycGhpY0NhbGwsIGV4cGVjdGVkTGlua2VkVGFyZ2V0VGFnKTsKKwogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5B
TElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgIkxpbmsgcG9seW1vcnBoaWMgY2FsbCBz
bG93IHBhdGggdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwg
TmVhckNhbGxQdHJUYWcsICJMaW5rIHBvbHltb3JwaGljIGNhbGwgc2xvdyBwYXRoIHRodW5rIik7
CiB9CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIG1lZ2Ftb3Jw
aGljIHZpcnR1YWwgY2FsbCB2cy4gYSBzbG93CkBAIC0yMDAsNyArMjA5LDcgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxUaHVua0ZvcihWTQogICAgIGF1dG8gbm90SlNGdW5jdGlvbiA9
IGppdC5icmFuY2hJZk5vdFR5cGUoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb25UeXBlKTsKICAg
ICAKICAgICAvLyBOb3cgd2Uga25vdyB3ZSBoYXZlIGEgSlNGdW5jdGlvbi4KLSAgICAKKwogICAg
IGppdC5sb2FkUHRyKAogICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVn
VDAsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKICAgICAgICAgR1BSSW5mbzo6
cmVnVDQpOwpAQCAtMjIxLDI2ICsyMzAsMjggQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1
YWxUaHVua0ZvcihWTQogCiAgICAgLy8gTWFrZSBhIHRhaWwgY2FsbC4gVGhpcyB3aWxsIHJldHVy
biBiYWNrIHRvIEpJVCBjb2RlLgogICAgIEpTSW50ZXJmYWNlSklUOjpMYWJlbCBjYWxsQ29kZShq
aXQubGFiZWwoKSk7Ci0gICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVn
VDQpOworICAgIGVtaXRQb2ludGVyVmFsaWRhdGlvbihqaXQsIEdQUkluZm86OnJlZ1Q0LCBDb2Rl
RW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyk7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxD
YWxsKCkpIHsKICAgICAgICAgaml0LnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KEdQUkluZm86
OnJlZ1Q0KTsKICAgICB9Ci0gICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQsIE5vUHRyVGFnKTsK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUNCwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcpOwogCiAgICAgbm90SlNGdW5jdGlvbi5saW5rKCZqaXQpOwogICAgIHNsb3dDYXNlLmFwcGVu
ZChqaXQuYnJhbmNoSWZOb3RUeXBlKEdQUkluZm86OnJlZ1QwLCBJbnRlcm5hbEZ1bmN0aW9uVHlw
ZSkpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS0+Z2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoY2FsbExpbmtJbmZvLnNwZWNpYWxpemF0aW9u
S2luZCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOworICAgIHZvaWQq
IGV4ZWN1dGFibGVBZGRyZXNzID0gdm0tPmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5l
Rm9yKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSkucmV0YWdnZWQoQ29kZUVudHJ5
UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZykuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZUFk
ZHJlc3MpLCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgaml0Lmp1bXAoKS5saW5rVG8oY2FsbENvZGUs
ICZqaXQpOwogCiAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKICAgICAKICAgICAvLyBIZXJlIHdl
IGRvbid0IGtub3cgYW55dGhpbmcsIHNvIHJldmVydCB0byB0aGUgZnVsbCBzbG93IHBhdGguCi0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uVmlydHVhbENhbGwpOworICAgIFB0clRh
ZyBleHBlY3RlZExpbmtlZFRhcmdldFRhZyA9IHB0clRhZyhPcGVyYXRpb25WaXJ0dWFsQ2FsbFB0
clRhZywgdm0pOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvblZpcnR1YWxDYWxs
LCBleHBlY3RlZExpbmtlZFRhcmdldFRhZyk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVfQ09ERSgKLSAgICAg
ICAgcGF0Y2hCdWZmZXIsIE5vUHRyVGFnLAorICAgICAgICBwYXRjaEJ1ZmZlciwgTmVhckNhbGxQ
dHJUYWcsCiAgICAgICAgICJWaXJ0dWFsICVzIHNsb3cgcGF0aCB0aHVuayIsCiAgICAgICAgIGNh
bGxMaW5rSW5mby5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpSZWd1bGFyID8gImNhbGwiIDogY2Fs
bExpbmtJbmZvLmNhbGxNb2RlKCkgPT0gQ2FsbE1vZGU6OlRhaWwgPyAidGFpbCBjYWxsIiA6ICJj
b25zdHJ1Y3QiKTsKIH0KQEAgLTI5Myw5ICszMDQsOSBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09IFRodW5rRnVu
Y3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZF
eGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwogICAgICAgICBqaXQueG9yUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwg
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6
OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
biksIE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3Mo
SlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIENvZGVF
bnRyeVB0clRhZyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklU
OjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0
T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwo
SlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBJbnRlcm5hbEZ1
bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9yKGtpbmQpKSwgQ29kZUVudHJ5UHRyVGFn
KTsKIAogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwgSlNJ
bnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIApAQCAtMzE0LDcgKzMyNSw3IEBA
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICAgICAgaml0Lmxv
YWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplc2ksIEludGVybmFs
RnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBYODZSZWdpc3RlcnM6
OnI5KTsKICAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KE5hdGl2ZUNv
ZGVQb2lzb246OmtleSgpKSwgWDg2UmVnaXN0ZXJzOjplc2kpOwogICAgIGppdC54b3I2NChYODZS
ZWdpc3RlcnM6OmVzaSwgWDg2UmVnaXN0ZXJzOjpyOSk7Ci0gICAgaml0LmNhbGwoWDg2UmVnaXN0
ZXJzOjpyOSwgTm9QdHJUYWcpOworICAgIGppdC5jYWxsKFg4NlJlZ2lzdGVyczo6cjksIENvZGVF
bnRyeVB0clRhZyk7CiAKICNlbHNlCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYo
ZWN4LCBlZHgsIHI4LCByOSwgLi4uKTsKQEAgLTMyOSw5ICszNDAsOSBAQCBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaWYgKHRodW5rRnVuY3Rpb25UeXBlID09
IFRodW5rRnVuY3Rpb25UeXBlOjpKU0Z1bmN0aW9uKSB7CiAgICAgICAgIGppdC5sb2FkUHRyKEpT
SW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJlZ2lzdGVyczo6ZWR4LCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksIFg4NlJlZ2lzdGVyczo6cjkpOwogICAgICAgICBqaXQueG9yUHRy
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwg
WDg2UmVnaXN0ZXJzOjpyOSk7Ci0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRy
ZXNzKFg4NlJlZ2lzdGVyczo6cjksIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSwgTm9QdHJU
YWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhYODZSZWdpc3Rl
cnM6OnI5LCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiksIENvZGVFbnRyeVB0clRhZyk7CiAg
ICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKFg4NlJl
Z2lzdGVyczo6ZWR4LCBJbnRlcm5hbEZ1bmN0aW9uOjpvZmZzZXRPZk5hdGl2ZUZ1bmN0aW9uRm9y
KGtpbmQpKSwgTm9QdHJUYWcpOworICAgICAgICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRk
cmVzcyhYODZSZWdpc3RlcnM6OmVkeCwgSW50ZXJuYWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVG
dW5jdGlvbkZvcihraW5kKSksIENvZGVFbnRyeVB0clRhZyk7CiAKICAgICBqaXQuYWRkUHRyKEpT
SW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoNCAqIHNpemVvZihpbnQ2NF90KSksIEpTSW50ZXJm
YWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAjZW5kaWYKQEAgLTM1Myw3ICszNjQsNyBA
QCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgICAgIGppdC5s
b2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEFSTTY0UmVnaXN0ZXJzOjp4MSwgSW50ZXJu
YWxGdW5jdGlvbjo6b2Zmc2V0T2ZOYXRpdmVGdW5jdGlvbkZvcihraW5kKSksIEFSTTY0UmVnaXN0
ZXJzOjp4Mik7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW02NChOYXRp
dmVDb2RlUG9pc29uOjprZXkoKSksIEFSTTY0UmVnaXN0ZXJzOjp4MSk7CiAgICAgaml0LnhvcjY0
KEFSTTY0UmVnaXN0ZXJzOjp4MSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKLSAgICBqaXQuY2FsbChB
Uk02NFJlZ2lzdGVyczo6eDIsIE5vUHRyVGFnKTsKKyAgICBqaXQuY2FsbChBUk02NFJlZ2lzdGVy
czo6eDIsIENvZGVFbnRyeVB0clRhZyk7CiAKICNlbGlmIENQVShBUk0pIHx8IENQVShNSVBTKQog
I2lmIENQVShNSVBTKQpAQCAtMzY5LDkgKzM4MCw5IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbmF0aXZlRm9yR2UKICAgICBpZiAodGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5j
dGlvblR5cGU6OkpTRnVuY3Rpb24pIHsKICAgICAgICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMSwgSlNGdW5jdGlvbjo6b2Zm
c2V0T2ZFeGVjdXRhYmxlKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDIpOwogICAgICAgICBqaXQu
eG9yUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246Omtl
eSgpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyKTsKLSAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZh
Y2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9G
dW5jdGlvbiksIE5vUHRyVGFnKTsKKyAgICAgICAgaml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFk
ZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QyLCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvbiks
IENvZGVFbnRyeVB0clRhZyk7CiAgICAgfSBlbHNlCi0gICAgICAgIGppdC5jYWxsKEpTSW50ZXJm
YWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjphcmd1bWVudEdQUjEsIEludGVybmFsRnVu
Y3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2luZCkpLCBOb1B0clRhZyk7CisgICAg
ICAgIGppdC5jYWxsKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjphcmd1
bWVudEdQUjEsIEludGVybmFsRnVuY3Rpb246Om9mZnNldE9mTmF0aXZlRnVuY3Rpb25Gb3Ioa2lu
ZCkpLCBDb2RlRW50cnlQdHJUYWcpOwogCiAjaWYgQ1BVKE1JUFMpCiAgICAgLy8gUmVzdG9yZSBz
dGFjayBzcGFjZQpAQCAtNDI3LDcgKzQzOCw3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbmF0aXZlRm9yR2UKICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0pOwogCiAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsIE5vUHRyVGFnLCAiJXMgJXMlcyB0cmFtcG9s
aW5lIiwgdGh1bmtGdW5jdGlvblR5cGUgPT0gVGh1bmtGdW5jdGlvblR5cGU6OkpTRnVuY3Rpb24g
PyAibmF0aXZlIiA6ICJpbnRlcm5hbCIsIGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRoU2F2
ZWRUYWdzID8gIlRhaWwgV2l0aCBTYXZlZCBUYWdzICIgOiBlbnRyeVR5cGUgPT0gRW50ZXJWaWFK
dW1wV2l0aG91dFNhdmVkVGFncyA/ICJUYWlsIFdpdGhvdXQgU2F2ZWQgVGFncyAiIDogIiIsIHRv
Q1N0cmluZyhraW5kKS5kYXRhKCkpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVm
ZmVyLCBDb2RlRW50cnlQdHJUYWcsICIlcyAlcyVzIHRyYW1wb2xpbmUiLCB0aHVua0Z1bmN0aW9u
VHlwZSA9PSBUaHVua0Z1bmN0aW9uVHlwZTo6SlNGdW5jdGlvbiA/ICJuYXRpdmUiIDogImludGVy
bmFsIiwgZW50cnlUeXBlID09IEVudGVyVmlhSnVtcFdpdGhTYXZlZFRhZ3MgPyAiVGFpbCBXaXRo
IFNhdmVkIFRhZ3MgIiA6IGVudHJ5VHlwZSA9PSBFbnRlclZpYUp1bXBXaXRob3V0U2F2ZWRUYWdz
ID8gIlRhaWwgV2l0aG91dCBTYXZlZCBUYWdzICIgOiAiIiwgdG9DU3RyaW5nKGtpbmQpLmRhdGEo
KSk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVDYWxsR2VuZXJhdG9yKFZNKiB2
bSkKQEAgLTQ3NSw2ICs0ODYsNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdl
bmVyYXRvCiAjICBpZiBDUFUoWDg2XzY0KQogICAgIGppdC5wb3AoSlNJbnRlcmZhY2VKSVQ6OnJl
Z1Q0KTsKICMgIGVuZGlmCisgICAgaml0LnRhZ1JldHVybkFkZHJlc3MoKTsKICAgICBqaXQubW92
ZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTSW50ZXJmYWNlSklUOjpyZWdU
Myk7CiAgICAgaml0LmxvYWQzMihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJ
VDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzaXpl
b2YoUmVnaXN0ZXIpKSwgSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMik7CiAgICAgaml0LmFk
ZDMyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMpLCBKU0ludGVyZmFjZUpJVDo6YXJndW1lbnRHUFIyKTsKQEAgLTUwMSw3ICs1MTMs
OSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cEdlbmVyYXRvCiAgICAgaml0Lm1v
dmUoSlNJbnRlcmZhY2VKSVQ6OmFyZ3VtZW50R1BSMCwgZXh0cmFUZW1wKTsKICAgICBqaXQubHNo
aWZ0NjQoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMigzKSwgZXh0cmFUZW1wKTsKICAgICBq
aXQuYWRkUHRyKGV4dHJhVGVtcCwgSlNJbnRlcmZhY2VKSVQ6OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICBqaXQudW50YWdSZXR1cm5BZGRyZXNzKCk7CiAgICAgaml0LmFkZFB0cihleHRyYVRlbXAs
IEpTSW50ZXJmYWNlSklUOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnRhZ1JldHVy
bkFkZHJlc3MoKTsKIAogICAgIC8vIE1vdmUgY3VycmVudCBmcmFtZSBkb3duIGFyZ3VtZW50R1BS
MCBudW1iZXIgb2Ygc2xvdHMKICAgICBKU0ludGVyZmFjZUpJVDo6TGFiZWwgY29weUxvb3Aoaml0
LmxhYmVsKCkpOwpAQCAtNTI0LDcgKzUzOCw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0
eUZpeHVwR2VuZXJhdG8KICAgICBqaXQucHVzaChKU0ludGVyZmFjZUpJVDo6cmVnVDQpOwogIyAg
ZW5kaWYKICAgICBqaXQucmV0KCk7Ci0jZWxzZQorI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgc2Vj
dGlvbiBhYm92ZSwgVVNFKEpTVkFMVUUzMl82NCkgc2VjdGlvbiBiZWxvdy4KICMgIGlmIENQVShY
ODYpCiAgICAgaml0LnBvcChKU0ludGVyZmFjZUpJVDo6cmVnVDQpOwogIyAgZW5kaWYKQEAgLTU4
MSwxMCArNTk1LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcml0eUZpeHVwR2VuZXJhdG8K
ICAgICBqaXQucHVzaChKU0ludGVyZmFjZUpJVDo6cmVnVDQpOwogIyAgZW5kaWYKICAgICBqaXQu
cmV0KCk7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFbmQgb2YgVVNFKEpTVkFMVUUzMl82NCkgc2VjdGlv
bi4KIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQpOwot
ICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCBOb1B0clRhZywgImZpeHVwIGFy
aXR5Iik7CisgICAgUHRyVGFnIHRhZyA9IHB0clRhZyhKSVRUaHVua1B0clRhZywgdm0pOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCB0YWcsICJmaXh1cCBhcml0eSIpOwog
fQogCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdW5yZWFjaGFibGVHZW5lcmF0b3IoVk0qIHZtKQpA
QCAtNTk0LDcgKzYwOSw3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB1bnJlYWNoYWJsZUdlbmVy
YXQKICAgICBqaXQuYnJlYWtwb2ludCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsIE5vUHRyVGFnLCAidW5yZWFjaGFibGUgdGh1bmsiKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgTmVhckNhbGxQdHJUYWcsICJ1bnJlYWNoYWJsZSB0aHVuayIpOwog
fQogCiBzdGF0aWMgdm9pZCBzdHJpbmdDaGFyTG9hZChTcGVjaWFsaXplZFRodW5rSklUJiBqaXQs
IFZNKiB2bSkKQEAgLTExODEsMTYgKzExOTYsMTYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJv
dW5kVGhpc05vQXJnc0Z1bgogICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpJVENvZGVQb2lzb246OmtleSgpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgIGppdC54b3I2NChH
UFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwogI2VuZGlmCi0gICAgZW1pdFBvaW50ZXJW
YWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDApOwotICAgIGppdC5jYWxsKEdQUkluZm86OnJl
Z1QwLCBOb1B0clRhZyk7Ci0gICAgCisgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BS
SW5mbzo6cmVnVDAsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKTsKKyAgICBqaXQuY2Fs
bChHUFJJbmZvOjpyZWdUMCwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpOworCiAgICAg
aml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgaml0LnJldCgpOwogICAgIAogICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCk7CiAgICAgbGlua0J1ZmZl
ci5saW5rKG5vQ29kZSwgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVU
YWlsQ2FsbFdpdGhvdXRTYXZlZFRhZ3Modm0pKSk7CiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
Ci0gICAgICAgIGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiU3BlY2lhbGl6ZWQgdGh1bmsgZm9yIGJv
dW5kIGZ1bmN0aW9uIGNhbGxzIHdpdGggbm8gYXJndW1lbnRzIik7CisgICAgICAgIGxpbmtCdWZm
ZXIsIENvZGVFbnRyeVB0clRhZywgIlNwZWNpYWxpemVkIHRodW5rIGZvciBib3VuZCBmdW5jdGlv
biBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAy
MzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsMzUgKzYzLDMwIEBAIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgICAg
IERhdGE6OnNfb3Bjb2RlTWFwW2ldID0gdGFnQ29kZVB0cihEYXRhOjpzX29wY29kZU1hcFtpXSwg
dGFnKTsKICAgICB9CiAKLSAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGZvciAo
aW50IGkgPSBOVU1CRVJfT0ZfQllURUNPREVfSURTOyBpIDwgTlVNQkVSX09GX0JZVEVDT0RFX0lE
UyArIE5VTUJFUl9PRl9CWVRFQ09ERV9IRUxQRVJfSURTOyArK2kpCi0gICAgICAgICAgICBEYXRh
OjpzX29wY29kZU1hcFtpXSA9IHRhZ0NvZGVQdHIoRGF0YTo6c19vcGNvZGVNYXBbaV0sIHB0clRh
ZyhCeXRlY29kZUhlbHBlclB0clRhZywgaSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBQdHJUYWcgdGFnc0Zvck9wY29kZVtdID0gewotICAgICAgICAgICAgQ29kZUVudHJ5
UHRyVGFnLCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCi0gICAgICAgICAgICBDb2RlRW50cnlQ
dHJUYWcsIC8vIGxsaW50X2V2YWxfcHJvbG9ndWUKLSAgICAgICAgICAgIENvZGVFbnRyeVB0clRh
ZywgLy8gbGxpbnRfbW9kdWxlX3Byb2dyYW1fcHJvbG9ndWUKLSAgICAgICAgICAgIENvZGVFbnRy
eVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKLSAgICAgICAgICAg
IENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1
ZQotICAgICAgICAgICAgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcsIC8vIGxsaW50X2Z1
bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrCi0gICAgICAgICAgICBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZywgLy8gbGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVj
awotICAgICAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9nZW5lcmljX3JldHVybl9w
b2ludAotICAgICAgICAgICAgQnl0ZWNvZGVQdHJUYWcsIC8vIGxsaW50X3Rocm93X2Zyb21fc2xv
d19wYXRoX3RyYW1wb2xpbmUKLSAgICAgICAgICAgIEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcsIC8v
IGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgICAgIE5hdGl2ZUNv
ZGVQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jYWxsX3RyYW1wb2xpbmUKLSAgICAgICAgICAgIE5h
dGl2ZUNvZGVQdHJUYWcsIC8vIGxsaW50X25hdGl2ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZQotICAg
ICAgICAgICAgTmF0aXZlQ29kZVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rpb25fY2Fs
bF90cmFtcG9saW5lCi0gICAgICAgICAgICBOYXRpdmVDb2RlUHRyVGFnLCAvLyBsbGludF9pbnRl
cm5hbF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQotICAgICAgICAgICAgRXhjZXB0aW9u
SGFuZGxlclB0clRhZywgLy8gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KLSAgICAgICAgfTsKLQot
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZih0YWdzRm9yT3Bjb2RlKSAvIHNpemVvZih0YWdz
Rm9yT3Bjb2RlWzBdKSA9PSBOVU1CRVJfT0ZfQllURUNPREVfSEVMUEVSX0lEUywgIiIpOwotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obGxpbnRfcHJvZ3JhbV9w
cm9sb2d1ZSkgPT0gTlVNQkVSX09GX0JZVEVDT0RFX0lEUywgIiIpOwotCi0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX0JZVEVDT0RFX0hFTFBFUl9JRFM7ICsraSkgewotICAg
ICAgICAgICAgaW50IG9wY29kZUlEID0gaSArIE5VTUJFUl9PRl9CWVRFQ09ERV9JRFM7Ci0gICAg
ICAgICAgICBEYXRhOjpzX29wY29kZU1hcFtvcGNvZGVJRF0gPSB0YWdDb2RlUHRyKERhdGE6OnNf
b3Bjb2RlTWFwW29wY29kZUlEXSwgdGFnc0Zvck9wY29kZVtpXSk7Ci0gICAgICAgIH0KKyAgICBz
dGF0aWMgY29uc3QgUHRyVGFnIHRhZ3NGb3JPcGNvZGVbXSA9IHsKKyAgICAgICAgQ29kZUVudHJ5
UHRyVGFnLCAvLyBsbGludF9wcm9ncmFtX3Byb2xvZ3VlCisgICAgICAgIENvZGVFbnRyeVB0clRh
ZywgLy8gbGxpbnRfZXZhbF9wcm9sb2d1ZQorICAgICAgICBDb2RlRW50cnlQdHJUYWcsIC8vIGxs
aW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8g
bGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUKKyAgICAgICAgQ29kZUVudHJ5UHRyVGFn
LCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlCisgICAgICAgIENvZGVF
bnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnLCAvLyBsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0
eV9jaGVjaworICAgICAgICBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZywgLy8gbGxpbnRf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjaworICAgICAgICBDb2RlRW50cnlQdHJU
YWcsIC8vIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50CisgICAgICAgIEJ5dGVjb2RlUHRyVGFn
LCAvLyBsbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lCisgICAgICAgIEV4Y2Vw
dGlvbkhhbmRsZXJQdHJUYWcsIC8vIGxsaW50X3Rocm93X2R1cmluZ19jYWxsX3RyYW1wb2xpbmUK
KyAgICAgICAgQ29kZUVudHJ5UHRyVGFnLCAvLyBsbGludF9uYXRpdmVfY2FsbF90cmFtcG9saW5l
CisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfbmF0aXZlX2NvbnN0cnVjdF90cmFt
cG9saW5lCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfaW50ZXJuYWxfZnVuY3Rp
b25fY2FsbF90cmFtcG9saW5lCisgICAgICAgIENvZGVFbnRyeVB0clRhZywgLy8gbGxpbnRfaW50
ZXJuYWxfZnVuY3Rpb25fY29uc3RydWN0X3RyYW1wb2xpbmUKKyAgICAgICAgRXhjZXB0aW9uSGFu
ZGxlclB0clRhZywgLy8gaGFuZGxlVW5jYXVnaHRFeGNlcHRpb24KKyAgICB9OworCisgICAgc3Rh
dGljX2Fzc2VydChzaXplb2YodGFnc0Zvck9wY29kZSkgLyBzaXplb2YodGFnc0Zvck9wY29kZVsw
XSkgPT0gTlVNQkVSX09GX0JZVEVDT0RFX0hFTFBFUl9JRFMsICIiKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSkgPT0gTlVN
QkVSX09GX0JZVEVDT0RFX0lEUywgIiIpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1C
RVJfT0ZfQllURUNPREVfSEVMUEVSX0lEUzsgKytpKSB7CisgICAgICAgIGludCBvcGNvZGVJRCA9
IGkgKyBOVU1CRVJfT0ZfQllURUNPREVfSURTOworICAgICAgICBEYXRhOjpzX29wY29kZU1hcFtv
cGNvZGVJRF0gPSB0YWdDb2RlUHRyKERhdGE6OnNfb3Bjb2RlTWFwW29wY29kZUlEXSwgdGFnc0Zv
ck9wY29kZVtpXSk7CiAgICAgfQogCiAgICAgdm9pZCogaGFuZGxlciA9IExMSW50OjpnZXRDb2Rl
UHRyKGxsaW50X3Rocm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw2ICs4NSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCogZ2V0Q29kZVB0cihPcGNvZGVJRCAKIH0K
IAogI2lmIEVOQUJMRShKSVQpCisKIEFMV0FZU19JTkxJTkUgTExJbnRDb2RlIGdldENvZGVGdW5j
dGlvblB0cihPcGNvZGVJRCBjb2RlSWQpCiB7CiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TExJbnRDb2RlPihnZXRDb2RlUHRyKGNvZGVJZCkpOwpAQCAtOTMsNyArOTQsNyBAQCBBTFdBWVNf
SU5MSU5FIExMSW50Q29kZSBnZXRDb2RlRnVuY3Rpb25QCiAKIEFMV0FZU19JTkxJTkUgdm9pZCog
Z2V0Q29kZVB0cihKU0M6OkVuY29kZWRKU1ZhbHVlIGdsdWVIZWxwZXIoKSkKIHsKLSAgICByZXR1
cm4gV1RGX1BSRVBBUkVfRlVOQ1RJT05fUE9JTlRFUl9GT1JfRVhFQ1VUSU9OKGdsdWVIZWxwZXIp
OworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGdsdWVIZWxwZXIpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEVudHJ5cG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludEVudHJ5cG9pbnQuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC03MSw0NSArNzEsNTEgQEAgc3RhdGljIHZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZt
LCBDbwogewogI2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKFZNOjpjYW5Vc2VKSVQoKSkgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiA9IHZtLmdldENUSVN0dWIoZXZhbEVu
dHJ5VGh1bmtHZW5lcmF0b3IpOwogICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAg
ICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50
cnlUaHVua0dlbmVyYXRvciksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSkpOworICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2Rl
KGNvZGVSZWYsIGNvZGVSZWYucmV0YWdnZWRDb2RlKENvZGVFbnRyeVB0clRhZywgQ29kZUVudHJ5
V2l0aEFyaXR5Q2hlY2tQdHJUYWcpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICBVTlVTRURf
UEFSQU0odm0pOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSk7CiAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAotICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJ
VENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZh
bF9wcm9sb2d1ZSksIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSkpOworICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwg
Y29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlD
aGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoVk06OmNhblVzZUpJVCgpKSB7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmID0gdm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlU
aHVua0dlbmVyYXRvcik7CiAgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKLSAgICAgICAg
ICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRy
eVRodW5rR2VuZXJhdG9yKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspKSk7CisgICAgICAgICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUo
Y29kZVJlZiwgY29kZVJlZi5yZXRhZ2dlZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlX
aXRoQXJpdHlDaGVja1B0clRhZyksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIFVOVVNFRF9Q
QVJBTSh2bSk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKTsK
ICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCi0gICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0
SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9w
cm9ncmFtX3Byb2xvZ3VlKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bmspKSk7CisgICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2Rl
UmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhB
cml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKIH0KIAogc3Rh
dGljIHZvaWQgc2V0TW9kdWxlUHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKIHsKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChWTTo6Y2FuVXNlSklUKCkpIHsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGVSZWYgPSB2bS5nZXRDVElTdHViKG1v
ZHVsZVByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAotICAgICAgICAgICAgYWRvcHRSZWYoKm5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENU
SVN0dWIobW9kdWxlUHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIoKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpKTsKKyAgICAgICAgICAgIGFkb3B0
UmVmKCpuZXcgRGlyZWN0SklUQ29kZShjb2RlUmVmLCBjb2RlUmVmLnJldGFnZ2VkQ29kZShDb2Rl
RW50cnlQdHJUYWcsIENvZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCiAgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZVJlZiA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxs
aW50X21vZHVsZV9wcm9ncmFtX3Byb2xvZ3VlKTsKICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUo
Ci0gICAgICAgIGFkb3B0UmVmKCpuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9tb2R1bGVfcHJvZ3JhbV9wcm9sb2d1ZSksIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cigpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSkpOworICAg
ICAgICBhZG9wdFJlZigqbmV3IERpcmVjdEpJVENvZGUoY29kZVJlZiwgY29kZVJlZi5yZXRhZ2dl
ZENvZGUoQ29kZUVudHJ5UHRyVGFnLCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZyksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKSk7CiB9CiAKIHZvaWQgc2V0RW50cnlwb2ludChWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDAxLDEyICsxNDAxLDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxs
KEV4ZWMKICAgICAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsKICAgICAg
ICAgICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywg
aW50ZXJuYWxGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0U2Vl
bkNhbGxlZS5zZXQodm0sIGNhbGxlckNvZGVCbG9jaywgaW50ZXJuYWxGdW5jdGlvbik7Ci0gICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7Ci0g
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsUHRyVGFnID0gTmF0aXZlQ29kZVB0clRh
ZzsKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29k
ZVB0ci5yZXRhZ2dlZChDb2RlRW50cnlQdHJUYWcsIExMSW50Q2FsbElDUHRyVGFnKTsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICAgICAgICAgIFBvaXNvbmVkTWFz
bVB0cjo6YXNzZXJ0SXNOb3RQb2lzb25lZChjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwgY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpLCBOYXRpdmVDb2RlUHRyVGFnKTsKKyAgICAgICAgICAgIExMSU5U
X0NBTExfUkVUVVJOKGV4ZWMsIGV4ZWNDYWxsZWUsIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgQ29kZUVudHJ5UHRyVGFnKTsKICAgICAgICAgfQogICAgICAgICB0aHJvd1Njb3BlLnJlbGVh
c2UoKTsKICAgICAgICAgcmV0dXJuIGhhbmRsZUhvc3RDYWxsKGV4ZWNDYWxsZWUsIHBjLCBjYWxs
ZWVBc1ZhbHVlLCBraW5kKTsKQEAgLTE0MjAsNyArMTQyMCw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IDA7CiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgICAg
ICBjYWxsUHRyVGFnID0gTmF0aXZlQ29kZVB0clRhZzsKKyAgICAgICAgY2FsbFB0clRhZyA9IENv
ZGVFbnRyeVdpdGhBcml0eUNoZWNrUHRyVGFnOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7CiAKQEAgLTE0NDQsNiArMTQ0NCw3IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgfQogICAgICAgICBjb2Rl
UHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIGFyaXR5KTsKICAg
ICB9CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
Y2FsbFB0clRhZyk7CiAKICAgICBBU1NFUlQoISFjb2RlUHRyKTsKICAgICAKQEAgLTE0NTYsMTMg
KzE0NTcsMTMgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAg
ICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5j
YWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5r
SW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7Ci0g
ICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBjb2RlUHRyOworICAgICAg
ICBjYWxsTGlua0luZm8tPm1hY2hpbmVDb2RlVGFyZ2V0ID0gY29kZVB0ci5yZXRhZ2dlZChjYWxs
UHRyVGFnLCBMTEludENhbGxJQ1B0clRhZyk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxQ
dHJUYWcgIT0gTm9QdHJUYWcpOwotICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxQdHJUYWcgPSBj
YWxsUHRyVGFnOwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICAgICAgY29kZUJsb2Nr
LT5saW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CiAgICAgfQogCisgICAgYXNz
ZXJ0SXNUYWdnZWRXaXRoKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgY2FsbFB0clRhZyk7
CiAgICAgUG9pc29uZWRNYXNtUHRyOjphc3NlcnRJc05vdFBvaXNvbmVkKGNvZGVQdHIuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CiAgICAgTExJTlRfQ0FMTF9SRVRVUk4oZXhlYywgZXhlY0NhbGxlZSwg
Y29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCBjYWxsUHRyVGFnKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkocmV2aXNpb24gMjMwMTI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50VGh1bmtzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdl
bmVyYXRlVGh1CiAgICAgLy8gRklYTUU6IHRoZXJlJ3MgcHJvYmFibHkgYSBiZXR0ZXIgd2F5IHRv
IGRvIGl0IG9uIFg4NiwgYnV0IEknbSBub3Qgc3VyZSBJIGNhcmUuCiAgICAgTExJbnRDb2RlIHRh
cmdldCA9IExMSW50OjpnZXRDb2RlRnVuY3Rpb25QdHIob3Bjb2RlSUQpOwogICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0
KSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgaml0Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6
OnJlZ1QwLCBwdHJUYWcoQnl0ZWNvZGVIZWxwZXJQdHJUYWcsIG9wY29kZUlEKSk7CisgICAgaml0
Lmp1bXAoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwLCB0aHVua1RhZyk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKICAgICByZXR1cm4gRklOQUxJWkVf
Q09ERShwYXRjaEJ1ZmZlciwgdGh1bmtUYWcsICJMTEludCAlcyBwcm9sb2d1ZSB0aHVuayIsIHRo
dW5rS2luZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMjMwMTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgbWFjcm8gY2FsbFNsb3dQYXRoKHNsb3dQYXRo
KQogICAgIG1vdmUgcjAsIFBDCiBlbmQKIAotbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsLCB1bnVz
ZWQxLCB1bnVzZWQyKQorbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIGZ1bmN0aW9uUHJv
bG9ndWUoKQogICAgIHB1c2hDYWxsZWVTYXZlcygpCiAKQEAgLTE5OTUsOCArMTk5NSw4IEBAIG1h
Y3JvIGRvQ2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwpCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVu
dENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAgICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsg
VGFnT2Zmc2V0W3QzXQogICAgIG1vdmUgdDMsIHNwCi0gICAgcHJlcGFyZUNhbGwoTExJbnRDYWxs
TGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgbWFjcm8gKGNhbGxQ
dHJUYWcpIGVuZCkKLSAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1h
Y2hpbmVDb2RlVGFyZ2V0W3QxXSwgTm9QdHJUYWcpCisgICAgcHJlcGFyZUNhbGwoTExJbnRDYWxs
TGlua0luZm86Om1hY2hpbmVDb2RlVGFyZ2V0W3QxXSwgdDIsIHQzLCB0NCwgTExJbnRDYWxsSUNQ
dHJUYWcpCisgICAgY2FsbFRhcmdldEZ1bmN0aW9uKExMSW50Q2FsbExpbmtJbmZvOjptYWNoaW5l
Q29kZVRhcmdldFt0MV0sIExMSW50Q2FsbElDUHRyVGFnKQogCiAub3BDYWxsU2xvdzoKICAgICBz
bG93UGF0aEZvckNhbGwoc2xvd1BhdGgsIHByZXBhcmVDYWxsKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgbWFjcm8g
Y0NhbGw0KGZ1bmN0aW9uKQogICAgIGVuZAogZW5kCiAKLW1hY3JvIGRvVk1FbnRyeShtYWtlQ2Fs
bCwgY2FsbFRhZywgY2FsbFdpdGhBcml0eUNoZWNrVGFnKQorbWFjcm8gZG9WTUVudHJ5KG1ha2VD
YWxsKQogICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHB1c2hDYWxsZWVTYXZlcygpCiAKQEAg
LTIyNSwxNiArMjI1LDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsLCBjYWxsVGFnLCBjYWxs
VwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoZXh0cmFUZW1wUmVnLCAweGJhZDBk
YzAyKQogCi0gICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAgICAgICAgYnRibnogUHJvdG9DYWxs
RnJhbWU6Omhhc0FyaXR5TWlzbWF0Y2hbcHJvdG9DYWxsRnJhbWVdLCAuZG9DYWxsV2l0aEFyaXR5
Q2hlY2sKLSAgICAgICAgbW92ZSBjYWxsVGFnLCB0MgotICAgICAgICBqbXAgLnJlYWR5VG9DYWxs
Ci0gICAgLmRvQ2FsbFdpdGhBcml0eUNoZWNrOgotICAgICAgICBtb3ZlIGNhbGxXaXRoQXJpdHlD
aGVja1RhZywgdDIKLSAgICAucmVhZHlUb0NhbGw6Ci0gICAgZW5kCi0KLSAgICBtYWtlQ2FsbChl
bnRyeSwgdDMsIHQyKQorICAgIG1ha2VDYWxsKGVudHJ5LCB0MykKIAogICAgICMgV2UgbWF5IGhh
dmUganVzdCBtYWRlIGEgY2FsbCBpbnRvIGEgSlMgZnVuY3Rpb24sIHNvIHdlIGNhbid0IHJlbHkg
b24gc3AKICAgICAjIGZvciBhbnl0aGluZyBidXQgdGhlIGZhY3QgdGhhdCBvdXIgb3duIGxvY2Fs
cyAoaWUgdGhlIFZNRW50cnlSZWNvcmQpIGFyZQpAQCAtMjU4LDE4ICsyNDksMTggQEAgbWFjcm8g
ZG9WTUVudHJ5KG1ha2VDYWxsLCBjYWxsVGFnLCBjYWxsVwogZW5kCiAKIAotbWFjcm8gbWFrZUph
dmFTY3JpcHRDYWxsKGVudHJ5LCB0ZW1wLCBjYWxsVGFnKQorbWFjcm8gbWFrZUphdmFTY3JpcHRD
YWxsKGVudHJ5LCB0ZW1wKQogICAgIGFkZHAgMTYsIHNwCiAgICAgaWYgQ19MT09QCiAgICAgICAg
IGNsb29wQ2FsbEpTRnVuY3Rpb24gZW50cnkKICAgICBlbHNlCi0gICAgICAgIGNhbGwgZW50cnks
IGNhbGxUYWcKKyAgICAgICAgY2FsbCBlbnRyeSwgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJU
YWcKICAgICBlbmQKICAgICBzdWJwIDE2LCBzcAogZW5kCiAKIAotbWFjcm8gbWFrZUhvc3RGdW5j
dGlvbkNhbGwoZW50cnksIHRlbXAsIGNhbGxUYWcpCittYWNybyBtYWtlSG9zdEZ1bmN0aW9uQ2Fs
bChlbnRyeSwgdGVtcCkKICAgICBtb3ZlIGVudHJ5LCB0ZW1wCiAgICAgc3RvcmVwIGNmciwgW3Nw
XQogICAgIG1vdmUgc3AsIGEwCkBAIC0yNzksMTAgKzI3MCwxMCBAQCBtYWNybyBtYWtlSG9zdEZ1
bmN0aW9uQ2FsbChlbnRyeSwgdGVtcCwgCiAgICAgZWxzaWYgWDg2XzY0X1dJTgogICAgICAgICAj
IFdlIG5lZWQgdG8gYWxsb2NhdGUgMzIgYnl0ZXMgb24gdGhlIHN0YWNrIGZvciB0aGUgc2hhZG93
IHNwYWNlLgogICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICBjYWxsIHRlbXAsIGNhbGxUYWcK
KyAgICAgICAgY2FsbCB0ZW1wLCBDb2RlRW50cnlQdHJUYWcKICAgICAgICAgYWRkcCAzMiwgc3AK
ICAgICBlbHNlCi0gICAgICAgIGNhbGwgdGVtcCwgY2FsbFRhZworICAgICAgICBjYWxsIHRlbXAs
IENvZGVFbnRyeVB0clRhZwogICAgIGVuZAogZW5kCiAKQEAgLTIwNjAsMjUgKzIwNTEsMTEgQEAg
bWFjcm8gZG9DYWxsKHNsb3dQYXRoLCBwcmVwYXJlQ2FsbCkKICAgICBpZiBQT0lTT04KICAgICAg
ICAgbG9hZHAgX2dfSklUQ29kZVBvaXNvbiwgdDIKICAgICAgICAgeG9ycCBMTEludENhbGxMaW5r
SW5mbzo6bWFjaGluZUNvZGVUYXJnZXRbdDFdLCB0MgotICAgICAgICBwcmVwYXJlQ2FsbCh0Miwg
dDEsIHQzLCB0NCwgbWFjcm8gKGNhbGxQdHJUYWcpCi0gICAgICAgICAgICBpZiBQT0lOVEVSX1BS
T0ZJTElORwotICAgICAgICAgICAgICAgIGxvYWRwIExMSW50Q2FsbExpbmtJbmZvOjpjYWxsUHRy
VGFnW3Q1XSwgY2FsbFB0clRhZwotICAgICAgICAgICAgZW5kCi0gICAgICAgIGVuZCkKLSAgICAg
ICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAgICAgICAgICAgIGxvYWRwIExMSW50Q2FsbExpbmtJ
bmZvOjpjYWxsUHRyVGFnW3Q1XSwgdDMKLSAgICAgICAgZW5kCi0gICAgICAgIGNhbGxUYXJnZXRG
dW5jdGlvbih0MiwgdDMpCisgICAgICAgIHByZXBhcmVDYWxsKHQyLCB0MSwgdDMsIHQ0LCBMTElu
dENhbGxJQ1B0clRhZykKKyAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHQyLCBMTEludENhbGxJ
Q1B0clRhZykKICAgICBlbHNlCi0gICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJbmZv
OjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIG1hY3JvIChjYWxsUHRyVGFnKQot
ICAgICAgICAgICAgaWYgUE9JTlRFUl9QUk9GSUxJTkcKLSAgICAgICAgICAgICAgICBsb2FkcCBM
TEludENhbGxMaW5rSW5mbzo6Y2FsbFB0clRhZ1t0NV0sIGNhbGxQdHJUYWcKLSAgICAgICAgICAg
IGVuZAotICAgICAgICBlbmQpCi0gICAgICAgIGlmIFBPSU5URVJfUFJPRklMSU5HCi0gICAgICAg
ICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbFB0clRhZ1t0NV0sIHQzCi0gICAgICAg
IGVuZAotICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hp
bmVDb2RlVGFyZ2V0W3QxXSwgdDMpCisgICAgICAgIHByZXBhcmVDYWxsKExMSW50Q2FsbExpbmtJ
bmZvOjptYWNoaW5lQ29kZVRhcmdldFt0MV0sIHQyLCB0MywgdDQsIExMSW50Q2FsbElDUHRyVGFn
KQorICAgICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24oTExJbnRDYWxsTGlua0luZm86Om1hY2hpbmVD
b2RlVGFyZ2V0W3QxXSwgTExJbnRDYWxsSUNQdHJUYWcpCiAgICAgZW5kCiAKIC5vcENhbGxTbG93
OgpAQCAtMjIwOSwxMiArMjE4NiwxMiBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVj
dXRhYmxlT2ZmCiAgICAgZWxzZQogICAgICAgICBpZiBYODZfNjRfV0lOCiAgICAgICAgICAgICBz
dWJwIDMyLCBzcAotICAgICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlvblt0
MV0sIE5hdGl2ZUNvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRv
RnVuY3Rpb25bdDFdLCBDb2RlRW50cnlQdHJUYWcKICAgICAgICAgICAgIGFkZHAgMzIsIHNwCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGxvYWRwIF9nX05hdGl2ZUNvZGVQb2lzb24sIHQyCiAg
ICAgICAgICAgICB4b3JwIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXSwgdDIKLSAgICAg
ICAgICAgIGNhbGwgdDIsIE5hdGl2ZUNvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwgdDIsIENv
ZGVFbnRyeVB0clRhZwogICAgICAgICBlbmQKICAgICBlbmQKIApAQCAtMjI1MiwxMiArMjIyOSwx
MiBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgZWxzZQog
ICAgICAgICBpZiBYODZfNjRfV0lOCiAgICAgICAgICAgICBzdWJwIDMyLCBzcAotICAgICAgICAg
ICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgTmF0aXZlQ29kZVB0clRhZworICAgICAgICAg
ICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgQ29kZUVudHJ5UHRyVGFnCiAgICAgICAgICAg
ICBhZGRwIDMyLCBzcAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsb2FkcCBfZ19OYXRpdmVD
b2RlUG9pc29uLCB0MgogICAgICAgICAgICAgeG9ycCBvZmZzZXRPZkZ1bmN0aW9uW3QxXSwgdDIK
LSAgICAgICAgICAgIGNhbGwgdDIsIE5hdGl2ZUNvZGVQdHJUYWcKKyAgICAgICAgICAgIGNhbGwg
dDIsIENvZGVFbnRyeVB0clRhZwogICAgICAgICBlbmQKICAgICBlbmQKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgY29uc3Qg
Qnl0ZWNvZGVQdHJUYWcgPSBjb25zdGV4cHIgQnl0ZWNvZAogY29uc3QgQ29kZUVudHJ5UHRyVGFn
ID0gY29uc3RleHByIENvZGVFbnRyeVB0clRhZwogY29uc3QgQ29kZUVudHJ5V2l0aEFyaXR5Q2hl
Y2tQdHJUYWcgPSBjb25zdGV4cHIgQ29kZUVudHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcKIGNvbnN0
IEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcgPSBjb25zdGV4cHIgRXhjZXB0aW9uSGFuZGxlclB0clRh
ZwotY29uc3QgTmF0aXZlQ29kZVB0clRhZyA9IGNvbnN0ZXhwciBOYXRpdmVDb2RlUHRyVGFnCitj
b25zdCBMTEludENhbGxJQ1B0clRhZyA9IGNvbnN0ZXhwciBMTEludENhbGxJQ1B0clRhZwogY29u
c3QgTm9QdHJUYWcgPSBjb25zdGV4cHIgTm9QdHJUYWcKIGNvbnN0IFNsb3dQYXRoUHRyVGFnID0g
Y29uc3RleHByIFNsb3dQYXRoUHRyVGFnCiAKQEAgLTg1MywxMiArODUzLDEyIEBAIG1hY3JvIGNh
bGxUYXJnZXRGdW5jdGlvbihjYWxsZWUsIGNhbGxQdHIKICAgICBkaXNwYXRjaEFmdGVyQ2FsbCgp
CiBlbmQKIAotbWFjcm8gcHJlcGFyZUZvclJlZ3VsYXJDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAy
LCB0ZW1wMywgcHJlcGFyZUNhbGxQdHJUYWcpCittYWNybyBwcmVwYXJlRm9yUmVndWxhckNhbGwo
Y2FsbGVlLCB0ZW1wMSwgdGVtcDIsIHRlbXAzLCBjYWxsUHRyVGFnKQogICAgIGFkZHAgQ2FsbGVy
RnJhbWVBbmRQQ1NpemUsIHNwCiBlbmQKIAogIyBzcCBwb2ludHMgdG8gdGhlIG5ldyBmcmFtZQot
bWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwgdGVtcDEsIHRlbXAyLCB0ZW1wMywgcHJl
cGFyZUNhbGxQdHJUYWcpCittYWNybyBwcmVwYXJlRm9yVGFpbENhbGwoY2FsbGVlLCB0ZW1wMSwg
dGVtcDIsIHRlbXAzLCBjYWxsUHRyVGFnKQogICAgIHJlc3RvcmVDYWxsZWVTYXZlc1VzZWRCeUxM
SW50KCkKIAogICAgIGxvYWRpIFBheWxvYWRPZmZzZXQgKyBBcmd1bWVudENvdW50W2Nmcl0sIHRl
bXAyCkBAIC05MDcsOSArOTA3LDggQEAgbWFjcm8gcHJlcGFyZUZvclRhaWxDYWxsKGNhbGxlZSwg
dGVtcDEsIAogICAgIHN0b3JlcCB0ZW1wMywgW3RlbXAxLCB0ZW1wMiwgMV0KICAgICBidGlueiB0
ZW1wMiwgLmNvcHlMb29wCiAKLSAgICBwcmVwYXJlQ2FsbFB0clRhZyh0ZW1wMikKICAgICBtb3Zl
IHRlbXAxLCBzcAotICAgIGptcCBjYWxsZWUsIHRlbXAyCisgICAgam1wIGNhbGxlZSwgY2FsbFB0
clRhZwogZW5kCiAKIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChzbG93UGF0aCwgcHJlcGFyZUNhbGwp
CkBAIC05MTksMTEgKzkxOCw3IEBAIG1hY3JvIHNsb3dQYXRoRm9yQ2FsbChzbG93UGF0aCwgcHJl
cGFyZUMKICAgICAgICAgbWFjcm8gKGNhbGxlZSwgY2FsbGVlRnJhbWVQdHIpCiAgICAgICAgICAg
ICBidHB6IGNhbGxlZUZyYW1lUHRyLCAuZG9udFVwZGF0ZVNQCiAgICAgICAgICAgICBtb3ZlIGNh
bGxlZUZyYW1lUHRyLCBzcAotICAgICAgICAgICAgcHJlcGFyZUNhbGwoY2FsbGVlLCB0MiwgdDMs
IHQ0LCBtYWNybyAoY2FsbFB0clRhZ1JlZykKLSAgICAgICAgICAgICAgICBpZiBQT0lOVEVSX1BS
T0ZJTElORwotICAgICAgICAgICAgICAgICAgICBtb3ZlIFNsb3dQYXRoUHRyVGFnLCBjYWxsUHRy
VGFnUmVnCi0gICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICBlbmQpCisgICAgICAgICAg
ICBwcmVwYXJlQ2FsbChjYWxsZWUsIHQyLCB0MywgdDQsIFNsb3dQYXRoUHRyVGFnKQogICAgICAg
ICAuZG9udFVwZGF0ZVNQOgogICAgICAgICAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKGNhbGxlZSwg
U2xvd1BhdGhQdHJUYWcpCiAgICAgICAgIGVuZCkKQEAgLTEwMDUsNyArMTAwMCw3IEBAIGVuZAog
CiAjIERvIHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgdG8gZXhlY3V0ZSBjb2RlLiBTZXRzIHVw
IHRoZSBQQywgbGVhdmUgdGhlIENvZGVCbG9jayoKICMgaW4gdDEuIE1heSBhbHNvIHRyaWdnZXIg
cHJvbG9ndWUgZW50cnkgT1NSLgotbWFjcm8gcHJvbG9ndWUoY29kZUJsb2NrR2V0dGVyLCBjb2Rl
QmxvY2tTZXR0ZXIsIG9zclNsb3dQYXRoLCB0cmFjZVNsb3dQYXRoKQorbWFjcm8gcHJvbG9ndWUo
Y29kZUJsb2NrR2V0dGVyLCBjb2RlQmxvY2tTZXR0ZXIsIG9zclNsb3dQYXRoLCB0cmFjZVNsb3dQ
YXRoLCB0YXJnZXRQdHJUYWcpCiAgICAgIyBTZXQgdXAgdGhlIGNhbGwgZnJhbWUgYW5kIGNoZWNr
IGlmIHdlIHNob3VsZCBPU1IuCiAgICAgdGFnUmV0dXJuQWRkcmVzcyBzcAogICAgIHByZXNlcnZl
Q2FsbGVyUENBbmRDRlIoKQpAQCAtMTAzNiwxMyArMTAzMSwxNCBAQCBtYWNybyBwcm9sb2d1ZShj
b2RlQmxvY2tHZXR0ZXIsIGNvZGVCbG9jCiAgICAgICAgICMgcG9wIHRoZSBjYWxsZXJGcmFtZSBz
aW5jZSB3ZSB3aWxsIGp1bXAgdG8gYSBmdW5jdGlvbiB0aGF0IHdhbnRzIHRvIHNhdmUgaXQKICAg
ICAgICAgaWYgQVJNNjQgb3IgQVJNNjRFCiAgICAgICAgICAgICBwb3AgbHIsIGNmcgorICAgICAg
ICAgICAgdW50YWdSZXR1cm5BZGRyZXNzIHNwCiAgICAgICAgIGVsc2lmIEFSTSBvciBBUk12NyBv
ciBBUk12N19UUkFESVRJT05BTCBvciBNSVBTCiAgICAgICAgICAgICBwb3AgY2ZyCiAgICAgICAg
ICAgICBwb3AgbHIKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcG9wIGNmcgogICAgICAgICBl
bmQKLSAgICAgICAgam1wIHIwLCBDb2RlRW50cnlQdHJUYWcKKyAgICAgICAgam1wIHIwLCB0YXJn
ZXRQdHJUYWcKICAgICAucmVjb3ZlcjoKICAgICAgICAgY29kZUJsb2NrR2V0dGVyKHQxLCB0MikK
ICAgICAuY29udGludWU6CkBAIC0xMTYwLDcgKzExNTYsNyBAQCBlbHNlCiAgICAgZ2xvYmFsIF92
bUVudHJ5VG9KYXZhU2NyaXB0CiAgICAgX3ZtRW50cnlUb0phdmFTY3JpcHQ6CiBlbmQKLSAgICBk
b1ZNRW50cnkobWFrZUphdmFTY3JpcHRDYWxsLCBDb2RlRW50cnlQdHJUYWcsIENvZGVFbnRyeVdp
dGhBcml0eUNoZWNrUHRyVGFnKQorICAgIGRvVk1FbnRyeShtYWtlSmF2YVNjcmlwdENhbGwpCiAK
IAogaWYgQ19MT09QCkBAIC0xMTY5LDcgKzExNjUsNyBAQCBlbHNlCiAgICAgZ2xvYmFsIF92bUVu
dHJ5VG9OYXRpdmUKICAgICBfdm1FbnRyeVRvTmF0aXZlOgogZW5kCi0gICAgZG9WTUVudHJ5KG1h
a2VIb3N0RnVuY3Rpb25DYWxsLCBOYXRpdmVDb2RlUHRyVGFnLCBOYXRpdmVDb2RlUHRyVGFnKQor
ICAgIGRvVk1FbnRyeShtYWtlSG9zdEZ1bmN0aW9uQ2FsbCkKIAogCiBpZiBub3QgQ19MT09QCkBA
IC0xMjg3LDM0ICsxMjgzLDM0IEBAIF9sbGludF9lbnRyeToKIGVuZAogCiBfbGxpbnRfcHJvZ3Jh
bV9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90
RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9w
cm9sb2d1ZSkKKyAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwgbm90RnVu
Y3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFjZV9wcm9s
b2d1ZSwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGRpc3BhdGNoKDApCiAKIAogX2xsaW50X21vZHVs
ZV9wcm9ncmFtX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0
dGVyLCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50
X3RyYWNlX3Byb2xvZ3VlKQorICAgIHByb2xvZ3VlKG5vdEZ1bmN0aW9uQ29kZUJsb2NrR2V0dGVy
LCBub3RGdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zciwgX2xsaW50X3Ry
YWNlX3Byb2xvZ3VlLCBDb2RlRW50cnlQdHJUYWcpCiAgICAgZGlzcGF0Y2goMCkKIAogCiBfbGxp
bnRfZXZhbF9wcm9sb2d1ZToKLSAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRl
ciwgbm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90
cmFjZV9wcm9sb2d1ZSkKKyAgICBwcm9sb2d1ZShub3RGdW5jdGlvbkNvZGVCbG9ja0dldHRlciwg
bm90RnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3IsIF9sbGludF90cmFj
ZV9wcm9sb2d1ZSwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGRpc3BhdGNoKDApCiAKIAogX2xsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlOgotICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9yQ2Fs
bENvZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9v
c3JfZnVuY3Rpb25fZm9yX2NhbGwsIF9sbGludF90cmFjZV9wcm9sb2d1ZV9mdW5jdGlvbl9mb3Jf
Y2FsbCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0
aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsLCBf
bGxpbnRfdHJhY2VfcHJvbG9ndWVfZnVuY3Rpb25fZm9yX2NhbGwsIENvZGVFbnRyeVB0clRhZykK
ICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDApCiAgICAgZGlzcGF0Y2goMCkKICAgICAKIAog
X2xsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWU6Ci0gICAgcHJvbG9ndWUoZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVy
LCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3QsIF9sbGludF90cmFjZV9w
cm9sb2d1ZV9mdW5jdGlvbl9mb3JfY29uc3RydWN0KQorICAgIHByb2xvZ3VlKGZ1bmN0aW9uRm9y
Q29uc3RydWN0Q29kZUJsb2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50
X2VudHJ5X29zcl9mdW5jdGlvbl9mb3JfY29uc3RydWN0LCBfbGxpbnRfdHJhY2VfcHJvbG9ndWVf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdCwgQ29kZUVudHJ5UHRyVGFnKQogICAgIGZ1bmN0aW9uSW5p
dGlhbGl6YXRpb24oMSkKICAgICBkaXNwYXRjaCgwKQogICAgIAogCiBfbGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfYXJpdHlfY2hlY2s6Ci0gICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JDYWxsQ29kZUJs
b2NrR2V0dGVyLCBmdW5jdGlvbkNvZGVCbG9ja1NldHRlciwgX2xsaW50X2VudHJ5X29zcl9mdW5j
dGlvbl9mb3JfY2FsbF9hcml0eUNoZWNrLCBfbGxpbnRfdHJhY2VfYXJpdHlDaGVja19mb3JfY2Fs
bCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNhbGxDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9u
Q29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlfb3NyX2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5
Q2hlY2ssIF9sbGludF90cmFjZV9hcml0eUNoZWNrX2Zvcl9jYWxsLCBDb2RlRW50cnlXaXRoQXJp
dHlDaGVja1B0clRhZykKICAgICBmdW5jdGlvbkFyaXR5Q2hlY2soLmZ1bmN0aW9uRm9yQ2FsbEJl
Z2luLCBfc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjaykKIC5mdW5jdGlvbkZvckNhbGxCZWdpbjoK
ICAgICBmdW5jdGlvbkluaXRpYWxpemF0aW9uKDApCkBAIC0xMzIyLDcgKzEzMTgsNyBAQCBfbGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2s6CiAKIAogX2xsaW50X2Z1bmN0aW9uX2Zv
cl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2s6Ci0gICAgcHJvbG9ndWUoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RDb2RlQmxvY2tHZXR0ZXIsIGZ1bmN0aW9uQ29kZUJsb2NrU2V0dGVyLCBfbGxpbnRfZW50cnlf
b3NyX2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlDaGVjaywgX2xsaW50X3RyYWNlX2FyaXR5
Q2hlY2tfZm9yX2NvbnN0cnVjdCkKKyAgICBwcm9sb2d1ZShmdW5jdGlvbkZvckNvbnN0cnVjdENv
ZGVCbG9ja0dldHRlciwgZnVuY3Rpb25Db2RlQmxvY2tTZXR0ZXIsIF9sbGludF9lbnRyeV9vc3Jf
ZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eUNoZWNrLCBfbGxpbnRfdHJhY2VfYXJpdHlDaGVj
a19mb3JfY29uc3RydWN0LCBDb2RlRW50cnlXaXRoQXJpdHlDaGVja1B0clRhZykKICAgICBmdW5j
dGlvbkFyaXR5Q2hlY2soLmZ1bmN0aW9uRm9yQ29uc3RydWN0QmVnaW4sIF9zbG93X3BhdGhfY29u
c3RydWN0X2FyaXR5Q2hlY2spCiAuZnVuY3Rpb25Gb3JDb25zdHJ1Y3RCZWdpbjoKICAgICBmdW5j
dGlvbkluaXRpYWxpemF0aW9uKDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzLTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01Nyw2ICs1Nyw3IEBAIGlubGluZSBib29sIGlzQ2FsbChDb2RlU3BlY2lhbGl6
YXRpb25LaW4KIAogY2xhc3MgRXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBm
cmllbmQgY2xhc3MgSklUOworICAgIGZyaWVuZCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRU
aGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKik7CiAKIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgY29uc3QgaW50IE5VTV9QQVJBTUVURVJTX0lTX0hPU1QgPSAwOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMSBAQCB2b2lkIE5hdGl2
ZUV4ZWN1dGFibGU6OmZpbmlzaENyZWF0aW9uKFZNCiAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrID0gbV9qaXRDb2RlRm9yQ2FsbC0+YWRkcmVzc0ZvckNhbGwoTXVzdENoZWNrQXJp
dHkpOwogICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0LT5hZGRyZXNzRm9yQ2FsbChNdXN0Q2hlY2tBcml0eSk7CiAgICAgbV9uYW1l
ID0gbmFtZTsKKworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JDYWxsLT5hZGRy
ZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpLmV4ZWN1dGFibGVBZGRyZXNzKCksIENv
ZGVFbnRyeVB0clRhZyk7CisgICAgYXNzZXJ0SXNUYWdnZWRXaXRoKG1faml0Q29kZUZvckNvbnN0
cnVjdC0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKS5leGVjdXRhYmxlQWRk
cmVzcygpLCBDb2RlRW50cnlQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2suZXhlY3V0YWJsZUFkZHJlc3MoKSwgQ29kZUVudHJ5V2l0
aEFyaXR5Q2hlY2tQdHJUYWcpOworICAgIGFzc2VydElzVGFnZ2VkV2l0aChtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjay5leGVjdXRhYmxlQWRkcmVzcygpLCBDb2RlRW50cnlXaXRo
QXJpdHlDaGVja1B0clRhZyk7CiB9CiAKIE5hdGl2ZUV4ZWN1dGFibGU6Ok5hdGl2ZUV4ZWN1dGFi
bGUoVk0mIHZtLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IsIEludHJpbnNpYyBpbnRyaW5zaWMsIGNvbnN0IERPTUpJVDo6U2ln
bmF0dXJlKiBzaWduYXR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
YXRpdmVGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL05hdGl2ZUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEw
ICs3MCwxMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVGFnZ2VkTmF0aXZlRnVuY3Rpb24oaW50
cHRyX3QgYml0cykgOiBtX3B0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHMpKSB7IH0KIAogICAg
IFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uKE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCi0gICAgICAgIDogbV9w
dHIodGFnQ0Z1bmN0aW9uUHRyPHZvaWQqPihmdW5jLm1fcHRyLCBOYXRpdmVDb2RlUHRyVGFnKSkK
KyAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1bmMubV9wdHIsIENvZGVF
bnRyeVB0clRhZykpCiAgICAgeyB9CiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24oUmF3TmF0aXZl
RnVuY3Rpb24gZnVuYykKLSAgICAgICAgOiBtX3B0cih0YWdDRnVuY3Rpb25QdHI8dm9pZCo+KGZ1
bmMsIE5hdGl2ZUNvZGVQdHJUYWcpKQorICAgICAgICA6IG1fcHRyKHRhZ0NGdW5jdGlvblB0cjx2
b2lkKj4oZnVuYywgQ29kZUVudHJ5UHRyVGFnKSkKICAgICB7IH0KIAogICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fcHRyOyB9CkBAIC04Niw3ICs4Niw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBvcGVyYXRvciBOYXRpdmVGdW5jdGlvbigpCiAgICAgewog
ICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICByZXR1cm4gdW50YWdDRnVuY3Rpb25QdHI8
TmF0aXZlRnVuY3Rpb24+KG1fcHRyLCBOYXRpdmVDb2RlUHRyVGFnKTsKKyAgICAgICAgcmV0dXJu
IHVudGFnQ0Z1bmN0aW9uUHRyPE5hdGl2ZUZ1bmN0aW9uPihtX3B0ciwgQ29kZUVudHJ5UHRyVGFn
KTsKICAgICB9CiAKICAgICB2b2lkKiByYXdQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5o
CShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA3LCAyMDA4LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNTcsNiArMjU3LDcgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQoYXR0cmlidXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3RydWN0
dXJlKGF0dHJpYnV0ZXMpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7Cisg
ICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKGdldFZhbHVlKTsKICAgICAgICAgbV9kYXRhLmN1
c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAgICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOwogCkBAIC0yNzgsNiArMjc5LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoYXR0cmli
dXRlcyA9PSBhdHRyaWJ1dGVzRm9yU3RydWN0dXJlKGF0dHJpYnV0ZXMpKTsKICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVChnZXRWYWx1ZSk7CisgICAgICAgIGFzc2VydElzQ0Z1bmN0aW9uUHRyKGdl
dFZhbHVlKTsKICAgICAgICAgbV9kYXRhLmN1c3RvbS5nZXRWYWx1ZSA9IGdldFZhbHVlOwogICAg
ICAgICBtX2F0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdHJUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdHJUYWcuaAkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHRyVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSwyMiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KENvZGVFbnRyeVB0clRhZykgXAogICAgIHYoQ29kZUVu
dHJ5V2l0aEFyaXR5Q2hlY2tQdHJUYWcpIFwKICAgICB2KEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWcp
IFwKKyAgICB2KEdldFByb3BlcnR5UHRyVGFnKSBcCisgICAgdihHZXR0ZXJTZXR0ZXJQdHJUYWcp
IFwKKyAgICB2KEhhc1Byb3BlcnR5UHRyVGFnKSBcCiAgICAgdihKSVRDb2RlUHRyVGFnKSBcCiAg
ICAgdihKSVRPcGVyYXRpb25QdHJUYWcpIFwKICAgICB2KEpJVFRodW5rUHRyVGFnKSBcCisgICAg
dihKSVRXcml0ZVRodW5rUHRyVGFnKSBcCisgICAgdihMTEludENhbGxJQ1B0clRhZykgXAorICAg
IHYoTWF0aElDUHRyVGFnKSBcCiAgICAgdihOYXRpdmVDb2RlUHRyVGFnKSBcCisgICAgdihPcGVy
YXRpb25MaW5rQ2FsbFB0clRhZykgXAorICAgIHYoT3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2Fs
bFB0clRhZykgXAorICAgIHYoT3BlcmF0aW9uVmlydHVhbENhbGxQdHJUYWcpIFwKKyAgICB2KFB1
dFByb3BlcnR5UHRyVGFnKSBcCiAgICAgdihTbG93UGF0aFB0clRhZykgXAorICAgIHYoU3BlY2lh
bGl6ZWRUaHVua1B0clRhZykgXAogICAgIHYoU3dpdGNoVGFibGVQdHJUYWcpIFwKICAgICBcCiAg
ICAgdihZYXJyOEJpdFB0clRhZykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEN1c3RvbVZhbHVlKEpTT2Jq
ZWN0KiBiYXNlLCBQdXRWYWx1ZUZ1bmMgZnVuY3Rpb24pCiAgICAgeworICAgICAgICBhc3NlcnRJ
c051bGxPckNGdW5jdGlvblB0cihmdW5jdGlvbik7CiAgICAgICAgIG1fdHlwZSA9IEN1c3RvbVZh
bHVlOwogICAgICAgICBtX2Jhc2UgPSBiYXNlOwogICAgICAgICBtX3B1dEZ1bmN0aW9uID0gZnVu
Y3Rpb247CkBAIC03Niw2ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q3VzdG9tQWNj
ZXNzb3IoSlNPYmplY3QqIGJhc2UsIFB1dFZhbHVlRnVuYyBmdW5jdGlvbikKICAgICB7CisgICAg
ICAgIGFzc2VydElzTnVsbE9yQ0Z1bmN0aW9uUHRyKGZ1bmN0aW9uKTsKICAgICAgICAgbV90eXBl
ID0gQ3VzdG9tQWNjZXNzb3I7CiAgICAgICAgIG1fYmFzZSA9IGJhc2U7CiAgICAgICAgIG1fcHV0
RnVuY3Rpb24gPSBmdW5jdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1Nyw3ICszNTcsOCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnRha2VTYW1w
bGUoY29uc3QgCiAgICAgICAgICAgICAgICAgbWFjaGluZUZyYW1lID0gTWFjaGluZUNvbnRleHQ6
OmZyYW1lUG9pbnRlcihyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgIGNhbGxGcmFtZSA9IHN0
YXRpY19jYXN0PEV4ZWNTdGF0ZSo+KG1hY2hpbmVGcmFtZSk7CiAgICAgICAgICAgICAgICAgbWFj
aGluZVBDID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdpc3RlcnMpOwot
ICAgICAgICAgICAgICAgIGxsaW50UEMgPSBNYWNoaW5lQ29udGV4dDo6bGxpbnRJbnN0cnVjdGlv
blBvaW50ZXIocmVnaXN0ZXJzKTsKKyAgICAgICAgICAgICAgICBsbGludFBDID0gcmVtb3ZlQ29k
ZVB0clRhZyhNYWNoaW5lQ29udGV4dDo6bGxpbnRJbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJz
KSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQobWFjaGluZVBDKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIC8vIEZJWE1FOiBMZXRzIGhhdmUgYSB3YXkgb2YgZGV0ZWN0
aW5nIHdoZW4gd2UncmUgcGFyc2luZyBjb2RlLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjc2MQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAJKHJldmlzaW9uIDIzMDEyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDYgKzU5
LDcgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNo
aW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ2lzdGVycykpCiAgICAgICAgICwgZnJhbWVQb2lu
dGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVnaXN0ZXJzKSkKICAgICB7CisgICAg
ICAgIGFzc2VydElzTm90VGFnZ2VkKHRyYXBQQyk7CiAgICAgfQogCiAgICAgUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVyczsKQEAgLTkzLDYgKzk0LDcgQEAgdm9pZCBWTVRyYXBzOjp0cnlJbnN0
YWxsVHJhcEJyZWFrcG9pbnRzKAogICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBKSVQvTExJbnQgY29k
ZSwgd2UgY2FuJ3QgcnVuIHRoZSBDKysgY29kZSBiZWxvdyBiZWNhdXNlIGl0CiAgICAgLy8gbWFs
bG9jcywgYW5kIHdlIG11c3QgcHJvdmUgdGhlIEpTIHRocmVhZCBpc24ndCBob2xkaW5nIHRoZSBt
YWxsb2MgbG9jawogICAgIC8vIHRvIGJlIGFibGUgdG8gZG8gdGhhdCB3aXRob3V0IHJpc2tpbmcg
YSBkZWFkbG9jay4KKyAgICBhc3NlcnRJc05vdFRhZ2dlZCh0cmFwUEMpOwogICAgIGlmICghaXNK
SVRQQyh0cmFwUEMpICYmICFMTEludDo6aXNMTEludFBDKHRyYXBQQykpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMTg3LDYgKzE4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6QmFkQWNjZXNzLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKICAgICAgICAgICAgICAg
ICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAorICAgICAgICAgICAgICAgIGFz
c2VydElzTm90VGFnZ2VkKGNvbnRleHQudHJhcFBDKTsKICAgICAgICAgICAgICAgICBpZiAoIWlz
SklUUEMoY29udGV4dC50cmFwUEMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmFs
QWN0aW9uOjpOb3RIYW5kbGVkOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
U2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCShyZXZpc2lvbiAyMzAxMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTQ1LDYgKzE0NSw3IEBAIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIo
KQogICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBTaWdJ
bmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgewogICAgICAgICBTaWduYWxDb250
ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAorICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZChjb250
ZXh0Lm1hY2hpbmVQQyk7CiAgICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0Lm1hY2hpbmVQQykp
CiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmNwcAkocmV2aXNpb24gMjMwMTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyODIsOSArMzI4Miw3IEBAIGNsYXNzIFlhcnJHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNz
ZW0KIAogICAgICAgICBtX3RyeVJlYWRVbmljb2RlQ2hhcmFjdGVyRW50cnkgPSBsYWJlbCgpOwog
Ci0jaWYgQ1BVKEFSTTY0KQotICAgICAgICB0YWdQdHIobGlua1JlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0jZW5kaWYKKyAgICAgICAgdGFnUmV0dXJuQWRkcmVzcygpOwogCiAgICAg
ICAgIHRyeVJlYWRVbmljb2RlQ2hhckltcGwocmVnVDApOwogCkBAIC0zMzQ3LDcgKzMzNDUsNyBA
QCBjbGFzcyBZYXJyR2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtCiAgICAgICAgICAgICBs
b2FkUHRyKEFkZHJlc3MoWDg2UmVnaXN0ZXJzOjplYnAsIDIgKiBzaXplb2Yodm9pZCopKSwgb3V0
cHV0KTsKICAgICAjZW5kaWYKICNlbGlmIENQVShBUk02NCkKLSAgICAgICAgdGFnUHRyKGxpbmtS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICB0YWdSZXR1cm5BZGRyZXNz
KCk7CiAgICAgICAgIGlmIChtX2RlY29kZVN1cnJvZ2F0ZVBhaXJzKSB7CiAgICAgICAgICAgICBw
dXNoUGFpcihmcmFtZVBvaW50ZXJSZWdpc3RlciwgbGlua1JlZ2lzdGVyKTsKICAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbTMyKDB4MTAwMDApLCBzdXBwbGVtZW50YXJ5UGxhbmVzQmFzZSk7Cklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjMwMTI2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxOC0wMy0zMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIHBvaW50ZXIgcHJvZmlsaW5nIHN1cHBvcnQgaW4gYmFz
ZWxpbmUgSklUIGFuZCBzdXBwb3J0aW5nIGZpbGVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg0MjAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8z
OTA1NzMwMD4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAq
IHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg6CisgICAgICAgIC0gUmVtb3ZlIFdURl9QUkVQQVJF
X0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTi4gIEl0IGlzIG5vIGxvbmdlciBuZWVkZWQu
CisKIDIwMTgtMDMtMzAgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdvcmtRdWV1ZVdpbjogZG9uJ3QgbW92ZSBydmFsdWVzCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUG9p
bnRlclByZXBhcmF0aW9ucy5oCShyZXZpc2lvbiAyMzAxMjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9Q
b2ludGVyUHJlcGFyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw2IEBACiAj
aW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KICNlbmRpZgog
Ci0jaWZuZGVmIFdURl9QUkVQQVJFX0ZVTkNUSU9OX1BPSU5URVJfRk9SX0VYRUNVVElPTgotI2Rl
ZmluZSBXVEZfUFJFUEFSRV9GVU5DVElPTl9QT0lOVEVSX0ZPUl9FWEVDVVRJT04odnRibFB0cikg
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZ0YmxQdHIpKQotI2VuZGlmCi0KICNpZm5kZWYgV1RG
X1BSRVBBUkVfVlRCTF9QT0lOVEVSX0ZPUl9JTlNQRUNUSU9OCiAjZGVmaW5lIFdURl9QUkVQQVJF
X1ZUQkxfUE9JTlRFUl9GT1JfSU5TUEVDVElPTih2dGJsUHRyKSAocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4odnRibFB0cikpCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>