<?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>216173</bug_id>
          
          <creation_ts>2020-09-04 03:40:08 -0700</creation_ts>
          <short_desc>Binding generator is not always computing the right interface attributes</short_desc>
          <delta_ts>2020-09-04 10:24:12 -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>WebCore Misc.</component>
          <version>WebKit Local 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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685595</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-04 03:40:08 -0700</bug_when>
    <thetext>Binding generator is not always computing the right interface attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685596</commentid>
    <comment_count>1</comment_count>
      <attachid>407954</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-04 03:45:38 -0700</bug_when>
    <thetext>Created attachment 407954
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685614</commentid>
    <comment_count>2</comment_count>
      <attachid>407963</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-04 05:55:31 -0700</bug_when>
    <thetext>Created attachment 407963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685662</commentid>
    <comment_count>3</comment_count>
      <attachid>407963</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-09-04 08:29:29 -0700</bug_when>
    <thetext>Comment on attachment 407963
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=407963&amp;action=review

&gt; Source/WebCore/dom/TextEncoder.idl:-27
&gt; -    Exposed=(Window,Worker),

I also added &quot;dictionary&quot; to Exposed in IDLAttributes.json which should probably be removed with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685691</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2020-09-04 09:24:34 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Comment on attachment 407963 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=407963&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/TextEncoder.idl:-27
&gt; &gt; -    Exposed=(Window,Worker),
&gt; 
&gt; I also added &quot;dictionary&quot; to Exposed in IDLAttributes.json which should
&gt; probably be removed with this.

OK, will fix it in a follow-up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685707</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-04 09:40:15 -0700</bug_when>
    <thetext>Committed r266615: &lt;https://trac.webkit.org/changeset/266615&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407963.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685709</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-04 09:42:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/68350821&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685744</commentid>
    <comment_count>7</comment_count>
      <attachid>407963</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-04 10:24:12 -0700</bug_when>
    <thetext>Comment on attachment 407963
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=407963&amp;action=review

&gt;&gt;&gt; Source/WebCore/dom/TextEncoder.idl:-27
&gt;&gt;&gt; -    Exposed=(Window,Worker),
&gt;&gt; 
&gt;&gt; I also added &quot;dictionary&quot; to Exposed in IDLAttributes.json which should probably be removed with this.
&gt; 
&gt; OK, will fix it in a follow-up

Exposed is not valid on a dictionary, see https://heycam.github.io/webidl/#Exposed for the complete list of valid contexts.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407954</attachid>
            <date>2020-09-04 03:45:38 -0700</date>
            <delta_ts>2020-09-04 05:55:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216173-20200904124536.patch</filename>
            <type>text/plain</type>
            <size>228684</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkZDVkZDIxNjU4OTNh
MTAwNTBkYWMwZjIwZGVlZjcxZjljYTM5Yy4uM2ZkZWRhNjRjZTI5N2YzMWI1NWM1MjljNTM5YjQx
ZTNjOWViMTUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1NyBAQAorMjAyMC0wOS0wNCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQmluZGluZyBnZW5lcmF0
b3IgaXMgbm90IGFsd2F5cyBjb21wdXRpbmcgdGhlIHJpZ2h0IGludGVyZmFjZSBhdHRyaWJ1dGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
dGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgcHJlcHJvY2Vzcy1pZGxzLnBsIGNv
bXB1dGVzIHRoZSByaWdodCBhdHRyaWJ1dGVzIGZvciBpbnRlcmZhY2VzLgorICAgICAgICBQcmV2
aW91c2x5LCBpdCB3YXMgY2F1c2luZyBpc3N1ZXMgaWYgYSBkaWN0aW9uYXJ5IGRlZmluZWQgYmVm
b3JlIGFuIGludGVyZmFjZSBpbiB0aGUgc2FtZSBmaWxlIGhhZCBzb21lIGV4dGVuZGVkIGF0dHJp
YnV0ZXMuCisgICAgICAgIEFkZCBzb21lIGdsb2JhbCBvYmplY3RzIElETCBmaWxlcyB0byBlbmFi
bGUgYmluZGluZyB0ZXN0IGNvdmVyYWdlLgorICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRpbmcgdGVz
dHMgYW5kIGV4aXN0aW5nIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvcHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAoZ2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRy
aWJ1dGVzRnJvbUlETCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdU
ZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0RPTVdpbmRvdy5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9ET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEds
b2JhbENvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OkpTRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpT
RE9NV2luZG93Pjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0NvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1
Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvd0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd1Rlc3ROb2RlQ29uc3RydWN0b3JHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU0RPTVdpbmRvd1Rlc3ROb2RlQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YW5hbHl6ZUhlYXApOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp0b1dyYXBwZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OndyYXBwZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5k
b3dDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpqc0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjphbmFseXplSGVhcCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6Ondy
YXBwZWQgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0RGljdGlvbmFyeTxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3Q+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6SlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmRlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6SURMT3BlcmF0aW9uPEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Pjo6Y2FzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5
cGVGdW5jdGlvbkRvU29tZXRoaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRG9Tb21ldGhpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6ZUhlYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3dPd25lcjo6ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5oLgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVy
T3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlOjp3cmFwcGVkIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6SlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU6OndyYXBwZWQgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2Jh
bE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RQYWludFdvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVj
dG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2Jh
bFNjb3BlOjpKU1dvcmtlckdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
R2xvYmFsU2NvcGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
R2xvYmFsU2NvcGU6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtl
ckdsb2JhbFNjb3BlOjpwcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9i
YWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRl
PEpTV29ya2VyR2xvYmFsU2NvcGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1dvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNXb3JrZXJHbG9iYWxT
Y29wZUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1dvcmtlckdsb2JhbFNjb3BlRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNXb3JrZXJHbG9iYWxTY29wZUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVj
dG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9k
ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVU
ZXN0Tm9kZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2Vy
R2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29y
a2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNXb3JrZXJHbG9iYWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNXb3JrZXJHbG9iYWxTY29wZVRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNX
b3JrZXJHbG9iYWxTY29wZVRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnRvV3JhcHBlZCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OndyYXBwZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVk
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpjcmVhdGVQcm90b3R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnByb3RvdHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6dG9XcmFwcGVkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjp3cmFwcGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5pZGw6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtl
ckdsb2JhbFNjb3BlLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtsZXRHbG9iYWxTY29wZS5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vVGV4dEVuY29kZXIuaWRsOgorCiAyMDIwLTA5LTAz
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3JlIGFsbCBz
dHlsaW5nIGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAppbmRleCBiNzM3Y2Ri
YmE3MDZjYzI5NTViOTlmMzg3YzhhZWM5MTJhMTZhNTY4Li4xYmRiZTU0NmE2N2ZhNjYxMDhhZWRj
MzUwYTk1MTFhMzAxZDliNTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbApAQCAtMjQ1LDcgKzI0NSw4IEBAIGlmICgkc3VwcGxl
bWVudGFsTWFrZWZpbGVEZXBzKSB7CiAgICAgZm9yZWFjaCBteSAkaWRsRmlsZSAoc29ydCBrZXlz
ICVzdXBwbGVtZW50YWxzKSB7CiAgICAgICAgIG15ICRiYXNlbmFtZSA9ICRpZGxGaWxlVG9JbnRl
cmZhY2VOYW1leyRpZGxGaWxlfTsKIAotICAgICAgICBteSBAZGVwZW5kZW5jaWVzID0gbWFwIHsg
YmFzZW5hbWUoJF8pIH0gQHskc3VwcGxlbWVudGFsc3skaWRsRmlsZX19OworICAgICAgICBteSBA
ZGVwZW5kZW5jeUxpc3QgPSBtYXAgeyBiYXNlbmFtZSgkXykgfSBAeyRzdXBwbGVtZW50YWxzeyRp
ZGxGaWxlfX07CisgICAgICAgIG15IEBkZXBlbmRlbmNpZXMgPSBzb3J0KGtleXMgJXt7IG1hcHsk
Xz0+MX1AZGVwZW5kZW5jeUxpc3R9fSk7CiAKICAgICAgICAgJG1ha2VmaWxlRGVwcyAuPSAiSlMk
e2Jhc2VuYW1lfS5oOiBAe2RlcGVuZGVuY2llc31cbiI7CiAgICAgICAgICRtYWtlZmlsZURlcHMg
Lj0gIkRPTSR7YmFzZW5hbWV9Lmg6IEB7ZGVwZW5kZW5jaWVzfVxuIjsKQEAgLTQyNyw3ICs0Mjgs
MTIgQEAgc3ViIGdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21JREwKICAgICAkZmls
ZUNvbnRlbnRzID1+IHMvKD86KD86KD86XC9cLykoPzpbXlxuXSopKD86XG4pKXwoPzooPzpcL1wq
KSg/Oig/OlteXCpdK3xcKig/IVwvKSkqKSg/OlwqXC8pKSkvL2c7CiAKICAgICBpZiAoJGZpbGVD
b250ZW50cyA9fiAvXFsoLiopXF1ccysoY2FsbGJhY2sgaW50ZXJmYWNlfGludGVyZmFjZXxleGNl
cHRpb24pXHMrKFx3KykvZ3MpIHsKLSAgICAgICAgbXkgQHBhcnRzID0gc3BsaXQobS8sKD8hW14o
KV0qXCkpLywgJDEpOworICAgICAgICBteSAkcGFyYW1ldGVycyA9ICQxOworICAgICAgICBpZiAo
JHBhcmFtZXRlcnMgPX4gbS8oW15cL1tdKykkLykgeworICAgICAgICAgICAgJHBhcmFtZXRlcnMg
PSAkMTsKKyAgICAgICAgfQorCisgICAgICAgIG15IEBwYXJ0cyA9IHNwbGl0KG0vLCg/IVteKCld
KlwpKS8sICRwYXJhbWV0ZXJzKTsKICAgICAgICAgZm9yZWFjaCBteSAkcGFydCAoQHBhcnRzKSB7
CiAgICAgICAgICAgICBteSBAa2V5VmFsdWUgPSBzcGxpdCgnPScsICRwYXJ0KTsKICAgICAgICAg
ICAgIG15ICRrZXkgPSB0cmltKCRrZXlWYWx1ZVswXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMu
aWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xv
YmFsQ29uc3RydWN0b3JzLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNWQ3MmMzYzQxZDc0NWUzNWM4NzdlMDEw
NDhhNzg1MzNhNDBmZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbApAQCAtMCww
ICsxLDcxIEBACitwYXJ0aWFsIGludGVyZmFjZSBUZXN0R2xvYmFsT2JqZWN0IHsKKyAgICBhdHRy
aWJ1dGUgRE9NV2luZG93Q29uc3RydWN0b3IgRE9NV2luZG93OworICAgIGF0dHJpYnV0ZSBEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yIERlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlOworICAgIGF0dHJpYnV0ZSBQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yIFBh
aW50V29ya2xldEdsb2JhbFNjb3BlOworICAgIGF0dHJpYnV0ZSBTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvciBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CisgICAgYXR0cmlidXRl
IFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yIFRlc3RDRVJlYWN0aW9uczsKKyAgICBhdHRyaWJ1
dGUgVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvciBUZXN0Q0VSZWFjdGlvbnNT
dHJpbmdpZmllcjsKKyAgICBhdHRyaWJ1dGUgVGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvciBUZXN0
Q2FsbFRyYWNlcjsKKyAgICBbQ29uZGl0aW9uYWw9VEVTVF9DT05ESVRJT05BTF0gYXR0cmlidXRl
IFRlc3RDYWxsYmFja0ludGVyZmFjZUNvbnN0cnVjdG9yIFRlc3RDYWxsYmFja0ludGVyZmFjZTsK
KyAgICBhdHRyaWJ1dGUgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0
b3IgVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9yOworICAgIGF0dHJpYnV0ZSBUZXN0
RE9NSklUQ29uc3RydWN0b3IgVGVzdERPTUpJVDsKKyAgICBhdHRyaWJ1dGUgVGVzdERvbWFpblNl
Y3VyaXR5Q29uc3RydWN0b3IgVGVzdERvbWFpblNlY3VyaXR5OworICAgIGF0dHJpYnV0ZSBUZXN0
RW5hYmxlZEJ5U2V0dGluZ0NvbnN0cnVjdG9yIFRlc3RFbmFibGVkQnlTZXR0aW5nOworICAgIFtF
bmFibGVkRm9yQ29udGV4dCwgU2VjdXJlQ29udGV4dF0gYXR0cmlidXRlIFRlc3RFbmFibGVkRm9y
Q29udGV4dENvbnN0cnVjdG9yIFRlc3RFbmFibGVkRm9yQ29udGV4dDsKKyAgICBhdHRyaWJ1dGUg
VGVzdEV2ZW50Q29uc3RydWN0b3JDb25zdHJ1Y3RvciBUZXN0RXZlbnRDb25zdHJ1Y3RvcjsKKyAg
ICBhdHRyaWJ1dGUgVGVzdEV2ZW50VGFyZ2V0Q29uc3RydWN0b3IgVGVzdEV2ZW50VGFyZ2V0Owor
ICAgIGF0dHJpYnV0ZSBUZXN0RXhjZXB0aW9uQ29uc3RydWN0b3IgVGVzdEV4Y2VwdGlvbjsKKyAg
ICBhdHRyaWJ1dGUgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGVDb25zdHJ1Y3RvciBUZXN0R2VuZXJh
dGVJc1JlYWNoYWJsZTsKKyAgICBhdHRyaWJ1dGUgVGVzdEdsb2JhbE9iamVjdENvbnN0cnVjdG9y
IFRlc3RHbG9iYWxPYmplY3Q7CisgICAgYXR0cmlidXRlIFRlc3RJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyQ29uc3RydWN0b3IgVGVzdEluZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXI7CisgICAgYXR0
cmlidXRlIFRlc3RJbmRleGVkU2V0dGVyVGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciBUZXN0
SW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOworICAgIGF0dHJpYnV0ZSBUZXN0SW5kZXhl
ZFNldHRlcldpdGhJZGVudGlmaWVyQ29uc3RydWN0b3IgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjsKKyAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yXSBhdHRyaWJ1
dGUgVGVzdEludGVyZmFjZUNvbnN0cnVjdG9yIFRlc3RJbnRlcmZhY2U7CisgICAgYXR0cmlidXRl
IFRlc3RJbnRlcmZhY2VMZWFkaW5nVW5kZXJzY29yZUNvbnN0cnVjdG9yIFRlc3RJbnRlcmZhY2VM
ZWFkaW5nVW5kZXJzY29yZTsKKyAgICBhdHRyaWJ1dGUgVGVzdEl0ZXJhYmxlQ29uc3RydWN0b3Ig
VGVzdEl0ZXJhYmxlOworICAgIGF0dHJpYnV0ZSBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3JDb25z
dHJ1Y3RvciBUZXN0SlNCdWlsdGluQ29uc3RydWN0b3I7CisgICAgYXR0cmlidXRlIFRlc3RNYXBM
aWtlQ29uc3RydWN0b3IgVGVzdE1hcExpa2U7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZEFuZElu
ZGV4ZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3RvciBUZXN0TmFtZWRBbmRJbmRleGVkU2V0
dGVyTm9JZGVudGlmaWVyOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVy
VGhyb3dpbmdFeGNlcHRpb25Db25zdHJ1Y3RvciBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyVGhy
b3dpbmdFeGNlcHRpb247CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJX
aXRoSWRlbnRpZmllckNvbnN0cnVjdG9yIFRlc3ROYW1lZEFuZEluZGV4ZWRTZXR0ZXJXaXRoSWRl
bnRpZmllcjsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkQ29uc3RydWN0b3JDb25zdHJ1Y3RvciBU
ZXN0TmFtZWRDb25zdHJ1Y3RvcjsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkQ29uc3RydWN0b3JO
YW1lZENvbnN0cnVjdG9yIEF1ZGlvOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWREZWxldGVyTm9J
ZGVudGlmaWVyQ29uc3RydWN0b3IgVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllcjsKKyAgICBh
dHRyaWJ1dGUgVGVzdE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgVGVz
dE5hbWVkRGVsZXRlclRocm93aW5nRXhjZXB0aW9uOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRE
ZWxldGVyV2l0aElkZW50aWZpZXJDb25zdHJ1Y3RvciBUZXN0TmFtZWREZWxldGVyV2l0aElkZW50
aWZpZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlckNv
bnN0cnVjdG9yIFRlc3ROYW1lZERlbGV0ZXJXaXRoSW5kZXhlZEdldHRlcjsKKyAgICBhdHRyaWJ1
dGUgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGhDb25zdHJ1Y3RvciBUZXN0TmFtZWRHZXR0ZXJDYWxs
V2l0aDsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0
b3IgVGVzdE5hbWVkR2V0dGVyTm9JZGVudGlmaWVyOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRH
ZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yIFRlc3ROYW1lZEdldHRlcldpdGhJZGVudGlm
aWVyOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXJDb25zdHJ1Y3Rv
ciBUZXN0TmFtZWRTZXR0ZXJOb0lkZW50aWZpZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZFNl
dHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgVGVzdE5hbWVkU2V0dGVyVGhyb3dpbmdF
eGNlcHRpb247CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZFNldHRlcldpdGhJZGVudGlmaWVyQ29u
c3RydWN0b3IgVGVzdE5hbWVkU2V0dGVyV2l0aElkZW50aWZpZXI7CisgICAgYXR0cmlidXRlIFRl
c3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQ29uc3RydWN0b3IgVGVzdE5hbWVkU2V0dGVy
V2l0aEluZGV4ZWRHZXR0ZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZFNldHRlcldpdGhJbmRl
eGVkR2V0dGVyQW5kU2V0dGVyQ29uc3RydWN0b3IgVGVzdE5hbWVkU2V0dGVyV2l0aEluZGV4ZWRH
ZXR0ZXJBbmRTZXR0ZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlk
ZUJ1aWx0aW5zQ29uc3RydWN0b3IgVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnM7
CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0Nv
bnN0cnVjdG9yIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllczsKKyAgICBh
dHRyaWJ1dGUgVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yIFRlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVy
dGllc0FuZE92ZXJyaWRlQnVpbHRpbnM7CisgICAgW0NvbmRpdGlvbmFsPUNvbmRpdGlvbkRlcml2
ZWRdIGF0dHJpYnV0ZSBUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvciBUZXN0T3Bl
cmF0aW9uQ29uZGl0aW9uYWw7CisgICAgYXR0cmlidXRlIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2U7CisgICAgYXR0cmlidXRlIFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3Ig
VGVzdE92ZXJyaWRlQnVpbHRpbnM7CisgICAgYXR0cmlidXRlIFRlc3RQbHVnaW5JbnRlcmZhY2VD
b25zdHJ1Y3RvciBUZXN0UGx1Z2luSW50ZXJmYWNlOworICAgIGF0dHJpYnV0ZSBUZXN0UmVhZE9u
bHlNYXBMaWtlQ29uc3RydWN0b3IgVGVzdFJlYWRPbmx5TWFwTGlrZTsKKyAgICBhdHRyaWJ1dGUg
VGVzdFJlYWRPbmx5U2V0TGlrZUNvbnN0cnVjdG9yIFRlc3RSZWFkT25seVNldExpa2U7CisgICAg
YXR0cmlidXRlIFRlc3RSZXBvcnRFeHRyYU1lbW9yeUNvc3RDb25zdHJ1Y3RvciBUZXN0UmVwb3J0
RXh0cmFNZW1vcnlDb3N0OworICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkNvbnN0cnVj
dG9yIFRlc3RTZXJpYWxpemF0aW9uOworICAgIGF0dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbklu
ZGlyZWN0SW5oZXJpdGFuY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluZGlyZWN0SW5o
ZXJpdGFuY2U7CisgICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdENvbnN0cnVj
dG9yIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdDsKKyAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6
YXRpb25Jbmhlcml0RmluYWxDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRGaW5h
bDsKKyAgICBbQ29uZGl0aW9uYWw9Q29uZGl0aW9uMXxDb25kaXRpb24yXSBhdHRyaWJ1dGUgVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZUNvbnN0cnVjdG9yIFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2U7CisgICAgYXR0cmlidXRlIFRlc3RTZXRMaWtlQ29uc3RydWN0
b3IgVGVzdFNldExpa2U7CisgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllckNvbnN0cnVjdG9y
IFRlc3RTdHJpbmdpZmllcjsKKyAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3Vz
T3BlcmF0aW9uQ29uc3RydWN0b3IgVGVzdFN0cmluZ2lmaWVyQW5vbnltb3VzT3BlcmF0aW9uOwor
ICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJOYW1lZE9wZXJhdGlvbkNvbnN0cnVjdG9yIFRl
c3RTdHJpbmdpZmllck5hbWVkT3BlcmF0aW9uOworICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZp
ZXJPcGVyYXRpb25JbXBsZW1lbnRlZEFzQ29uc3RydWN0b3IgVGVzdFN0cmluZ2lmaWVyT3BlcmF0
aW9uSW1wbGVtZW50ZWRBczsKKyAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9u
TmFtZWRUb1N0cmluZ0NvbnN0cnVjdG9yIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9T
dHJpbmc7CisgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlQ29u
c3RydWN0b3IgVGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRyaWJ1dGU7CisgICAgYXR0cmlidXRl
IFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yIFRlc3RTdHJpbmdp
ZmllclJlYWRXcml0ZUF0dHJpYnV0ZTsKKyAgICBhdHRyaWJ1dGUgVGVzdFR5cGVkZWZzQ29uc3Ry
dWN0b3IgVGVzdFR5cGVkZWZzOworICAgIGF0dHJpYnV0ZSBXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9yIFdvcmtlckdsb2JhbFNjb3BlOworICAgIGF0dHJpYnV0ZSBXb3JrbGV0R2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvciBXb3JrbGV0R2xvYmFsU2NvcGU7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0RPTVdpbmRvdy5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRE9NV2luZG93LmlkbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTQy
YjJhNDhlYjdiOGUzMzg0OWMxNGRkOTJlYjY3YjEwODYxMmI1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0RPTVdpbmRvdy5pZGwKQEAgLTAs
MCArMSwyIEBACitpbnRlcmZhY2UgRE9NV2luZG93IDogRXZlbnRUYXJnZXQgeworfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9ET01XaW5kb3dDb25z
dHJ1Y3RvcnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0RPTVdp
bmRvd0NvbnN0cnVjdG9ycy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI1ZGI1OGQ2NjhkODZiNmNlYmRhMzYx
NTNkMjA2ZDNjMDlhYjM1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9ET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsCkBAIC0wLDAgKzEsNiBA
QAorcGFydGlhbCBpbnRlcmZhY2UgRE9NV2luZG93IHsKKyAgICBhdHRyaWJ1dGUgRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IgRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OworICAg
IGF0dHJpYnV0ZSBUZXN0Tm9kZUNvbnN0cnVjdG9yIFRlc3ROb2RlOworICAgIGF0dHJpYnV0ZSBU
ZXN0T2JqQ29uc3RydWN0b3IgVGVzdE9iamVjdDsKKyAgICBhdHRyaWJ1dGUgVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudENvbnN0cnVjdG9yIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQ7Cit9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgwZjM1MmYw
MmI4YTUzNDMyMTIwM2JlNDcxOTdjYWVkYWRjYjU5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5pZGwKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUgOiBXb3JrZXJHbG9iYWxTY29wZSB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0
b3JzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9EZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTBkOTVjOGZlOTQ0
OTZjODAzOGQxMTAzZTBhN2ZhY2QzNjAzOTRkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwKQEAgLTAsMCArMSwyIEBACitwYXJ0aWFsIGludGVyZmFjZSBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZSB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmlk
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44OTVmMjQyYjBkODlmODEyNzg4MDkxNTE3NzEwM2UwNzZmMTQ1NjFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5pZGwKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAg
IEpTR2VuZXJhdGVUb0pTT2JqZWN0CitdIGRpY3Rpb25hcnkgRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93RGljdCB7CisgICAgVGVzdE9iaiBvYmo7Cit9OworCitbCisgICAgRXhwb3NlZD0oV2luZG93
LFdvcmtlciksCisgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQorXSBpbnRlcmZhY2UgRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93IHsKKyAgICBjb25zdHJ1Y3RvcigpOworCisgICAgRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93RGljdCBkb1NvbWV0aGluZygpOworfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0JpbmRpbmdUZXN0R2xvYmFs
Q29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWI2NmFk
NmNmMjg2OTM3YzY3NDU1NmQzZTgwYmZiNWQzNDZjMWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTQmluZGluZ1Rlc3RHbG9iYWxD
b25zdHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2Vu
ZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNCaW5kaW5nVGVzdEdsb2Jh
bENvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMu
Y3BwIGFyZSBjcmVhdGVkIGZvciBCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwsIGFu
ZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5l
cmF0ZSBKU0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNCaW5kaW5n
VGVzdEdsb2JhbENvbnN0cnVjdG9ycy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0
IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3Jz
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVz
dEdsb2JhbENvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYjY2YWQ2Y2YyODY5MzdjNjc0NTU2
ZDNlODBiZmI1ZDM0NmMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5oCkBA
IC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVs
bCBidWlsZCBzY3JpcHRzIHRoYXQgSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5oIGFu
ZAorICAgIEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZv
ciBCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVu
dCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBKU0JpbmRpbmdUZXN0
R2xvYmFsQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVj
dG9ycy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBj
b21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc1YjE5OTY1MzEwZWFkM2JjMTZm
YjMyYmQyMjllNmIyN2U3YzQ3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuY3BwCkBAIC0wLDAgKzEsMzM4IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKU0RPTVdpbmRvdy5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiSlNET01BdHRyaWJ1dGUuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3Ry
dWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93LmgiCisjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgorI2luY2x1ZGUgIkpTVGVzdE9iai5oIgor
I2luY2x1ZGUgIkpTVGVzdFByb21pc2VSZWplY3Rpb25FdmVudC5oIgorI2luY2x1ZGUgIkpTV2lu
ZG93UHJveHkuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBB
bmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU0RPTVdpbmRvd0NvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU0RPTVdpbmRvd0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dU
ZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1Zh
bHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTRE9NV2luZG93VGVzdE5vZGVDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93VGVzdE9iamVj
dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTRE9NV2luZG93VGVzdE9iamVjdENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNET01XaW5kb3dUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCit1c2luZyBKU0RPTVdpbmRv
d0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNET01XaW5k
b3c+OworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU0RPTVdpbmRvd1RhYmxlSW5kZXhbMTBdID0geworICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAwLCA4IH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEs
IC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDMsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwK
KyAgICB7IDEsIDkgfSwKKyAgICB7IDIsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU0RPTVdpbmRvd1RhYmxlVmFsdWVzW10gPQoreworICAgIHsgIkV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3dDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTRE9NV2luZG93RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29u
c3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0Tm9kZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJf
dClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNET01XaW5kb3dUZXN0
Tm9kZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNET01XaW5kb3dUZXN0Tm9kZUNvbnN0cnVjdG9yKSB9IH0sCisg
ICAgeyAiVGVzdE9iamVjdCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0
b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5j
PihzZXRKU0RPTVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzRE9NV2luZG93VGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0
eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Q29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNET01X
aW5kb3dUYWJsZSA9IHsgNCwgNywgdHJ1ZSwgSlNET01XaW5kb3c6OmluZm8oKSwgSlNET01XaW5k
b3dUYWJsZVZhbHVlcywgSlNET01XaW5kb3dUYWJsZUluZGV4IH07Cit0ZW1wbGF0ZTw+IEpTVmFs
dWUgSlNET01XaW5kb3dDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBKU0V2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Cit9CisK
K3RlbXBsYXRlPD4gdm9pZCBKU0RPTVdpbmRvd0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVy
dGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC5nZXRQ
cm90b3R5cGVEaXJlY3Qodm0pLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJET01XaW5kb3ciX3MpLCBKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU0RPTVdpbmRvd0NvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJET01XaW5kb3ciLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NV2luZG93Q29uc3RydWN0b3IpIH07CisK
Ky8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNET01XaW5kb3dQcm90b3R5cGVUYWJsZUluZGV4WzJdID0geworICAg
IHsgLTEsIC0xIH0sCisgICAgeyAwLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRh
YmxlVmFsdWUgSlNET01XaW5kb3dQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJj
b25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNET01XaW5kb3dDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTRE9NV2luZG93
Q29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNET01XaW5k
b3dQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNET01XaW5kb3c6OmluZm8oKSwgSlNE
T01XaW5kb3dQcm90b3R5cGVUYWJsZVZhbHVlcywgSlNET01XaW5kb3dQcm90b3R5cGVUYWJsZUlu
ZGV4IH07Citjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dQcm90b3R5cGU6OnNfaW5mbyA9IHsg
IkRPTVdpbmRvdyIsICZCYXNlOjpzX2luZm8sICZKU0RPTVdpbmRvd1Byb3RvdHlwZVRhYmxlLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRE9NV2luZG93UHJvdG90eXBlKSB9OworCit2
b2lkIEpTRE9NV2luZG93UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwg
SlNET01XaW5kb3c6OmluZm8oKSwgSlNET01XaW5kb3dQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRo
aXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitj
b25zdCBDbGFzc0luZm8gSlNET01XaW5kb3c6OnNfaW5mbyA9IHsgIkRPTVdpbmRvdyIsICZCYXNl
OjpzX2luZm8sICZKU0RPTVdpbmRvd1RhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTRE9NV2luZG93KSB9OworCitKU0RPTVdpbmRvdzo6SlNET01XaW5kb3coVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERPTVdpbmRvdz4mJiBpbXBsLCBKU1dpbmRvd1Byb3h5KiBw
cm94eSkKKyAgICA6IEpTRXZlbnRUYXJnZXQodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSwg
cHJveHkpCit7Cit9CisKK3ZvaWQgSlNET01XaW5kb3c6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNXaW5kb3dQcm94eSogcHJveHkpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIHBy
b3h5KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmpl
Y3QsIERPTVdpbmRvdz46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2
ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBB
Y3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Z2V0Q29uc3Ry
dWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0RPTVdpbmRvd0NvbnN0cnVjdG9yPih2bSwgKmpz
Q2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit0ZW1w
bGF0ZTw+IGlubGluZSBKU0RPTVdpbmRvdyogSURMQXR0cmlidXRlPEpTRE9NV2luZG93Pjo6Y2Fz
dChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlKQoreworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93Kj4oSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRv
KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93UHJvdG90eXBlKj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRo
cm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNET01XaW5kb3c6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xv
YmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU0RPTVdpbmRvd0NvbnN0cnVjdG9yKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNET01X
aW5kb3dQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlm
IChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAgcmV0dXJuIHBy
b3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cmIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksICZ0aGlzT2JqZWN0KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNE
T01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OmdldDxqc0RP
TVdpbmRvd0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Iik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU0RPTVdpbmRvd0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTVdpbmRvdyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciKSwgc3RybGVuKCJFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3ciKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU0RPTVdpbmRvd0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTRE9NV2luZG93Pjo6c2V0PHNldEpTRE9N
V2luZG93RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIkV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNET01XaW5kb3dUZXN0Tm9k
ZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTVdpbmRvdyYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5vZGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCAmdGhpc09iamVjdCk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIGpzRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OmdldDxqc0RPTVdpbmRvd1Rl
c3ROb2RlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
ICJUZXN0Tm9kZSIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNET01XaW5kb3dUZXN0
Tm9kZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTVdpbmRvdyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2luZyBh
IGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCJUZXN0Tm9kZSIpLCBzdHJsZW4oIlRlc3ROb2RlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wg
c2V0SlNET01XaW5kb3dUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTRE9NV2luZG93Pjo6c2V0
PHNldEpTRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE5vZGUiKTsKK30KKworc3RhdGlj
IGlubGluZSBKU1ZhbHVlIGpzRE9NV2luZG93VGVzdE9iamVjdENvbnN0cnVjdG9yR2V0dGVyKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTVdpbmRvdyYgdGhpc09iamVj
dCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJu
IEpTVGVzdE9iajo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCksICZ0aGlzT2JqZWN0KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNET01XaW5kb3dUZXN0T2Jq
ZWN0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNET01XaW5kb3c+OjpnZXQ8anNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0T2JqZWN0Iik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU0RPTVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3Rv
clNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cm
IHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE9iamVj
dCIpLCBzdHJsZW4oIlRlc3RPYmplY3QiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU0RPTVdp
bmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OnNldDxzZXRKU0RP
TVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdE9iamVjdCIpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NV2luZG93
JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsK
KyAgICByZXR1cm4gSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgJnRoaXNPYmplY3QpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc0RPTVdpbmRvd1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdp
bmRvdz46OmdldDxqc0RPTVdpbmRvd1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rv
ckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTRE9NV2luZG93VGVz
dFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTVdpbmRvdyYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50IiksIHN0cmxl
bigiVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpT
RE9NV2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTRE9N
V2luZG93Pjo6c2V0PHNldEpTRE9NV2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0
cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFs
dWUsICJUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Iik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2Uq
IEpTRE9NV2luZG93OjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCit7CisgICAgYXV0byYg
Y2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEp
OworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7CisgICAgaWYgKGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCkpCisgICAgICAg
IHJldHVybiBzcGFjZTsKKyAgICBzcGFjZXMubV9zdWJzcGFjZUZvckRPTVdpbmRvdyA9IG1ha2VV
bmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEu
bV9oZWFwQ2VsbFR5cGVGb3JKU0RPTVdpbmRvdy5nZXQoKSwgSlNET01XaW5kb3cpOworICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cuZ2V0KCk7CitJR05PUkVf
V0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU0RPTVdpbmRvdzo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNw
YWNlOworfQorCit2b2lkIEpTRE9NV2luZG93OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhl
YXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0RPTVdpbmRvdyo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxs
KGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChj
ZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgp
LnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisK
KyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25z
dCBfX2lkZW50aWZpZXIoIj8/XzdET01XaW5kb3dAV2ViQ29yZUBANkJAIilbXSkoKTsgfQorI2Vs
c2UKK2V4dGVybiAiQyIgeyBleHRlcm4gdm9pZCogX1pUVk43V2ViQ29yZTlET01XaW5kb3dFW107
IH0KKyNlbmRpZgorI2VuZGlmCisKK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RE9N
V2luZG93PiYmIGltcGwpCit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAg
Y29uc3Qgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5w
dHIoKSk7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRl
ciA9IF9faWRlbnRpZmllcigiPz9fN0RPTVdpbmRvd0BXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisg
ICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmU5RE9NV2luZG93
RVsyXTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWlscyBET01XaW5kb3cgZG9lcyBub3Qg
aGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQgdG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0
aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5bW9ycGhpYzxET01XaW5kb3c+Ojp2YWx1ZSwgIkRP
TVdpbmRvdyBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBh
c3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8v
IERPTVdpbmRvdyBoYXMgc3ViY2xhc3Nlcy4gSWYgRE9NV2luZG93IGhhcyBzdWJjbGFzc2VzIHRo
YXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBET01X
aW5kb3cgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRp
bmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElE
TCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBl
eHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8
RE9NV2luZG93PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01XaW5kb3cmIGltcGwpCit7CisgICAgcmV0dXJu
IHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworRE9N
V2luZG93KiBKU0RPTVdpbmRvdzo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2lu
ZG93Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk2OGRhNzhh
NmMwMzFlMjAxMzFlZDI0M2U1MDA3NDNhZDMyOWU0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oCkBAIC0wLDAg
KzEsMTE0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBz
b3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVy
YXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKKworY2xhc3MgSlNXaW5kb3dQcm94
eTsKKworY2xhc3MgSlNET01XaW5kb3cgOiBwdWJsaWMgSlNFdmVudFRhcmdldCB7CitwdWJsaWM6
CisgICAgdXNpbmcgQmFzZSA9IEpTRXZlbnRUYXJnZXQ7CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9
IERPTVdpbmRvdzsKKyAgICBzdGF0aWMgSlNET01XaW5kb3cqIGNyZWF0ZShKU0M6OlZNJiB2bSwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERPTVdpbmRvdz4mJiBpbXBsLCBKU1dpbmRv
d1Byb3h5KiBwcm94eSkKKyAgICB7CisgICAgICAgIEpTRE9NV2luZG93KiBwdHIgPSBuZXcgKE5v
dE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRE9NV2luZG93Pih2bS5oZWFwKSkgSlNET01XaW5k
b3codm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSwgcHJveHkpOworICAgICAgICBwdHItPmZp
bmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgc3RhdGljIERPTVdpbmRvdyogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwor
CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhK
U0M6Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFy
cmF5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1
YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2Rl
ID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9Cisg
ICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7
CisgICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXIm
KTsKKyAgICBET01XaW5kb3cmIHdyYXBwZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PERPTVdpbmRvdyY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQorcHVibGlj
OgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpT
dHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEpTQzo6SW1wbGVt
ZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlOworcHJv
dGVjdGVkOgorICAgIEpTRE9NV2luZG93KEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxE
T01XaW5kb3c+JiYsIEpTV2luZG93UHJveHkqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mLCBKU1dpbmRvd1Byb3h5Kik7Cit9OworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBET01XaW5kb3cmKTsKK2lubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01XaW5kb3cqIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwp
IDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPERPTVdpbmRvdz4mJik7Citp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
UHRyPERPTVdpbmRvdz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkg
OiBKU0M6OmpzTnVsbCgpOyB9CisKK2NsYXNzIEpTRE9NV2luZG93UHJvdG90eXBlIGZpbmFsIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNET01XaW5kb3dQcm90b3R5cGUq
IGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTRE9NV2luZG93UHJvdG90
eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRE9NV2luZG93UHJv
dG90eXBlPih2bS5oZWFwKSkgSlNET01XaW5kb3dQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRE9NV2luZG93UHJvdG90eXBlLCBCYXNlKTsK
KyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMg
SlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU0RPTVdpbmRvd1Byb3RvdHlwZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTRE9NV2luZG93UHJvdG90eXBlLCBKU0RPTVdp
bmRvd1Byb3RvdHlwZTo6QmFzZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxET01XaW5kb3c+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0RP
TVdpbmRvdzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gRE9NV2luZG93KjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3Rv
cnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmMxMmU5MjQ4ZTJlZWFmNDg1NzE1NjE5ZmIyZmQ4MjAzZjRmMDkx
MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQg
SlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU0RPTVdpbmRvd0NvbnN0cnVjdG9y
cy5jcHAgYXJlIGNyZWF0ZWQgZm9yIERPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVz
CisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBK
U0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTRE9NV2luZG93Q29uc3RydWN0b3Jz
LmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBp
bGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTRE9NV2luZG93Q29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTJl
OTI0OGUyZWVhZjQ4NTcxNTYxOWZiMmZkODIwM2Y0ZjA5MTFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93Q29uc3Ry
dWN0b3JzLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQg
anVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5o
IGFuZAorICAgIEpTRE9NV2luZG93Q29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgRE9N
V2luZG93Q29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBz
Y3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTRE9NV2luZG93Q29uc3RydWN0b3JzLmgg
YW5kCisgICAgSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlz
IGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFkM2QyN2ZmZWZiYTAx
Y2E2NDE5ZjIzMDQwMGJiMWU0NzEwNTI0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
LmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5oIgor
CisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2Vz
LmgiCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJs
ZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBl
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKwordXNpbmcgSlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGU8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZT47CisKK3RlbXBsYXRlPD4gSlNW
YWx1ZSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZv
clN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gSlNXb3JrZXJHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3Io
dm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGdsb2JhbE9iamVjdC5nZXRQcm90b3R5cGVEaXJlY3Qo
dm0pLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSJfcyksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfTsKKworLyog
SGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFj
dEhhc2hJbmRleCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVJbmRl
eFsyXSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMCwgLTEgfSwKK307CisKKworc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5
cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwg
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6aW5mbygpLCBKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXMsIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZUluZGV4IH07Citjb25zdCBDbGFzc0luZm8gSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6c19pbmZvID0geyAiRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGUiLCAmQmFzZTo6c19pbmZvLCAmSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3Rv
dHlwZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGVQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGU6OmluZm8oKSwgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9V
VF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlOjpzX2luZm8gPSB7ICJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZSkgfTsKKworSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBSZWY8RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU+JiYgaW1wbCkKKyAgICA6IEpTV29ya2Vy
R2xvYmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTUHJv
eHkqIHByb3h5KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBEZWRpY2F0
ZWRXb3JrZXJHbG9iYWxTY29wZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMg
W0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xh
c3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNWYWx1ZSBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBw
cm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQor
eworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2
bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygp
OworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzcGFjZXMu
bV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29T
dWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxs
VHlwZUZvckpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCksIEpTRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigi
dW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1j
b21wYXJlIikKKyAgICBpZiAoJkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0
cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQor
ICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2Up
OworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBz
cGFjZTsKK30KKwordm9pZCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVh
cChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKj4oY2VsbCk7Cisg
ICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndy
YXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
KyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6
OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDc2ZDA3MzA2Nzg0ZjJkN2U0
NjI0YWM1M2RiNWE5ZGI3N2EwZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaApA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBi
eSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2Nv
cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZTsKKworY2xhc3MgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA6IHB1YmxpYyBK
U1dvcmtlckdsb2JhbFNjb3BlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNXb3JrZXJH
bG9iYWxTY29wZTsKKyAgICB1c2luZyBET01XcmFwcGVkID0gRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGU7CisgICAgc3RhdGljIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUqIGNyZWF0ZShK
U0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlPiYmIGltcGwsIEpTQzo6SlNQcm94eSogcHJveHkpCisgICAgeworICAgICAg
ICBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU+KHZtLmhlYXApKSBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpOwor
ICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisgICAgICAgIHJldHVybiBw
dHI7CisgICAgfQorCisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0
Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJ
c29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBj
b25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwo
dm0pOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBs
KEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6
OkhlYXBBbmFseXplciYpOworICAgIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVk
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZSY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAg
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwg
UmVmPERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEpTQzo6Vk0mLCBKU0M6OkpTUHJveHkqKTsKK307CisKKworY2xhc3MgSlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxP
YmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7
CisgICAgc3RhdGljIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNE
ZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7Cisg
ICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBl
LCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJz
cGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NV
QlNQQUNFX1NIQVJBQkxFKEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJh
c2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0
YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2
bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
Qzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlUHJvdG90eXBlOjpCYXNlKTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlPiB7CisgICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsKKyAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUqOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyY2NlZWFlYmNj
NGRlN2YwZmU3MzgwMTljYjQ1MjhhNDRiYzJlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU0RlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIERlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBi
dWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJl
IHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjJjY2VlYWViY2M0
ZGU3ZjBmZTczODAxOWNiNDUyOGE0NGJjMmUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBn
ZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIERlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWls
ZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRy
aWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWQyOGY2ZDA3NzJjMDk4YjYxYTYyMGVmMWMwZWFlYTA0ZmI3NzY3
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0
LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3Mu
cGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01PcGVyYXRpb24uaCIKKyNp
bmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIkpTVGVzdE9iai5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0
cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9P
YmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclBy
ZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29y
ZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCit0ZW1wbGF0ZTw+IEV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdzo6RGljdCBjb252ZXJ0RGljdGlvbmFyeTxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6
OkRpY3Q+KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGJvb2wgaXNO
dWxsT3JVbmRlZmluZWQgPSB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpOworICAgIGF1dG8qIG9i
amVjdCA9IGlzTnVsbE9yVW5kZWZpbmVkID8gbnVsbHB0ciA6IHZhbHVlLmdldE9iamVjdCgpOwor
ICAgIGlmIChVTkxJS0VMWSghaXNOdWxsT3JVbmRlZmluZWQgJiYgIW9iamVjdCkpIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRp
Y3QgcmVzdWx0OworICAgIEpTVmFsdWUgb2JqVmFsdWU7CisgICAgaWYgKGlzTnVsbE9yVW5kZWZp
bmVkKQorICAgICAgICBvYmpWYWx1ZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgZWxzZSB7CisgICAg
ICAgIG9ialZhbHVlID0gb2JqZWN0LT5nZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sICJvYmoiKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgeyB9KTsKKyAgICB9CisgICAgaWYgKCFvYmpWYWx1ZS5pc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgIHJlc3VsdC5vYmogPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4o
bGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqVmFsdWUpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pT
Qzo6SlNPYmplY3QqIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3QmIGRpY3Rpb25hcnkpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKworICAgIGF1dG8gcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC5vYmplY3RQcm90b3R5cGUoKSk7CisKKyAgICBpZiAoIUlETEludGVyZmFjZTxUZXN0T2Jq
Pjo6aXNOdWxsVmFsdWUoZGljdGlvbmFyeS5vYmopKSB7CisgICAgICAgIGF1dG8gb2JqVmFsdWUg
PSB0b0pTPElETEludGVyZmFjZTxUZXN0T2JqPj4obGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBJRExJbnRlcmZhY2U8VGVzdE9iaj46OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZShk
aWN0aW9uYXJ5Lm9iaikpOworICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAib2JqIiksIG9ialZhbHVlKTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworLy8gRnVuY3Rpb25zCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRG9T
b21ldGhpbmcoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6Q2FsbEZyYW1lKik7CisKKy8vIEF0
dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
d0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworCitjbGFzcyBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3Rv
dHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZSogcHRyID0gbmV3
IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1By
b3RvdHlwZT4odm0uaGVhcCkpIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlKHZt
LCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgewor
ICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvd1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZSwgSlNF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGU6OkJhc2UpOworCit1c2luZyBKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3RvcjxKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdz47CisKK3RlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQoreworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKj4oY2FsbEZy
YW1lLT5qc0NhbGxlZSgpKTsKKyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAgYXV0byBvYmpl
Y3QgPSBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmNyZWF0ZSgpOworICAgIHN0YXRpY19hc3Nl
cnQoZGVjbHR5cGUob2JqZWN0KTo6aXNSZWYpOworICAgIGF1dG8ganNWYWx1ZSA9IHRvSlNOZXds
eUNyZWF0ZWQ8SURMSW50ZXJmYWNlPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0
KSk7CisgICAgc2V0U3ViY2xhc3NTdHJ1Y3R1cmVJZk5lZWRlZDxFeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3c+KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXNPYmplY3QoanNWYWx1ZSkp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpOworfQorCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IFVOVVNFRF9QQVJBTSh2bSk7CisgICAgcmV0dXJuIGdsb2JhbE9iamVjdC5mdW5jdGlvblByb3Rv
dHlwZSgpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dD
b25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
cHJvdG90eXBlLCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6cHJvdG90eXBlKHZtLCBnbG9i
YWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZp
YWxTdHJpbmcodm0sICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciX3MpLCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCks
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3ciLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IpIH07CisKKy8qIEhh
c2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUg
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAg
ICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IpIH0gfSwKKyAg
ICB7ICJkb1NvbWV0aGluZyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxS
YXdOYXRpdmVGdW5jdGlvbj4oanNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGVGdW5j
dGlvbkRvU29tZXRoaW5nKSwgKGludHB0cl90KSAoMCkgfSB9LAorfTsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlOjpzX2luZm8gPSB7ICJFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3ciLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlKSB9
OworCit2b2lkIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlaWZ5
U3RhdGljUHJvcGVydGllcyh2bSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmluZm8oKSwg
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwor
ICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBD
bGFzc0luZm8gSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnNfaW5mbyA9IHsgIkV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpIH07CisKK0pTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyhTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmPEV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdz4mJiBpbXBsKQorICAgIDogSlNET01XcmFwcGVyPEV4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdz4oc3RydWN0dXJlLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpCit7
Cit9CisKK3ZvaWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgQVNTRVJUKGluaGVy
aXRzKHZtLCBpbmZvKCkpKTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxB
Y3RpdmVET01PYmplY3QsIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz46OnZhbHVlLCAiSW50ZXJm
YWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVt
ZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNP
YmplY3QqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpjcmVhdGVQcm90b3R5cGUoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworSlNP
YmplY3QqIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojpwcm90b3R5cGUoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitK
U1ZhbHVlIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0s
IGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERP
TUNvbnN0cnVjdG9yPEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3I+KHZtLCAq
anNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSk7Cit9CisKK3Zv
aWQgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwp
Cit7CisgICAgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyo+KGNlbGwpOworICAgIHRoaXNPYmplY3Qt
PkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojp+SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3co
KTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIElE
TE9wZXJhdGlvbjxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz46OmNhc3QoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQoreworICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Kj4oSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIGNhbGxGcmFtZS50aGlzVmFsdWUoKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYg
KFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihs
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZN
KGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisK
K2Jvb2wgc2V0SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAg
IHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBl
RnVuY3Rpb25Eb1NvbWV0aGluZ0JvZHkoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5hbWUgSURMT3BlcmF0aW9u
PEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Pjo6Q2xhc3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgVU5VU0VEX1BB
UkFNKHRocm93U2NvcGUpOworICAgIFVOVVNFRF9QQVJBTShjYWxsRnJhbWUpOworICAgIGF1dG8m
IGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRo
cm93U2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETERpY3Rpb25hcnk8RXhwb3NlZFRvV29y
a2VyQW5kV2luZG93OjpEaWN0Pj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5n
bG9iYWxPYmplY3QoKSwgaW1wbC5kb1NvbWV0aGluZygpKSkpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlRnVuY3Rp
b25Eb1NvbWV0aGluZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisgICAgcmV0dXJuIElETE9wZXJhdGlvbjxKU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdz46OmNhbGw8anNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGVG
dW5jdGlvbkRvU29tZXRoaW5nQm9keT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYWxsRnJhbWUs
ICJkb1NvbWV0aGluZyIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdzo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNs
aWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsK
KyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRv
KiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Lmdl
dCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jh
c2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvdz4gfHwgIUpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpuZWVkc0Rlc3RydWN0aW9uKTsK
KyAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVP
YmplY3QsIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93PikKKyAgICAgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2Vs
bFR5cGUuZ2V0KCksIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKKyAgICBlbHNlCisgICAg
ICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gbWFrZVVu
aXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVhcCwgdm0uY2VsbEhlYXBD
ZWxsVHlwZS5nZXQoKSwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpOworICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuZ2V0KCk7
CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYgKCZKU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdzo6dmlzaXRPdXRwdXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWlu
dFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FS
TklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2b2lkIEpTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93OjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6
ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdyo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNl
bGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxs
LCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0
cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKK2Jv
b2wgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dPd25lcjo6aXNSZWFjaGFibGVGcm9tT3BhcXVl
Um9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqLCBTbG90VmlzaXRv
ciYgdmlzaXRvciwgY29uc3QgY2hhcioqIHJlYXNvbikKK3sKKyAgICBVTlVTRURfUEFSQU0oaGFu
ZGxlKTsKKyAgICBVTlVTRURfUEFSQU0odmlzaXRvcik7CisgICAgVU5VU0VEX1BBUkFNKHJlYXNv
bik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEpTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93T3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lk
KiBjb250ZXh0KQoreworICAgIGF1dG8qIGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93ID0gc3Rh
dGljX2Nhc3Q8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqPihoYW5kbGUuc2xvdCgpLT5hc0Nl
bGwoKSk7CisgICAgYXV0byYgd29ybGQgPSAqc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4o
Y29udGV4dCk7CisgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsICZqc0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdy0+d3JhcHBlZCgpLCBqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93PiYm
IGltcGwpCit7CisgICAgLy8gSWYgeW91IGhpdCB0aGlzIGZhaWx1cmUgdGhlIGludGVyZmFjZSBk
ZWZpbml0aW9uIGhhcyB0aGUgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQorICAgIC8vIGF0dHJp
YnV0ZS4gWW91IHNob3VsZCByZW1vdmUgdGhhdCBhdHRyaWJ1dGUuIElmIHRoZSBjbGFzcyBoYXMg
c3ViY2xhc3NlcworICAgIC8vIHRoYXQgbWF5IGJlIHBhc3NlZCB0aHJvdWdoIHRoaXMgdG9KUygp
IGZ1bmN0aW9uIHlvdSBzaG91bGQgdXNlIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbgorICAgIC8v
IGF0dHJpYnV0ZSB0byBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuCisgICAgc3RhdGljX2Fzc2Vy
dCghc3RkOjppc19wb2x5bW9ycGhpYzxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+Ojp2YWx1ZSwg
IkV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyBpcyBwb2x5bW9ycGhpYyBidXQgdGhlIElETCBjbGFp
bXMgaXQgaXMgbm90Iik7CisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8RXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93PihnbG9iYWxPYmplY3QsIFdURk1vdmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cmIGltcGwp
Cit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBp
bXBsKTsKK30KKworRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KiBKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdzo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93Kj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY2MjYzYzIxYWRiODU1YTAyMTAxOGRiMDEzM2ZiYzU1
Njk0MWJkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCkBAIC0wLDAgKzEsOTggQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnREaWN0aW9uYXJ5
LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cgOiBwdWJsaWMgSlNET01XcmFwcGVyPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4g
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8RXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93PjsKKyAgICBzdGF0aWMgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIGNyZWF0
ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93PiYmIGltcGwpCisgICAgeworICAgICAg
ICBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFs
bG9jYXRlQ2VsbDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4oZ2xvYmFsT2JqZWN0LT52bSgp
LmhlYXApKSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmpl
Y3QsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9i
amVjdC0+dm0oKSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIHRvV3Jh
cHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Qzo6SlNDZWxsKik7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpT
Qzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwor
ICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOworcHJvdGVjdGVkOgorICAgIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KEpT
Qzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8RXhwb3NlZFRvV29ya2VyQW5k
V2luZG93PiYmKTsKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKKwor
Y2xhc3MgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dPd25lciA6IHB1YmxpYyBKU0M6OldlYWtI
YW5kbGVPd25lciB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzUmVhY2hhYmxlRnJvbU9w
YXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQsIEpTQzo6
U2xvdFZpc2l0b3ImLCBjb25zdCBjaGFyKiopOworICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZShK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0KTsKK307CisKK2lubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEV4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdyopCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEpTRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93T3duZXI+IG93bmVyOworICAgIHJldHVybiAmb3duZXIuZ2V0
KCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KEV4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dyogd3JhcHBhYmxlT2JqZWN0KQoreworICAgIHJldHVybiB3cmFwcGFibGVPYmplY3Q7Cit9CisK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVj
dCosIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyogaW1wbCkgeyByZXR1
cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqaW1wbCkg
OiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8RXhwb3NlZFRvV29ya2VyQW5k
V2luZG93PiYmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWZQdHI8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93PiYmIGltcGwpIHsgcmV0
dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cqOworfTsKK3RlbXBsYXRlPD4gRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpEaWN0
IGNvbnZlcnREaWN0aW9uYXJ5PEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6RGljdD4oSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNPYmplY3QqIGNvbnZlcnRE
aWN0aW9uYXJ5VG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNET01HbG9iYWxPYmplY3QmLCBj
b25zdCBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3QmKTsKKworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjI1YWRiYzI3NDVkYTM5ZmU5M2ZjOGZkZjAwODhmOTUyOWE2NWNjOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZS5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
RE9NSXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRl
ICJQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0
SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFy
YXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKwordXNpbmcgSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGU8SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZT47CisKK3RlbXBsYXRlPD4gSlNW
YWx1ZSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0
cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKHZt
LCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+cHJvdG90eXBlLCBnbG9iYWxPYmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KHZtKSwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZt
LCAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpS
ZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
OworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIlBhaW50V29ya2xldEdsb2JhbFNjb3BlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNQYWlu
dFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXhbMl0gPSB7CisgICAgeyAtMSwg
LTEgfSwKKyAgICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7Cisg
ICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1
ZUZ1bmM+KHNldEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAorfTsK
Kworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90
eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmluZm8o
KSwgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzLCBKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVJbmRleCB9OworY29uc3QgQ2xhc3NJbmZv
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlBhaW50V29y
a2xldEdsb2JhbFNjb3BlIiwgJkJhc2U6OnNfaW5mbywgJkpTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlUHJvdG90eXBlKSB9OworCit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlOjppbmZvKCksIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5
cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJB
TlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6c19pbmZvID0geyAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGUpIH07CisKK0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OkpTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFBhaW50V29ya2xldEds
b2JhbFNjb3BlPiYmIGltcGwpCisgICAgOiBKU1dvcmtsZXRHbG9iYWxTY29wZSh2bSwgc3RydWN0
dXJlLCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNQcm94eSogcHJveHkpCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNf
YmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFBhaW50V29ya2xldEdsb2JhbFNjb3BlPjo6dmFsdWUs
ICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3Vn
aCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKwor
fQorCitKU1ZhbHVlIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKFZN
JiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2Jh
bE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBp
ZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQor
Citib29sIHNldEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkp
OworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisgICAg
cmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25zdHJ1
Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitKU0M6Oklzb1N1YnNw
YWNlKiBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0
YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEuc3Vic3Bh
Y2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdv
cmtsZXRHbG9iYWxTY29wZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHNwYWNl
cy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPElzb1N1
YnNwYWNlPiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxU
eXBlRm9ySlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5nZXQoKSwgSlNQYWludFdvcmtsZXRHbG9i
YWxTY29wZSk7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvclBhaW50V29y
a2xldEdsb2JhbFNjb3BlLmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJs
ZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQor
ICAgIGlmICgmSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6dmlzaXRPdXRwdXRDb25zdHJhaW50
cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisgICAgICAgIGNsaWVu
dERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7CitJR05PUkVfV0FS
TklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNwYWNlOworfQorCit2
b2lkIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwg
SGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUqPihjZWxsKTsKKyAgICBhbmFseXplci5zZXRXcmFw
cGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBlZCgpKTsKKyAgICBpZiAo
dGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICBhbmFseXplci5z
ZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwg
YW5hbHl6ZXIpOworfQorCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYxZThjNjk0OWMzZTQ1MDk1Mjk0Y2NjMzU4MDhkNzUzYzUyODg0ZTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBU
aGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBO
T1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgi
CisjaW5jbHVkZSAiSlNXb3JrbGV0R2xvYmFsU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBQYWludFdvcmtsZXRHbG9iYWxTY29wZTsKKworY2xhc3MgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZSA6IHB1YmxpYyBKU1dvcmtsZXRHbG9iYWxTY29wZSB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgQmFzZSA9IEpTV29ya2xldEdsb2JhbFNjb3BlOworICAgIHVzaW5nIERPTVdyYXBw
ZWQgPSBQYWludFdvcmtsZXRHbG9iYWxTY29wZTsKKyAgICBzdGF0aWMgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJl
LCBSZWY8UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU+JiYgaW1wbCwgSlNDOjpKU1Byb3h5KiBwcm94
eSkKKyAgICB7CisgICAgICAgIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUqIHB0ciA9IG5ldyAo
Tm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZT4odm0u
aGVhcCkpIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShp
bXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKyAgICAgICAg
cmV0dXJuIHB0cjsKKyAgICB9CisKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBK
U0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCop
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRp
YyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50
bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNl
Rm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFj
ZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2Vs
bCosIEpTQzo6SGVhcEFuYWx5emVyJik7CisgICAgUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUmIHdy
YXBwZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBhaW50V29y
a2xldEdsb2JhbFNjb3BlJj4oQmFzZTo6d3JhcHBlZCgpKTsKKyAgICB9Citwcm90ZWN0ZWQ6Cisg
ICAgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBS
ZWY8UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
SlNDOjpWTSYsIEpTQzo6SlNQcm94eSopOworfTsKKworCitjbGFzcyBKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlUHJvdG90eXBlIGZpbmFsIDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7
CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBz
dGF0aWMgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlw
ZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVBy
b3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJF
X0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHsKKyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5
cGUsIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGU6OkJhc2UpOworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGU+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBQYWludFdvcmtsZXRHbG9iYWxT
Y29wZSo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjNjN2RjMDlkNDYyYmZmMDdhOWEzYTFhMWMyZDVmMTU2OGU3MmE4MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1
aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNQYWludFdvcmtsZXRHbG9iYWxT
Y29wZUNvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQg
dG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2M3ZGMwOWQ0NjJiZmYwN2E5YTNhMWEx
YzJkNWYxNTY4ZTcyYTgzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRv
IHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuaCBhbmQKKyAgICBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNw
cCBhcmUgY3JlYXRlZCBmb3IgUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRs
LCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8g
Z2VuZXJhdGUgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGFuZAorICAg
IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxk
LiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDRjNmEzZGNjOTRi
MDA2OTEwYzM5MDdjYjVjZTNkMGJkYWYyNDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmNwcApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCIKKwor
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFw
QW5hbHl6ZXIuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4K
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworLy8gQXR0cmlidXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK3VzaW5nIEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT47CisKK3RlbXBsYXRlPD4gSlNWYWx1ZSBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlND
OjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIEpTV29ya2VyR2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2Jq
ZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnBy
b3RvdHlwZSwgZ2xvYmFsT2JqZWN0LmdldFByb3RvdHlwZURpcmVjdCh2bSksIEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25s
eSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0s
IHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlNlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZSJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3Rl
bXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3I6OnNfaW5mbyA9IHsgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBl
ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXhbMl0gPSB7CisgICAgeyAtMSwgLTEgfSwK
KyAgICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsg
ImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4oc2V0SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAorfTsKKwor
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlw
ZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6aW5mbygp
LCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzLCBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKK2NvbnN0IENsYXNzSW5m
byBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6c19pbmZvID0geyAiU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlIiwgJkJhc2U6OnNfaW5mbywgJkpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlUHJvdG90eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6aW5mbygpLCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZVByb3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lU
SE9VVF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZTo6c19pbmZvID0geyAiU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZSkgfTsKKworSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OkpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+JiYgaW1wbCkKKyAgICA6IEpTV29ya2VyR2xvYmFsU2Nv
cGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1Byb3h5KiBwcm94eSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgcHJveHkpOworCisgICAgc3RhdGljX2Fz
c2VydCghc3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2Jq
ZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURP
TU9iamVjdC4iKTsKKworfQorCitKU1ZhbHVlIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6
Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxK
U1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUo
dGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmds
b2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0m
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5
bmFtaWNDYXN0PEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKj4odm0sIEpTVmFs
dWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsK
KyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3Bl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWls
dC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0u
cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1
YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3Bh
Y2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFj
ZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIHNwYWNlOworICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0uaGVh
cCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmdldCgpLCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSk7CisgICAgYXV0byogc3BhY2UgPSBz
cGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKK0lHTk9S
RV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVH
SU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2Vz
KCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19F
TkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2VsbCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sK
KyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Kj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwoY2VsbCwgJnRo
aXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwg
IiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCkuc3RyaW5nKCkp
OworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3NTI4YzE1NjEw
MzQ4ZTA5MmVjNjgxOTJmZmViOTFiOTg2NTUzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVy
YXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTV29ya2VyR2xv
YmFsU2NvcGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGU7CisKK2NsYXNzIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIDogcHVibGlj
IEpTV29ya2VyR2xvYmFsU2NvcGUgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU1dvcmtl
ckdsb2JhbFNjb3BlOworICAgIHVzaW5nIERPTVdyYXBwZWQgPSBTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU7CisgICAgc3RhdGljIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGU+JiYgaW1wbCwgSlNDOjpKU1Byb3h5KiBwcm94eSkKKyAgICB7CisgICAgICAgIEpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2Nh
dGVDZWxsPEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlPih2bS5oZWFwKSkgSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0
ci0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9
CisKKworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpHbG9iYWxPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpO
b25BcnJheSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3Rv
cihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNl
KiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAo
bW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYg
dm0pOworICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5
emVyJik7CisgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUm
PihCYXNlOjp3cmFwcGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8U2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6
OkpTUHJveHkqKTsKK307CisKKworY2xhc3MgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90
b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQ
cm90b3R5cGU+KHZtLmhlYXApKSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsK
KyAgICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWlu
T2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlND
OjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAg
OiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09f
U1VCU1BBQ0VfU0hBUkFCTEUoSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlOjpCYXNlKTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZT4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjM2MDhlNTNjYzZmYjZjMTAxYThhODU3MzUyYTQwN2I4ZmVjMjMxYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU1Nl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRo
ZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUg
dHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNjA4ZTUzY2M2ZmI2YzEw
MWE4YTg1NzM1MmE0MDdiOGZlYzIzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRl
ZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZvciBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJv
bSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnMuaCBhbmQKKyAgICBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAg
YXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgor
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKaW5kZXggNmMwZTU0NjAxYTQ2NTk2MWNkYzA2
ODI5MTRlNzZmZWJjZGMxNTJkYS4uODk0MGJlM2IyZTViNzMxMDAwMDNhYzVmYjhmNWFjZTlhZWI2
MDZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKQEAgLTMzLDcgKzMzLDExIEBACiAj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiSlNET01PcGVyYXRpb25SZXR1cm5pbmdQcm9taXNlLmgiCisjaW5j
bHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2lu
Y2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9ucy5oIgogI2luY2x1ZGUgIkpTVGVzdENF
UmVhY3Rpb25zU3RyaW5naWZpZXIuaCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsVHJhY2VyLmgiCkBA
IC03NCw3ICs3OCw2IEBACiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVC
dWlsdGlucy5oIgogI2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9w
ZXJ0aWVzLmgiCiAjaW5jbHVkZSAiSlNUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3Bl
cnRpZXNBbmRPdmVycmlkZUJ1aWx0aW5zLmgiCi0jaW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5oIgogI2luY2x1ZGUgIkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRo
U2VxdWVuY2UuaCIKICNpbmNsdWRlICJKU1Rlc3RPdmVycmlkZUJ1aWx0aW5zLmgiCiAjaW5jbHVk
ZSAiSlNUZXN0UGx1Z2luSW50ZXJmYWNlLmgiCkBAIC05NCw2ICs5Nyw4IEBACiAjaW5jbHVkZSAi
SlNUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTVGVzdFN0
cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiSlNUZXN0VHlwZWRlZnMu
aCIKKyNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiSlNXb3JrbGV0
R2xvYmFsU2NvcGUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKQEAgLTE2NCw2ICsxNjksMTQgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RQ
dWJsaWNBbmRQcml2YXRlQ29uZGl0aW9uYWxBdHRyaWJ1dGUoSlNDOjpKU0dsb2JhbE9iamUKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJp
YnV0ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOwogYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RFbmFibGVkQXRSdW50aW1lQXR0
cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlKTsKICNlbmRpZgorSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RET01XaW5kb3dDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmpl
Y3RET01XaW5kb3dDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVz
dEdsb2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFBh
aW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFNlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdp
ZmllckNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0yNTYsOCArMjY5LDYgQEAgYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVy
cmlkZUJ1aWwKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE9wZXJh
dGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogI2VuZGlmCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVl
bmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVycmlkZUJ1aWx0aW5zQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lKTsKQEAgLTMwMCwxOCArMzExLDIyIEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlQ29uc3RydWN0
CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJp
YnV0ZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFs
T2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wgc2V0SlNUZXN0R2xvYmFs
T2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citi
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0R2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAKIHVzaW5nIEpTVGVzdEdsb2JhbE9iamVj
dENvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNUZXN0R2xv
YmFsT2JqZWN0PjsKIAogLyogSGFzaCB0YWJsZSAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IENv
bXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjddID0geworc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
SW5kZXhbMjY4XSA9IHsKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzYsIC0xIH0sCisgICAgeyA0
MCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMCwgLTEgfSwKLSAgICB7IDQsIDI2MyB9
LAotICAgIHsgNDAsIC0xIH0sCisgICAgeyA4LCAyNjMgfSwKKyAgICB7IDQ0LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzE5LDE1
ICszMzQsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEds
b2JhbE9iamVjdFRhYmxlSW5kZXhbMjY3XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUxLCAtMSB9LAorICAgIHsgNTQsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyAxOSwgLTEgfSwKKyAgICB7IDIzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjMsIC0xIH0sCisgICAgeyA2NiwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM0
MSwxNCArMzU2LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rl
c3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2N10gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzMCwgLTEgfSwKKyAgICB7IDM0LCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY2LCAtMSB9LAotICAgIHsg
OSwgMjU4IH0sCisgICAgeyA3MSwgLTEgfSwKKyAgICB7IDEzLCAyNTggfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTM1NiwxMiArMzcxLDkg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVj
dFRhYmxlSW5kZXhbMjY3XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDM0LCAtMSB9LAotICAgIHsgMTYsIDI2NCB9LAotICAgIHsg
NiwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCi0gICAgeyAtMSwgLTEg
fSwKKyAgICB7IDM4LCAtMSB9LAorICAgIHsgMjAsIDI2NCB9LAorICAgIHsgMTAsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNjks
ODggKzM4MSw4OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0
R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzIsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAzNiwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE4
LCAyNjUgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDIyLCAyNjUgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAorICAgIHsgOSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA1NywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKKyAgICB7IDYwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjAsIDI1NiB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAg
eyA1OCwgLTEgfSwKLSAgICB7IDE1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDQyLCAtMSB9LAotICAgIHsgMTQsIC0xIH0sCisgICAgeyAyNCwgMjU2IH0s
CiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDYxLCAtMSB9LAorICAgIHsgMTksIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNDYsIC0xIH0sCisgICAgeyAxOCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAzNSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA0LCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyA0NywgLTEgfSwKLSAgICB7IDIxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyAyLCAtMSB9LAotICAgIHsgMzMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDUw
LCAtMSB9LAorICAgIHsgMjUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIsIDI2NyB9
LAorICAgIHsgMzcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDE3LCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDIxLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTUsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNTgsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyNywg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAzOCwgLTEgfSwK
KyAgICB7IDMxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7
IDQyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAotICAgIHsgNTAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDEwLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCisgICAgeyA1MywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsg
MTQsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCkBAIC00NjEsMjggKzQ3NCwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNo
SW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNiwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDY0
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA2NywgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOCwgLTEgfSwKLSAgICB7IDI1LCAyNjIgfSwKLSAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAzMiwgLTEgfSwKKyAgICB7IDI5
LCAyNjIgfSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDEyLCAyNTcgfSwKICAgICB7IC0x
LCAtMSB9LAotICAgIHsgNTksIC0xIH0sCisgICAgeyAxNiwgMjU3IH0sCiAgICAgeyAtMSwgLTEg
fSwKKyAgICB7IDYyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LApAQCAtNDkwLDE3ICs1MDQsMTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBD
b21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjY3XSA9IHsKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDI5
LCAyNjYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTMsIC0xIH0sCisgICAgeyAzMywgMjY2
IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDYyLCAtMSB9LAorICAgIHsgMTcsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKKyAgICB7IDY1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAg
LTUxMCwxMyArNTIzLDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2N10gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA3MCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUzLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1NiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCisgICAgeyAzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNTMwLDQ5ICs1NDUsNTAgQEAgc3RhdGljIGNvbnN0
IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjY3
XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgOCwgLTEgfSwKKyAgICB7IDEyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0NCwgMjYx
IH0sCi0gICAgeyA3LCAyNjAgfSwKKyAgICB7IDQ4LCAyNjEgfSwKKyAgICB7IDExLCAyNjAgfSwK
ICAgICB7IC0xLCAtMSB9LAotICAgIHsgNjAsIC0xIH0sCisgICAgeyA2MywgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgNDMsIC0xIH0sCisgICAgeyA0NywgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAot
ICAgIHsgMTEsIC0xIH0sCisgICAgeyAxNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsg
MjIsIC0xIH0sCisgICAgeyAyNiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyAyNCwgLTEgfSwKKyAgICB7IDI4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDQxLCAtMSB9LAotICAgIHsgMywgLTEgfSwKLSAgICB7IDQ4
LCAtMSB9LAorICAgIHsgNDUsIC0xIH0sCisgICAgeyA3LCAtMSB9LAorICAgIHsgNTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDQ5LCAtMSB9LAorICAgIHsgNTIsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDIzLCAyNTkgfSwKLSAgICB7IDI2LCAtMSB9LAotICAgIHsgMzUsIC0xIH0s
Ci0gICAgeyAzNywgLTEgfSwKKyAgICB7IDI3LCAyNTkgfSwKKyAgICB7IDMwLCAtMSB9LAogICAg
IHsgMzksIC0xIH0sCi0gICAgeyA0NiwgLTEgfSwKLSAgICB7IDUyLCAtMSB9LAotICAgIHsgNTQs
IC0xIH0sCi0gICAgeyA1NiwgLTEgfSwKLSAgICB7IDYxLCAtMSB9LAotICAgIHsgNjUsIC0xIH0s
CisgICAgeyA0MSwgLTEgfSwKKyAgICB7IDQzLCAtMSB9LAorICAgIHsgNDksIC0xIH0sCisgICAg
eyA1NSwgLTEgfSwKKyAgICB7IDU3LCAtMSB9LAorICAgIHsgNTksIC0xIH0sCisgICAgeyA2NCwg
LTEgfSwKKyAgICB7IDY4LCAtMSB9LAorICAgIHsgNjksIC0xIH0sCiB9OwogCiAKQEAgLTU4NSw2
ICs2MDEsMTAgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbE9iamVj
dFRhYmxlVmFsdWVzW10gPQogI2Vsc2UKICAgICB7IDAsIDAsIE5vSW50cmluc2ljLCB7IDAsIDAg
fSB9LAogI2VuZGlmCisgICAgeyAiRE9NV2luZG93Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3RET01XaW5kb3dDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVy
dHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0
cnVjdG9yKSB9IH0sCisgICAgeyAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUiLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzVGVzdEdsb2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU1Rlc3RHbG9iYWxPYmplY3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KSB9IH0sCisgICAgeyAiUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9i
YWxPYmplY3RQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAi
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8
UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFNlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdENFUmVhY3Rp
b25zIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKSB9IH0sCiAg
ICAgeyAiVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdFRlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAi
VGVzdENhbGxUcmFjZXIiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RDYWxsVHJhY2Vy
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9y
KSB9IH0sCkBAIC02MzksNyArNjU5LDYgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpT
VGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzW10gPQogI2Vsc2UKICAgICB7IDAsIDAsIE5vSW50
cmluc2ljLCB7IDAsIDAgfSB9LAogI2VuZGlmCi0gICAgeyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2UiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzV2l0aFNlcXVlbmNlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKSB9IH0sCiAgICAg
eyAiVGVzdE92ZXJyaWRlQnVpbHRpbnMiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RP
dmVycmlkZUJ1aWx0aW5zQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJp
ZGVCdWlsdGluc0NvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdFBsdWdpbkludGVyZmFjZSIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSks
IE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9y
KSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4o
c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFBsdWdpbkludGVyZmFjZUNvbnN0cnVjdG9yKSB9IH0s
CkBAIC02NjQsMTAgKzY4MywxMiBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
R2xvYmFsT2JqZWN0VGFibGVWYWx1ZXNbXSA9CiAgICAgeyAiVGVzdFN0cmluZ2lmaWVyUmVhZE9u
bHlBdHRyaWJ1dGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVy
dHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9iamVjdFRlc3RTdHJpbmdpZmllclJl
YWRPbmx5QXR0cmlidXRlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5n
aWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yKSB9IH0sCiAgICAgeyAiVGVzdFN0cmlu
Z2lmaWVyUmVhZFdyaXRlQXR0cmlidXRlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0
U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdG9yKSB9IH0sCiAg
ICAgeyAiVGVzdFR5cGVkZWZzIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlB
dHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0
PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRl
ZnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9y
KSB9IH0sCisgICAgeyAiV29ya2VyR2xvYmFsU2NvcGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEdsb2JhbE9i
amVjdFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0
PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiV29ya2xldEdsb2JhbFNjb3Bl
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
ciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+
KHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSB9IH0s
CiAgICAgeyAicmVndWxhck9wZXJhdGlvbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpGdW5jdGlvbiksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0
aWNfY2FzdDxSYXdOYXRpdmVGdW5jdGlvbj4oanNUZXN0R2xvYmFsT2JqZWN0SW5zdGFuY2VGdW5j
dGlvblJlZ3VsYXJPcGVyYXRpb24pLCAoaW50cHRyX3QpICgxKSB9IH0sCiB9OwogCi1zdGF0aWMg
Y29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlID0geyA2NywgMjU1LCB0cnVl
LCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1
ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXggfTsKK3N0YXRpYyBjb25zdCBIYXNoVGFi
bGUgSlNUZXN0R2xvYmFsT2JqZWN0VGFibGUgPSB7IDcyLCAyNTUsIHRydWUsIEpTVGVzdEdsb2Jh
bE9iamVjdDo6aW5mbygpLCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlcywgSlNUZXN0R2xv
YmFsT2JqZWN0VGFibGVJbmRleCB9OwogLyogSGFzaCB0YWJsZSBmb3IgY29uc3RydWN0b3IgKi8K
IAogc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbE9iamVjdENvbnN0cnVj
dG9yVGFibGVWYWx1ZXNbXSA9CkBAIC05NTMsNiArOTc0LDk4IEBAIGJvb2wgc2V0SlNUZXN0R2xv
YmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhCiAKICNlbmRpZgogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0RE9NV2luZG93Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTRE9NV2luZG93OjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdERP
TVdpbmRvd0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURM
QXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RET01X
aW5kb3dDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
IkRPTVdpbmRvdyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RE9NV2luZG93Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJET01XaW5kb3ciKSwgc3RybGVuKCJET01XaW5kb3ciKSksIHZh
bHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RET01XaW5kb3dDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0
dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0RE9N
V2luZG93Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIkRPTVdpbmRvdyIpOworfQorCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvckdl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2Jq
ZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICByZXR1cm4gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0
b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2Jq
ZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3REZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxP
YmplY3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUiKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSIpLCBzdHJs
ZW4oIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0
SlNUZXN0R2xvYmFsT2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJp
YnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0RGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmpl
Y3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFBhaW50V29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVT
RURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1
Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlBhaW50V29ya2xl
dEdsb2JhbFNjb3BlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAg
ICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGUiKSwgc3RybGVuKCJQYWludFdvcmtsZXRHbG9iYWxTY29wZSIpKSwgdmFsdWUpOworfQorCiti
b29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFBh
aW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlBhaW50V29ya2xldEdsb2JhbFNjb3BlIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNU
ZXN0R2xvYmFsT2JqZWN0U2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
UHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZSIpLCBzdHJsZW4oIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxP
YmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlIik7Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNF
RF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKQEAgLTE5NjAsMjkgKzIwNzMsNiBAQCBib29s
IHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZQogCiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0
ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVj
dCYgdGhpc09iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7
Ci0gICAgcmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9y
KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVj
dCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2Jq
ZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIik7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiKSwgc3RybGVu
KCJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpKSwgdmFsdWUpOwotfQotCi1ib29sIHNldEpT
VGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1
dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIik7
Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3Qp
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwpAQCAtMjQ0OSw2ICsy
NTM5LDUyIEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPCiAgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVk
ZWZzQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIlRlc3RUeXBlZGVmcyIpOwogfQogCitzdGF0aWMgaW5saW5lIEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcihKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlz
T2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBy
ZXR1cm4gSlNXb3JrZXJHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OmdldDxqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiV29ya2VyR2xv
YmFsU2NvcGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJXb3JrZXJHbG9iYWxTY29wZSIpLCBzdHJsZW4oIldv
cmtlckdsb2JhbFNjb3BlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+
OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNl
dHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiV29y
a2VyR2xvYmFsU2NvcGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2Jh
bE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7
CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1dv
cmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQ
cm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmpl
Y3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJXb3JrbGV0R2xvYmFsU2Nv
cGUiKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09i
amVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigiV29ya2xldEdsb2JhbFNjb3BlIiksIHN0cmxlbigiV29ya2xl
dEdsb2JhbFNjb3BlIikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6
c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJXb3Jr
bGV0R2xvYmFsU2NvcGUiKTsKK30KKwogc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0aW9uQm9keShK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Q2xh
c3NQYXJhbWV0ZXIgY2FzdGVkVGhpcykKIHsKICAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAKaW5kZXggYjMyZmFjM2ViYzFiOTY4MjM1YzQzY2VhYjY0MjkwYjNlMzU0ZTkzYi4u
ZDllZTQ5OGY2MjQ1ZjYzYWNmYTUzYmViM2FkYzJlNWRiYWQwN2E3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtMSwzNzkgKzEsNiBAQAogLyoK
LSAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3Qu
Ci0gICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5w
bC4gRE8gTk9UIE1PRElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwg
YnVpbGQgc2NyaXB0cyB0aGF0IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCBhbmQKKyAg
ICBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxk
IHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5oIGFuZAorICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5
IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmgiCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKLSNpbmNsdWRlICJET01Jc29TdWJz
cGFjZXMuaCIKLSNpbmNsdWRlICJKU0Jsb2IuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
LSNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0QnVm
ZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCi0jaW5jbHVk
ZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3Mu
aCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnRWYXJpYWRpYy5oIgotI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnRE
YXRhLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJz
cGFjZUlubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bv
aW50ZXJQcmVwYXJhdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVVJMLmg+Ci0KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotLy8gQXR0cmlidXRlcwotCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwotYm9vbCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlIGZpbmFs
IDogcHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFz
ZSA9IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKLSAgICBzdGF0aWMgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSogcHRyID0gbmV3IChOb3RO
dWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90
eXBlPih2bS5oZWFwKSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSh2bSwg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0KLSAgICBERUNMQVJFX0lORk87Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+Ci0gICAgc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAg
ICAgICAgU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1Byb3RvdHlwZSwgQmFzZSk7Ci0gICAgICAgIHJldHVybiAmdm0ucGxhaW5P
YmplY3RTcGFjZTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAg
IDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsKLVNUQVRJQ19BU1NFUlRfSVNP
X1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUs
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OkJhc2UpOwotCi11c2luZyBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IgPSBKU0RPTUNvbnN0cnVjdG9y
PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+OwotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRK
U1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMxKEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8
SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0Nh
bGxlZSgpKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgRW5zdXJlU3RpbGxBbGl2ZVNj
b3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0
byBhcnJheUJ1ZmZlciA9IGNvbnZlcnQ8SURMQXJyYXlCdWZmZXI+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSwgW10oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXIiLCAiVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlCdWZmZXIiKTsgfSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBh
dXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoKmFycmF5QnVm
ZmVyKTsKLSAgICBzdGF0aWNfYXNzZXJ0KGRlY2x0eXBlKG9iamVjdCk6OmlzUmVmKTsKLSAgICBh
dXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFs
T2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSk7Ci0gICAgc2V0U3ViY2xhc3NTdHJ1Y3R1cmVJZk5l
ZWRlZDxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBhc09iamVjdChqc1ZhbHVlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJv
d1Njb3BlLCB7IH0pOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yczIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0
byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3IqPihjYWxsRnJhbWUtPmpzQ2FsbGVlKCkpOwotICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsK
LSAgICBFbnN1cmVTdGlsbEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudCgwKTsKLSAgICBhdXRvIGFycmF5QnVmZmVyVmlldyA9IGNvbnZlcnQ8SURMQXJy
YXlCdWZmZXJWaWV3PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtd
KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
Y29wZSwgMCwgImFycmF5QnVmZmVyVmlldyIsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIs
IG51bGxwdHIsICJBcnJheUJ1ZmZlclZpZXciKTsgfSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
Tih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iamVjdCA9IFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoYXJyYXlCdWZmZXJWaWV3LnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUob2JqZWN0KTo6aXNSZWYpOwotICAg
IGF1dG8ganNWYWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGTW92ZShvYmplY3QpKTsKLSAgICBzZXRTdWJjbGFzc1N0cnVjdHVyZUlm
TmVlZGVkPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUsIGFzT2JqZWN0KGpzVmFsdWUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIHsgfSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKTsKLX0K
LQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzMyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMp
OwotICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYmxvYiA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEJs
b2I+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZhbHVlKCksIFtdKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
IHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgMCwg
ImJsb2IiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQmxvYiIpOyB9
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwotICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZSgq
YmxvYik7Ci0gICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShvYmplY3QpOjppc1JlZik7Ci0gICAg
YXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwotICAgIHNldFN1YmNsYXNzU3RydWN0dXJlSWZO
ZWVkZWQ8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGxleGljYWxHbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgYXNPYmplY3QoanNWYWx1ZSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgeyB9KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM0KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKLXsKLSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1
dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0
cnVjdG9yKj4oY2FsbEZyYW1lLT5qc0NhbGxlZSgpKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7
Ci0gICAgRW5zdXJlU3RpbGxBbGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVj
a2VkQXJndW1lbnQoMCk7Ci0gICAgYXV0byBzdHJpbmcgPSBjb252ZXJ0PElETERPTVN0cmluZz4o
KmxleGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGF1dG8gb2JqZWN0
ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwot
ICAgIHN0YXRpY19hc3NlcnQoZGVjbHR5cGUob2JqZWN0KTo6aXNSZWYpOwotICAgIGF1dG8ganNW
YWx1ZSA9IHRvSlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3Qo
KSwgV1RGTW92ZShvYmplY3QpKTsKLSAgICBzZXRTdWJjbGFzc1N0cnVjdHVyZUlmTmVlZGVkPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUs
IGFzT2JqZWN0KGpzVmFsdWUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUs
IHsgfSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKTsKLX0KLQotc3RhdGlj
IGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzNShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBjYXN0
ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGF1
dG8gbG9uZ0FyZ3MgPSBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHM8SURMTG9uZz4oKmxleGljYWxH
bG9iYWxPYmplY3QsICpjYWxsRnJhbWUsIDApOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmplY3QgPSBUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKFdURk1vdmUobG9uZ0FyZ3MpKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KGRlY2x0eXBlKG9iamVjdCk6OmlzUmVmKTsKLSAgICBhdXRvIGpzVmFsdWUgPSB0b0pT
TmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUo
b2JqZWN0KSk7Ci0gICAgc2V0U3ViY2xhc3NTdHJ1Y3R1cmVJZk5lZWRlZDxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBhc09iamVjdChq
c1ZhbHVlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPD4gRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3Ry
dWN0b3I6OmNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgc2l6ZV90IGFyZ3NDb3VudCA9IHN0ZDo6
bWluPHNpemVfdD4oMSwgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpOwotICAgIGlmIChhcmdz
Q291bnQgPT0gMCkgewotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSkpKTsKLSAgICB9Ci0gICAgaWYgKGFyZ3NDb3VudCA9PSAxKSB7Ci0gICAgICAg
IEpTVmFsdWUgZGlzdGluZ3Vpc2hpbmdBcmcgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApOwotICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVj
dChkaXN0aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTQXJyYXlCdWZmZXI+KHZtKSkKLSAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoY29uc3RydWN0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczEobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSkpOwot
ICAgICAgICBpZiAoZGlzdGluZ3Vpc2hpbmdBcmcuaXNPYmplY3QoKSAmJiBhc09iamVjdChkaXN0
aW5ndWlzaGluZ0FyZyktPmluaGVyaXRzPEpTQXJyYXlCdWZmZXJWaWV3Pih2bSkpCi0gICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKGNvbnN0cnVjdEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnMyKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpKTsKLSAg
ICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGlu
Z3Vpc2hpbmdBcmcpLT5pbmhlcml0czxKU0Jsb2I+KHZtKSkKLSAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTih0aHJvd1Njb3BlLCAoY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczMobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSkpOwotICAgICAgICBpZiAoZGlz
dGluZ3Vpc2hpbmdBcmcuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
Tih0aHJvd1Njb3BlLCAoY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUobGV4
aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lKSkpOwotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4odGhyb3dTY29wZSwgKGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM0KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRocm93
Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7Ci19Ci0KLXRlbXBs
YXRlPD4gSlNWYWx1ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3I6OnBy
b3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHJldHVybiBnbG9i
YWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKLX0KLQotdGVtcGxhdGU8PiB2b2lkIEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMo
Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzOjpwcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKLX0KLQotdGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
OjpzX2luZm8gPSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsICZCYXNlOjpzX2luZm8s
IG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9OwotCi0vKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUg
Ki8KLQotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KLXsKLSAgICB7ICJjb25zdHJ1Y3RvciIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSwgKGludHB0cl90
KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSB9IH0sCi19OwotCi1jb25zdCBDbGFzc0lu
Zm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6c19pbmZvID0geyAiVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUpIH07Ci0KLXZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAg
ICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6
OmluZm8oKSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZVRhYmxlVmFsdWVz
LCAqdGhpcyk7Ci0gICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Ci19
Ci0KLWNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzX2luZm8g
PSB7ICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cykgfTsKLQotSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6SlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgUmVmPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiYmIGltcGwpCi0gICAgOiBK
U0RPTVdyYXBwZXI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKQotewotfQotCi12b2lkIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7Ci0gICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVET01PYmplY3QsIFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZl
RE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFj
dGl2ZURPTU9iamVjdC4iKTsKLQotfQotCi1KU09iamVjdCogSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yczo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3Rv
dHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIGdsb2JhbE9i
amVjdC5vYmplY3RQcm90b3R5cGUoKSkpOwotfQotCi1KU09iamVjdCogSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yczo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM+KHZtLCBnbG9iYWxPYmplY3QpOwotfQotCi1KU1ZhbHVlIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOwotfQotCi12b2lkIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6OmRlc3Ryb3koSlNDOjpKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzOjp+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycygpOwot
fQotCi1FbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Z2V0Q29uc3RydWN0
b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmpl
Y3QoKSkpOwotfQotCi1ib29sIHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
dGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCi17Ci0gICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWND
YXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHRoaXNWYWx1ZSkpOwotICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgewotICAg
ICAgICB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWlu
IGNvbnN0cnVjdG9yCi0gICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5jb25zdHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwot
fQotCi1KU0M6Oklzb1N1YnNwYWNlKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpzdWJz
cGFjZUZvckltcGwoSlNDOjpWTSYgdm0pCi17Ci0gICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0
aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOwotICAgIGF1dG8mIHNwYWNl
cyA9IGNsaWVudERhdGEuc3Vic3BhY2VzKCk7Ci0gICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHNwYWNlOwotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpK
U0Rlc3RydWN0aWJsZU9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gfHwgIUpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6Om5lZWRzRGVzdHJ1Y3Rpb24pOwotICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rlc3RydWN0aWJsZU9iamVjdCwgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4pCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9y
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5kZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUu
Z2V0KCksIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgIGVsc2UKLSAgICAgICAg
c3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2Vs
bFR5cGUuZ2V0KCksIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOwotICAgIGF1dG8qIHNw
YWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5nZXQo
KTsKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCi1JR05PUkVfV0FS
TklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKLSAgICBpZiAoJkpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnM6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQotICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwotSUdOT1JFX1dBUk5JTkdTX0VORAotSUdOT1JF
X1dBUk5JTkdTX0VORAotICAgIHJldHVybiBzcGFjZTsKLX0KLQotdm9pZCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYg
YW5hbHl6ZXIpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKj4oY2VsbCk7Ci0gICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZv
ckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7Ci0gICAgaWYgKHRoaXNPYmplY3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JD
ZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
dXJsKCkuc3RyaW5nKCkpOwotICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsK
LX0KLQotYm9vbCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXI6OmlzUmVhY2hhYmxl
RnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IGNoYXIqKiByZWFzb24pCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGhhbmRsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHZpc2l0b3IpOwotICAgIFVOVVNFRF9Q
QVJBTShyZWFzb24pOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzT3duZXI6OmZpbmFsaXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4g
aGFuZGxlLCB2b2lkKiBjb250ZXh0KQotewotICAgIGF1dG8qIGpzVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKj4oaGFu
ZGxlLnNsb3QoKS0+YXNDZWxsKCkpOwotICAgIGF1dG8mIHdvcmxkID0gKnN0YXRpY19jYXN0PERP
TVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwotICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCAmanNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy0+d3JhcHBlZCgpLCBqc1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzKTsKLX0KLQotI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKLSNpZiBQTEFU
Rk9STShXSU4pCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKLWV4dGVybiAiQyIgeyBl
eHRlcm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KLSNlbHNlCi1leHRlcm4gIkMiIHsgZXh0ZXJu
IHZvaWQqIF9aVFZON1dlYkNvcmUyNlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzRVtdOyB9Ci0j
ZW5kaWYKLSNlbmRpZgotCi1KU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzPiYmIGltcGwpCi17Ci0KLSNpZiBFTkFCTEUoQklORElOR19JTlRF
R1JJVFkpCi0gICAgY29uc3Qgdm9pZCogYWN0dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBv
aW50ZXIoaW1wbC5wdHIoKSk7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9IF9faWRlbnRpZmllcigiPz9fN1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQFdlYkNvcmVAQDZCQCIpOwotI2Vsc2UKLSAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50
ZXIgPSAmX1pUVk43V2ViQ29yZTI2VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNFWzJdOwotI2Vu
ZGlmCi0KLSAgICAvLyBJZiB0aGlzIGZhaWxzIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIGRv
ZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKLSAgICAvLyBJbXBs
ZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRp
b24KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM+Ojp2YWx1ZSwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIGlzIG5vdCBw
b2x5bW9ycGhpYyIpOwotCi0gICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0
aGVyIGhhdmUgYSB1c2UgYWZ0ZXIgZnJlZSBidWcsIG9yCi0gICAgLy8gVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMgaGFzIHN1YmNsYXNzZXMuIElmIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
IGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAotICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJy
ZW50bHkgcmVxdWlyZSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyB5b3UgdG8gb3B0IG91dCBv
ZiBiaW5kaW5nIGhhcmRlbmluZwotICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tpcFZUYWJsZVZhbGlk
YXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRpb24KLSAgICBSRUxF
QVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRhYmxlUG9pbnRlcik7
Ci0jZW5kaWYKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMmIGltcGwpCi17
Ci0gICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBs
KTsKLX0KLQotVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzKj4odm0sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVk
KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5oCmluZGV4IDk4ZTE2NTg2N2EwZGNjOTIwYmI4YzhkOWY5ODI5YTcx
YzI0M2M2ZGMuLmQ5ZWU0OThmNjI0NWY2M2FjZmE1M2JlYjNhZGMyZTVkYmFkMDdhNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApAQCAtMSw5MyArMSw2IEBA
CiAvKgotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJv
amVjdC4KLSAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRp
bmdzLnBsLiBETyBOT1QgTU9ESUZZIQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8g
dGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGFu
ZAorICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZvciBU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUg
YnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmggYW5kCisgICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYXQg
ZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgogKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMgOiBwdWJsaWMgSlNET01XcmFwcGVyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
PiB7Ci1wdWJsaWM6Ci0gICAgdXNpbmcgQmFzZSA9IEpTRE9NV3JhcHBlcjxUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycz47Ci0gICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMq
IGNyZWF0ZShKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWY8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYgaW1wbCkKLSAgICB7
Ci0gICAgICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHB0ciA9IG5ldyAoTm90TnVs
bCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4oZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApKSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKHN0cnVjdHVy
ZSwgKmdsb2JhbE9iamVjdCwgV1RGTW92ZShpbXBsKSk7Ci0gICAgICAgIHB0ci0+ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsT2JqZWN0LT52bSgpKTsKLSAgICAgICAgcmV0dXJuIHB0cjsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlND
OjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0gICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAg
c3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3Rh
dGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQotICAgIHsKLSAg
ICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJl
bnRseSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gc3Vic3Bh
Y2VGb3JJbXBsKHZtKTsKLSAgICB9Ci0gICAgc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Ci0gICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlND
ZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKLXByb3RlY3RlZDoKLSAgICBKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzKEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmLCBSZWY8
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYpOwotCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0M6OlZNJik7Ci19OwotCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3du
ZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgewotcHVibGljOgotICAgIHZpcnR1YWwg
Ym9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+
LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29uc3QgY2hhcioqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29u
dGV4dCk7Ci19OwotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihE
T01XcmFwcGVyV29ybGQmLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyopCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNPd25lcj4gb3du
ZXI7Ci0gICAgcmV0dXJuICZvd25lci5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQqIHdyYXBwZXJL
ZXkoVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIHdyYXBwYWJsZU9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gd3JhcHBhYmxlT2JqZWN0OwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KLUpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4mJik7Ci1pbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlD
cmVhdGVkKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9u
TnVsbCgpKSA6IEpTQzo6anNOdWxsKCk7IH0KLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiB7Ci0gICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU1NGVjN2Y0M2FlNDMzZjAzOWFmMzhiNTJlZTczNzQ0N2ZlODlmMDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNX
b3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmls
ZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJ
RlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV29ya2VyR2xvYmFsU2Nv
cGUuaCIKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1
YnNwYWNlcy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIK
KyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIgorI2lu
Y2x1ZGUgIkpTVGVzdE5vZGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJK
U1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgIldv
cmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVy
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
Ky8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1dvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZUV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTV29ya2VyR2xvYmFs
U2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZVRlc3RPYmplY3RDb25zdHJ1
Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUpOworYm9vbCBzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVj
dG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZVRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1dvcmtlckds
b2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKwor
dXNpbmcgSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGU8SlNXb3JrZXJHbG9iYWxTY29wZT47CisKKy8qIEhhc2ggdGFibGUgKi8K
Kworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTV29ya2VyR2xvYmFsU2Nv
cGVUYWJsZUluZGV4WzEwXSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMCwgOCB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEs
IC0xIH0sCisgICAgeyAzLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCA5IH0sCisg
ICAgeyAyLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNXb3Jr
ZXJHbG9iYWxTY29wZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgIkV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNXb3JrZXJHbG9iYWxTY29wZUV4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd0NvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNXb3JrZXJHbG9iYWxTY29wZUV4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd0NvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiVGVzdE5vZGUiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzV29ya2Vy
R2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQ
dXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3RO
b2RlQ29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0T2JqZWN0Iiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1dvcmtl
ckdsb2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2Fz
dDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRl
c3RPYmplY3RDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3RQcm9taXNlUmVqZWN0aW9uRXZl
bnQiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0
VmFsdWVGdW5jPihzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dENvbnN0cnVjdG9yKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTV29ya2Vy
R2xvYmFsU2NvcGVUYWJsZSA9IHsgNCwgNywgdHJ1ZSwgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW5m
bygpLCBKU1dvcmtlckdsb2JhbFNjb3BlVGFibGVWYWx1ZXMsIEpTV29ya2VyR2xvYmFsU2NvcGVU
YWJsZUluZGV4IH07Cit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTRXZlbnRUYXJnZXQ6Omdl
dENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpT
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZt
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+cHJvdG90eXBlLCBKU1dvcmtlckdsb2JhbFNjb3BlOjpwcm90b3R5
cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUg
fCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIldvcmtlckdsb2JhbFNjb3BlIl9zKSwgSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVy
KDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXb3JrZXJHbG9iYWxTY29wZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90
b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTV29ya2Vy
R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZUluZGV4WzJdID0geworICAgIHsgLTEsIC0xIH0sCisg
ICAgeyAwLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNXb3Jr
ZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVj
dG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpLCAoaW50cHRyX3Qp
IHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1dvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUg
SlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0cnVlLCBKU1dvcmtl
ckdsb2JhbFNjb3BlOjppbmZvKCksIEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZh
bHVlcywgSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKK2NvbnN0IENs
YXNzSW5mbyBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJXb3JrZXJH
bG9iYWxTY29wZSIsICZCYXNlOjpzX2luZm8sICZKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBl
VGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXb3JrZXJHbG9iYWxTY29wZVBy
b3RvdHlwZSkgfTsKKwordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJl
aWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW5mbygpLCBKU1dv
cmtlckdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9f
U1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpT
V29ya2VyR2xvYmFsU2NvcGU6OnNfaW5mbyA9IHsgIldvcmtlckdsb2JhbFNjb3BlIiwgJkJhc2U6
OnNfaW5mbywgJkpTV29ya2VyR2xvYmFsU2NvcGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1dvcmtlckdsb2JhbFNjb3BlKSB9OworCitKU1dvcmtlckdsb2JhbFNjb3BlOjpK
U1dvcmtlckdsb2JhbFNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxXb3Jr
ZXJHbG9iYWxTY29wZT4mJiBpbXBsKQorICAgIDogSlNFdmVudFRhcmdldCh2bSwgc3RydWN0dXJl
LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTV29ya2VyR2xvYmFsU2NvcGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNQcm94eSogcHJveHkpCit7CisgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24odm0sIHByb3h5KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxB
Y3RpdmVET01PYmplY3QsIFdvcmtlckdsb2JhbFNjb3BlPjo6dmFsdWUsICJJbnRlcmZhY2UgaXMg
bm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBpbXBsZW1lbnRhdGlv
biBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQorCitKU09iamVjdCog
SlNXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNXb3JrZXJHbG9iYWxTY29wZVBy
b3RvdHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1dvcmtlckdsb2JhbFNjb3BlUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIEpTRXZlbnRUYXJnZXQ6
OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQorCitKU09iamVjdCogSlNXb3JrZXJH
bG9iYWxTY29wZTo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTV29ya2VyR2xvYmFsU2NvcGU+
KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGU6Omdl
dENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpOworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBKU1dvcmtlckdsb2JhbFNjb3BlKiBJRExBdHRy
aWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OmNhc3QoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICByZXR1cm4ganNE
eW5hbWljQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlKj4oSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCksIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSo+KHZtLCBKU1Zh
bHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQor
ICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJv
d1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV29ya2VyR2xvYmFsU2NvcGU6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlw
ZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1dvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2
bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29k
ZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAg
dGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25z
dHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3dDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFS
QU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwg
dGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2Vy
R2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtlckdsb2JhbFNjb3Bl
Pjo6Z2V0PGpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1
Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIkV4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdyIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNXb3JrZXJHbG9i
YWxTY29wZUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1dvcmtlckdsb2JhbFNjb3BlJiB0aGlzT2Jq
ZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3Iu
CisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIkV4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdyIpLCBzdHJsZW4oIkV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0
dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtlckdsb2JhbFNjb3BlPjo6c2V0PHNldEpTV29ya2VyR2xv
YmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvclNldHRlcj4oKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1dvcmtlckdsb2JhbFNj
b3BlVGVzdE5vZGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURf
UEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVzdE5vZGU6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmds
b2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZVRl
c3ROb2RlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OmdldDxqc1dvcmtlckdsb2JhbFNjb3BlVGVz
dE5vZGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
IlRlc3ROb2RlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1dvcmtlckdsb2JhbFNj
b3BlVGVzdE5vZGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAg
IC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlzT2Jq
ZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0Tm9kZSIpLCBzdHJsZW4oIlRlc3ROb2RlIikpLCB2YWx1
ZSk7Cit9CisKK2Jvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3ROb2RlQ29uc3RydWN0b3Io
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRy
aWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OnNldDxzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVz
dE5vZGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwg
ZW5jb2RlZFZhbHVlLCAiVGVzdE5vZGUiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpz
V29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTV29ya2VyR2xvYmFsU2NvcGUmIHRoaXNPYmplY3Qp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBK
U1Rlc3RPYmo6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNXb3Jr
ZXJHbG9iYWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtlckdsb2JhbFNjb3BlPjo6Z2V0PGpzV29y
a2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0T2JqZWN0Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVjdG9yU2V0dGVyKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1dvcmtlckdsb2JhbFNjb3BlJiB0aGlz
T2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0
b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPYmplY3QiKSwg
c3RybGVuKCJUZXN0T2JqZWN0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNXb3JrZXJHbG9i
YWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtlckdsb2JhbFNjb3BlPjo6
c2V0PHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3JTZXR0ZXI+KCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRlc3RPYmplY3Qi
KTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTV29ya2VyR2xvYmFsU2NvcGUmIHRoaXNPYmplY3QpCit7CisgICAg
VU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnQ6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFs
dWUganNXb3JrZXJHbG9iYWxTY29wZVRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtl
ckdsb2JhbFNjb3BlPjo6Z2V0PGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
ICJUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
ZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9y
U2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1dvcmtlckdsb2Jh
bFNjb3BlJiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlND
OjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQt
aW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRl
c3RQcm9taXNlUmVqZWN0aW9uRXZlbnQiKSwgc3RybGVuKCJUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1dvcmtlckdsb2JhbFNjb3BlPjo6
c2V0PHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3Ry
dWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1
ZSwgIlRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnQiKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSog
SlNXb3JrZXJHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAg
IGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGll
bnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAg
IGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2VyR2xvYmFsU2NvcGUu
Z2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzcGFjZXMubV9zdWJzcGFjZUZvcldv
cmtlckdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2VyR2xvYmFsU2Nv
cGUuZ2V0KCksIEpTV29ya2VyR2xvYmFsU2NvcGUpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2Vz
Lm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZS5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19C
RUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9n
aWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTV29ya2VyR2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0
Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAg
ICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOwor
SUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFj
ZTsKK30KKwordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNl
bGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBl
ZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRo
aXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0
TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFu
YWx5emVyKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9S
TShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1dvcmtlckdsb2JhbFNjb3BlQFdlYkNv
cmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQqIF9aVFZO
N1dlYkNvcmUxN1dvcmtlckdsb2JhbFNjb3BlRVtdOyB9CisjZW5kaWYKKyNlbmRpZgorCitKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCit7
CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgY29uc3Qgdm9pZCogYWN0dWFs
VlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5wdHIoKSk7CisjaWYgUExBVEZP
Uk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IF9faWRlbnRpZmllcigi
Pz9fN1dvcmtlckdsb2JhbFNjb3BlQFdlYkNvcmVAQDZCQCIpOworI2Vsc2UKKyAgICB2b2lkKiBl
eHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29yZTE3V29ya2VyR2xvYmFsU2NvcGVF
WzJdOworI2VuZGlmCisKKyAgICAvLyBJZiB0aGlzIGZhaWxzIFdvcmtlckdsb2JhbFNjb3BlIGRv
ZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBs
ZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRp
b24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8V29ya2VyR2xvYmFsU2Nv
cGU+Ojp2YWx1ZSwgIldvcmtlckdsb2JhbFNjb3BlIGlzIG5vdCBwb2x5bW9ycGhpYyIpOworCisg
ICAgLy8gSWYgeW91IGhpdCB0aGlzIGFzc2VydGlvbiB5b3UgZWl0aGVyIGhhdmUgYSB1c2UgYWZ0
ZXIgZnJlZSBidWcsIG9yCisgICAgLy8gV29ya2VyR2xvYmFsU2NvcGUgaGFzIHN1YmNsYXNzZXMu
IElmIFdvcmtlckdsb2JhbFNjb3BlIGhhcyBzdWJjbGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAg
IC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVxdWlyZSBXb3JrZXJHbG9iYWxTY29wZSB5b3Ug
dG8gb3B0IG91dCBvZiBiaW5kaW5nIGhhcmRlbmluZworICAgIC8vIGJ5IGFkZGluZyB0aGUgU2tp
cFZUYWJsZVZhbGlkYXRpb24gYXR0cmlidXRlIHRvIHRoZSBpbnRlcmZhY2UgSURMIGRlZmluaXRp
b24KKyAgICBSRUxFQVNFX0FTU0VSVChhY3R1YWxWVGFibGVQb2ludGVyID09IGV4cGVjdGVkVlRh
YmxlUG9pbnRlcik7CisjZW5kaWYKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxXb3JrZXJHbG9i
YWxTY29wZT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV29ya2VyR2xvYmFsU2NvcGUmIGltcGwpCit7CisgICAg
cmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30K
KworV29ya2VyR2xvYmFsU2NvcGUqIEpTV29ya2VyR2xvYmFsU2NvcGU6OnRvV3JhcHBlZChKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0g
anNEeW5hbWljQ2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlKj4odm0sIHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuICZ3cmFwcGVyLT53cmFwcGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dv
cmtlckdsb2JhbFNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNXb3JrZXJHbG9iYWxTY29wZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NWRiNGMyN2YwZmE0YzZiZTAy
ZDllOWZhNjEyNDMxNzcwNDM2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5oCkBAIC0wLDAgKzEs
MTE0IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3Vy
Y2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRl
LWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdvcmtlckdsb2JhbFNjb3BlOworCitjbGFzcyBKU1dvcmtl
ckdsb2JhbFNjb3BlIDogcHVibGljIEpTRXZlbnRUYXJnZXQgeworcHVibGljOgorICAgIHVzaW5n
IEJhc2UgPSBKU0V2ZW50VGFyZ2V0OworICAgIHVzaW5nIERPTVdyYXBwZWQgPSBXb3JrZXJHbG9i
YWxTY29wZTsKKyAgICBzdGF0aWMgSlNXb3JrZXJHbG9iYWxTY29wZSogY3JlYXRlKEpTQzo6Vk0m
IHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V29ya2VyR2xvYmFsU2NvcGU+JiYg
aW1wbCwgSlNDOjpKU1Byb3h5KiBwcm94eSkKKyAgICB7CisgICAgICAgIEpTV29ya2VyR2xvYmFs
U2NvcGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNXb3JrZXJHbG9i
YWxTY29wZT4odm0uaGVhcCkpIEpTV29ya2VyR2xvYmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RG
TW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKyAg
ICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3Jl
YXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cisg
ICAgc3RhdGljIFdvcmtlckdsb2JhbFNjb3BlKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5
cGVJbmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpT
Qzo6Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3Ry
dWN0b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJz
cGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4
cHIgKG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOwor
ICAgIH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBB
bmFseXplciYpOworICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJHbG9iYWxTY29wZSY+KEJhc2U6Ondy
YXBwZWQoKSk7CisgICAgfQorcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SGFzU3RhdGljUHJv
cGVydHlUYWJsZTsKK3Byb3RlY3RlZDoKKyAgICBKU1dvcmtlckdsb2JhbFNjb3BlKEpTQzo6Vk0m
LCBKU0M6OlN0cnVjdHVyZSosIFJlZjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7Cit9OworCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBXb3JrZXJH
bG9iYWxTY29wZSYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFdvcmtlckdsb2JhbFNjb3BlKiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxXb3JrZXJHbG9iYWxTY29wZT4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFdvcmtlckdsb2JhbFNj
b3BlPiYmIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTTmV3bHlDcmVhdGVkKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbC5yZWxlYXNlTm9uTnVsbCgpKSA6IEpTQzo6anNO
dWxsKCk7IH0KKworY2xhc3MgSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSBmaW5hbCA6IHB1
YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTV29ya2VyR2xvYmFsU2NvcGVQcm90
b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTV29ya2VyR2xv
YmFsU2NvcGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8
SlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNl
QWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZt
LnBsYWluT2JqZWN0U3BhY2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6
IEpTQzo6SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19T
VUJTUEFDRV9TSEFSQUJMRShKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBKU1dvcmtlckds
b2JhbFNjb3BlUHJvdG90eXBlOjpCYXNlKTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFdvcmtlckdsb2JhbFNjb3BlPiB7CisgICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNXb3JrZXJHbG9iYWxTY29wZTsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gV29ya2VyR2xvYmFsU2NvcGUqOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFjNzhkOGQ3M2IxYmZlNzMyNThjYTRlNmUwYmUyYzQ3YzdlNDdkZGIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRo
aXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU1dv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFdvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20g
dHJ5aW5nIHRvIGdlbmVyYXRlIEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQK
KyAgICBKU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4g
VGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWM3OGQ4ZDcz
YjFiZmU3MzI1OGNhNGU2ZTBiZTJjNDdjN2U0N2RkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzLmgKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0
ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU1dvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzLmggYW5kCisgICAgSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAg
YXJlIGNyZWF0ZWQgZm9yIFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRo
dXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRl
IEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1dvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90
IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjJlYjhjOWJmZTk1NmY0ZGJjNzMyMDJhMWY0MjhjYjVlZmJmODY5YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1dvcmtsZXRHbG9iYWxTY29wZS5jcHAKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMg
ZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBN
T0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTV29ya2xldEdsb2Jh
bFNjb3BlLmgiCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01J
c29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgi
CisjaW5jbHVkZSAiV29ya2xldEdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxU
eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL1VSTC5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKKy8vIEF0dHJpYnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1dv
cmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTV29ya2xldEdsb2Jh
bFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFs
dWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworCit1c2luZyBKU1dvcmtsZXRHbG9iYWxTY29wZUNv
bnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNXb3JrbGV0R2xv
YmFsU2NvcGU+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU0V2ZW50VGFyZ2V0Ojpn
ZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBK
U1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyhWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIEpTV29ya2xldEdsb2JhbFNjb3BlOjpwcm90
b3R5cGUodm0sIGdsb2JhbE9iamVjdCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxl
dGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPm5h
bWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIldvcmtsZXRHbG9iYWxTY29wZSJfcyksIEpTQzo6
UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051
bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpT
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIldvcmtsZXRHbG9iYWxT
Y29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBm
b3IgcHJvdG90eXBlICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXhbMl0gPSB7CisgICAgeyAtMSwg
LTEgfSwKKyAgICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1
ZSBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsg
ImNvbnN0cnVjdG9yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAorfTsKKworc3RhdGljIGNvbnN0
IEhhc2hUYWJsZSBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlID0geyAxLCAxLCB0
cnVlLCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6aW5mbygpLCBKU1dvcmtsZXRHbG9iYWxTY29wZVBy
b3RvdHlwZVRhYmxlVmFsdWVzLCBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5k
ZXggfTsKK2NvbnN0IENsYXNzSW5mbyBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZTo6c19p
bmZvID0geyAiV29ya2xldEdsb2JhbFNjb3BlIiwgJkJhc2U6OnNfaW5mbywgJkpTV29ya2xldEds
b2JhbFNjb3BlUHJvdG90eXBlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
b3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUpIH07CisKK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU1dvcmtsZXRHbG9i
YWxTY29wZTo6aW5mbygpLCBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVz
LCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7Cit9
CisKK2NvbnN0IENsYXNzSW5mbyBKU1dvcmtsZXRHbG9iYWxTY29wZTo6c19pbmZvID0geyAiV29y
a2xldEdsb2JhbFNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU1dvcmtsZXRHbG9iYWxTY29wZSkgfTsKKworSlNXb3JrbGV0R2xvYmFs
U2NvcGU6OkpTV29ya2xldEdsb2JhbFNjb3BlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFJlZjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYgaW1wbCkKKyAgICA6IEpTRXZlbnRUYXJnZXQodm0s
IHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSkKK3sKK30KKwordm9pZCBKU1dvcmtsZXRHbG9iYWxT
Y29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1Byb3h5KiBwcm94eSkKK3sKKyAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgcHJveHkpOworCisgICAgc3RhdGljX2Fzc2VydCghc3RkOjpp
c19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgV29ya2xldEdsb2JhbFNjb3BlPjo6dmFsdWUsICJJ
bnRlcmZhY2UgaXMgbm90IG1hcmtlZCBhcyBbQWN0aXZlRE9NT2JqZWN0XSBldmVuIHRob3VnaCBp
bXBsZW1lbnRhdGlvbiBjbGFzcyBzdWJjbGFzc2VzIEFjdGl2ZURPTU9iamVjdC4iKTsKKworfQor
CitKU09iamVjdCogSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0s
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTV29ya2xl
dEdsb2JhbFNjb3BlUHJvdG90eXBlOjpjcmVhdGUodm0sICZnbG9iYWxPYmplY3QsIEpTV29ya2xl
dEdsb2JhbFNjb3BlUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3Qs
IEpTRXZlbnRUYXJnZXQ6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSkpOworfQorCitKU09i
amVjdCogSlNXb3JrbGV0R2xvYmFsU2NvcGU6OnByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1dv
cmtsZXRHbG9iYWxTY29wZT4odm0sIGdsb2JhbE9iamVjdCk7Cit9CisKK0pTVmFsdWUgSlNXb3Jr
bGV0R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29uc3QgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNXb3Jr
bGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxP
YmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0g
SlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWND
YXN0PEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0
aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpCisgICAgICAgIHJldHVy
biB0aHJvd1ZNVHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmdldENvbnN0cnVj
dG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNX
b3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1
ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkgeworICAgICAgICB0aHJvd1ZNVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yCisg
ICAgcmV0dXJuIHByb3RvdHlwZS0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb25z
dHJ1Y3RvciwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCitKU0M6Oklzb1N1
YnNwYWNlKiBKU1dvcmtsZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZt
KQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNl
cygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEds
b2JhbFNjb3BlLmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3BhY2VzLm1fc3Vi
c3BhY2VGb3JXb3JrbGV0R2xvYmFsU2NvcGUgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJU09f
U1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9ySlNXb3Jr
bGV0R2xvYmFsU2NvcGUuZ2V0KCksIEpTV29ya2xldEdsb2JhbFNjb3BlKTsKKyAgICBhdXRvKiBz
cGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEdsb2JhbFNjb3BlLmdldCgpOworSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19C
RUdJTigidGF1dG9sb2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNXb3JrbGV0R2xvYmFsU2Nv
cGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5h
cHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAor
ICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrbGV0R2xvYmFsU2NvcGUqPihjZWxsKTsKKyAgICBh
bmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+d3JhcHBl
ZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAg
ICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFzZTo6YW5h
bHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdS
SVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NDgzKQor
ZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/P183V29ya2xl
dEdsb2JhbFNjb3BlQFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmUxOFdvcmtsZXRHbG9iYWxTY29wZUVbXTsgfQorI2Vu
ZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxXb3JrbGV0R2xv
YmFsU2NvcGU+JiYgaW1wbCkKK3sKKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyAg
ICBjb25zdCB2b2lkKiBhY3R1YWxWVGFibGVQb2ludGVyID0gZ2V0VlRhYmxlUG9pbnRlcihpbXBs
LnB0cigpKTsKKyNpZiBQTEFURk9STShXSU4pCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gX19pZGVudGlmaWVyKCI/P183V29ya2xldEdsb2JhbFNjb3BlQFdlYkNvcmVAQDZCQCIp
OworI2Vsc2UKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSAmX1pUVk43V2ViQ29y
ZTE4V29ya2xldEdsb2JhbFNjb3BlRVsyXTsKKyNlbmRpZgorCisgICAgLy8gSWYgdGhpcyBmYWls
cyBXb3JrbGV0R2xvYmFsU2NvcGUgZG9lcyBub3QgaGF2ZSBhIHZ0YWJsZSwgc28geW91IG5lZWQg
dG8gYWRkIHRoZQorICAgIC8vIEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUgYXR0cmlidXRlIHRv
IHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbgorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19wb2x5
bW9ycGhpYzxXb3JrbGV0R2xvYmFsU2NvcGU+Ojp2YWx1ZSwgIldvcmtsZXRHbG9iYWxTY29wZSBp
cyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24g
eW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgorICAgIC8vIFdvcmtsZXRH
bG9iYWxTY29wZSBoYXMgc3ViY2xhc3Nlcy4gSWYgV29ya2xldEdsb2JhbFNjb3BlIGhhcyBzdWJj
bGFzc2VzIHRoYXQgZ2V0IHBhc3NlZAorICAgIC8vIHRvIHRvSlMoKSB3ZSBjdXJyZW50bHkgcmVx
dWlyZSBXb3JrbGV0R2xvYmFsU2NvcGUgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5p
bmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFs
VlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2VuZGlmCisgICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8V29ya2xldEdsb2JhbFNjb3BlPihnbG9iYWxPYmplY3QsIFdURk1v
dmUoaW1wbCkpOworfQorCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXb3Jr
bGV0R2xvYmFsU2NvcGUmIGltcGwpCit7CisgICAgcmV0dXJuIHdyYXAobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2xvYmFsT2JqZWN0LCBpbXBsKTsKK30KKworV29ya2xldEdsb2JhbFNjb3BlKiBKU1dv
cmtsZXRHbG9iYWxTY29wZTo6dG9XcmFwcGVkKEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNDYXN0PEpTV29ya2xldEds
b2JhbFNjb3BlKj4odm0sIHZhbHVlKSkKKyAgICAgICAgcmV0dXJuICZ3cmFwcGVyLT53cmFwcGVk
KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3Bl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGJmOGZhYzliMTI4YjUwODdlOTNjMzcyMjY4ZTc4YzE0ZmViNGZlZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1dvcmtsZXRHbG9iYWxTY29wZS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICAgIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlz
IGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1Qg
TU9ESUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisj
aW5jbHVkZSAiSlNFdmVudFRhcmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdvcmtsZXRHbG9iYWxTY29wZTsKKworY2xhc3MgSlNXb3JrbGV0R2xvYmFsU2NvcGUgOiBwdWJs
aWMgSlNFdmVudFRhcmdldCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTRXZlbnRUYXJn
ZXQ7CisgICAgdXNpbmcgRE9NV3JhcHBlZCA9IFdvcmtsZXRHbG9iYWxTY29wZTsKKyAgICBzdGF0
aWMgSlNXb3JrbGV0R2xvYmFsU2NvcGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmPFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBsLCBKU0M6OkpTUHJv
eHkqIHByb3h5KQorICAgIHsKKyAgICAgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGUqIHB0ciA9IG5l
dyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNXb3JrbGV0R2xvYmFsU2NvcGU+KHZtLmhl
YXApKSBKU1dvcmtsZXRHbG9iYWxTY29wZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGltcGwpKTsK
KyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwgcHJveHkpOworICAgICAgICByZXR1cm4g
cHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVhdGVQcm90b3R5cGUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpTQzo6SlNPYmplY3Qq
IHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgV29y
a2xldEdsb2JhbFNjb3BlKiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKKyAg
ICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkp
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpW
TSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
SlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3Bh
Y2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
SlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBz
dGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAg
ICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOwor
ICAgIFdvcmtsZXRHbG9iYWxTY29wZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V29ya2xldEdsb2JhbFNjb3BlJj4oQmFzZTo6d3JhcHBlZCgpKTsK
KyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGUoSlNDOjpWTSYsIEpT
Qzo6U3RydWN0dXJlKiwgUmVmPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7CisgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7Cit9OworCitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBXb3JrbGV0R2xv
YmFsU2NvcGUmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBX
b3JrbGV0R2xvYmFsU2NvcGUqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsgfQorSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUmVmPFdvcmtsZXRHbG9iYWxTY29wZT4mJik7CitpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFdvcmtsZXRHbG9iYWxT
Y29wZT4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9CisKK2NsYXNzIEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlIGZpbmFsIDog
cHVibGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9
IEpTQzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNXb3JrbGV0R2xvYmFsU2NvcGVQ
cm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTV29ya2xl
dEdsb2JhbFNjb3BlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlPih2bS5oZWFwKSkgSlNXb3JrbGV0R2xv
YmFsU2NvcGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAg
cHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisg
ICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1
YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihK
U0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NI
QVJBQkxFKEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogSlNDOjpKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlLCBK
U1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZTo6QmFzZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxXb3JrbGV0R2xvYmFsU2NvcGU+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU1dvcmtsZXRHbG9iYWxTY29wZTsKKyAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gV29ya2xldEdsb2JhbFNjb3BlKjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFiNjA0ZGE1YjhhNzY0NWIyMDQ3YTg4ZmE1YWRiMjFkZjZm
N2FlYjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEs
NiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBz
Y3JpcHRzIHRoYXQgSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBK
U1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFdvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUg
YnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBKU1dvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBp
bGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYjYwNGRhNWI4YTc2NDViMjA0N2E4OGZhNWFkYjIxZGY2ZjdhZWI1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw2IEBACisvKgor
ICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhh
dCBKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTV29ya2xldEds
b2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgV29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3Jp
cHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3JzLmggYW5kCisgICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2
ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYWQ5MGYwZmYwOGQ2NTAx
MTQyNjQyN2UyOTIzYWIwODA0ZjkwN2FkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmlkbApAQCAt
MCwwICsxLDIgQEAKK2ludGVyZmFjZSBQYWludFdvcmtsZXRHbG9iYWxTY29wZSA6IFdvcmtsZXRH
bG9iYWxTY29wZSB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTk3OTg1MWRlNTNkYTViMDZiOTFhY2RiYzYwN2Uw
ZDU0ODIzMzc4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKQEAgLTAs
MCArMSwyIEBACitwYXJ0aWFsIGludGVyZmFjZSBQYWludFdvcmtsZXRHbG9iYWxTY29wZSB7Cit9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODA5NzNmZjk0
YzdjNGMyOTQ1YmEyM2JhODRlNjA5ZGMxODA2Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5p
ZGwKQEAgLTAsMCArMSwyIEBACitpbnRlcmZhY2UgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIDog
V29ya2VyR2xvYmFsU2NvcGUgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRs
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDk4ODU0NmVkMTE0OWFmMDNmNWMw
MThmNDVkM2RkYWJmNGI0OTA1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsCkBAIC0wLDAgKzEsMiBAQAorcGFydGlhbCBpbnRlcmZhY2UgU2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlIHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCmluZGV4IDBhNmE1
NDM2ODVlYTM0NTQ0MzBiNTlkYjU1NDZmMDhlODYzNWJlZWEuLjQyYmZiYjA4N2ExY2M4N2IwM2Qy
NjA1MDE1NzM3MDVhYWQxNmNmYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVw
CkBAIC0xLDQgKzEsMjMgQEAKICMgU3VwcGxlbWVudGFsIGRlcGVuZGVuY2llcworSlNET01XaW5k
b3cuaDogRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbAorRE9NRE9NV2luZG93Lmg6IERPTVdpbmRv
d0NvbnN0cnVjdG9ycy5pZGwKK1dlYkRPTURPTVdpbmRvdy5oOiBET01XaW5kb3dDb25zdHJ1Y3Rv
cnMuaWRsCitET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsOgorSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZS5oOiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKK0RP
TURlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmg6IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmlkbAorV2ViRE9NRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDogRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGw6CitKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5o
OiAKK0RPTUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oOiAKK1dlYkRPTUV4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdy5oOiAKK0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaDogUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitET01QYWludFdvcmtsZXRHbG9iYWxTY29wZS5o
OiBQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKK1dlYkRPTVBhaW50V29y
a2xldEdsb2JhbFNjb3BlLmg6IFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlk
bAorUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsOgorSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUuaDogU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlk
bAorRE9NU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmg6IFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5pZGwKK1dlYkRPTVNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oOiBTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaWRsOgogSlNUZXN0Q0VSZWFjdGlvbnMuaDogCiBET01UZXN0Q0VS
ZWFjdGlvbnMuaDogCiBXZWJET01UZXN0Q0VSZWFjdGlvbnMuaDogCkBAIC0xNjEsOSArMTgwLDYg
QEAgSlNUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlvbkJhc2UuaWRsCiBE
T01UZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlvbkJhc2UuaWRsCiBXZWJE
T01UZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWwuaDogVGVzdE9wZXJhdGlvbkJhc2UuaWRsCiBUZXN0
T3BlcmF0aW9uQmFzZS5pZGw6Ci1KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmg6IAotRE9N
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDogCi1XZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5oOiAKIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaDog
CiBET01UZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oOiAKIFdlYkRPTVRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmg6IApAQCAtMjM3LDYgKzI1Mywx
NCBAQCBXZWJET01UZXN0VHlwZWRlZnMuaDoKIEpTVGVzdFZvaWRDYWxsYmFja0Z1bmN0aW9uLmg6
IAogRE9NVGVzdFZvaWRDYWxsYmFja0Z1bmN0aW9uLmg6IAogV2ViRE9NVGVzdFZvaWRDYWxsYmFj
a0Z1bmN0aW9uLmg6IAorSlNXb3JrZXJHbG9iYWxTY29wZS5oOiBXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwKK0RPTVdvcmtlckdsb2JhbFNjb3BlLmg6IFdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmlkbAorV2ViRE9NV29ya2VyR2xvYmFsU2NvcGUuaDogV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGw6
CitKU1dvcmtsZXRHbG9iYWxTY29wZS5oOiBXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsCitET01Xb3JrbGV0R2xvYmFsU2NvcGUuaDogV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3JzLmlkbAorV2ViRE9NV29ya2xldEdsb2JhbFNjb3BlLmg6IFdvcmtsZXRHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwKK1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGw6CiAjIERp
Y3Rpb25hcmllcyBkZXBlbmRlbmNpZXMKIEpTVGVzdERlcml2ZWREaWN0aW9uYXJ5LmNwcDogVGVz
dEluaGVyaXRlZERpY3Rpb25hcnkuaWRsCiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeTIuY3BwOiBU
ZXN0SW5oZXJpdGVkRGljdGlvbmFyeS5pZGwgVGVzdEluaGVyaXRlZERpY3Rpb25hcnkyLmlkbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtlckds
b2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3Jr
ZXJHbG9iYWxTY29wZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmYzODdlOTc2NDM1OTFjMzNjMzYzMjMxYmNi
NWY3NjAwZGYxZGJjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9Xb3JrZXJHbG9iYWxTY29wZS5pZGwKQEAgLTAsMCArMSwyIEBACitpbnRl
cmZhY2UgV29ya2VyR2xvYmFsU2NvcGUgOiBFdmVudFRhcmdldCB7Cit9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3Jr
ZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY4Y2E5ZGJjNmYxMGJi
NTMwZjIyNjczMDRlMWU2N2U5MjA4YTk2NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5p
ZGwKQEAgLTAsMCArMSw2IEBACitwYXJ0aWFsIGludGVyZmFjZSBXb3JrZXJHbG9iYWxTY29wZSB7
CisgICAgYXR0cmlidXRlIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yIEV4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdzsKKyAgICBhdHRyaWJ1dGUgVGVzdE5vZGVDb25zdHJ1Y3RvciBU
ZXN0Tm9kZTsKKyAgICBhdHRyaWJ1dGUgVGVzdE9iakNvbnN0cnVjdG9yIFRlc3RPYmplY3Q7Cisg
ICAgYXR0cmlidXRlIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvciBUZXN0UHJv
bWlzZVJlamVjdGlvbkV2ZW50OworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9Xb3JrbGV0R2xvYmFsU2NvcGUuaWRsIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtsZXRHbG9iYWxTY29wZS5pZGwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODQ1M2ZlODQwYWY1MmNkNTA2YmJiNjYyNmEyYTZlODBjM2M3NWExYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrbGV0R2xvYmFsU2Nv
cGUuaWRsCkBAIC0wLDAgKzEsMiBAQAoraW50ZXJmYWNlIFdvcmtsZXRHbG9iYWxTY29wZSA6IEV2
ZW50VGFyZ2V0IHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE5YWM3MGE5ZGNiNzI0ZDZhNDFlOWE4NGYxYzk0ODZlZWUzMWI5MTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbApAQCAtMCwwICsxLDIgQEAKK3BhcnRp
YWwgaW50ZXJmYWNlIFdvcmtsZXRHbG9iYWxTY29wZSB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1RleHRFbmNvZGVyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0RW5j
b2Rlci5pZGwKaW5kZXggZWIyZGY3MWMzNTQxNjg5OTY5Njk0YjZkMWFhMmRhNTQ3ODgxOTJjYS4u
OTM2ZmY0OTEyMzJlOTg5MzMxMmMyNzM3ZjgxOWY1ZTMyMDYxZmVkZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1RleHRFbmNvZGVyLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
VGV4dEVuY29kZXIuaWRsCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNCw3ICsyNCw2IEBACiAqLwogCiBbCi0gICAgRXhwb3NlZD0oV2luZG93LFdv
cmtlciksCiAgICAgSlNHZW5lcmF0ZVRvSlNPYmplY3QKIF0gZGljdGlvbmFyeSBUZXh0RW5jb2Rl
ckVuY29kZUludG9SZXN1bHQgewogICB1bnNpZ25lZCBsb25nIGxvbmcgcmVhZDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NTIyZTQ5NWY4YTE5
NzFlOTUzODMzNWQ0ODJmYjZkODJiNWZmNzhkLi40NTY3NzYyOGMwOTQwNmFjNTgzYjlmM2Q5Yzgy
NjU0YzBjMDQ5Yzc3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDktMDQgIFlvdWVubiBGYWJsZXQgIDx5b3Vl
bm5AYXBwbGUuY29tPgorCisgICAgICAgIEJpbmRpbmcgZ2VuZXJhdG9yIGlzIG5vdCBhbHdheXMg
Y29tcHV0aW5nIHRoZSByaWdodCBpbnRlcmZhY2UgYXR0cmlidXRlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MTczCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgdG8gdmFsaWRhdGUg
Z2xvYmFsIGNvbnN0cnVjdG9yIGlkbCBmaWxlIGdlbmVyYXRvci4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvYmluZGluZ3MvbWFpbi5weToKKyAgICAgICAgKEJpbmRpbmdzVGVzdHMuZ2Vu
ZXJhdGVfZnJvbV9pZGwpOgorICAgICAgICAoQmluZGluZ3NUZXN0cy5nZW5lcmF0ZV9zdXBwbGVt
ZW50YWxfZGVwZW5kZW5jeSk6CisgICAgICAgIChCaW5kaW5nc1Rlc3RzLm1haW4pOgorCiAyMDIw
LTA5LTAzICBKYW1lcyBEYXJwaW5pYW4gIDxqZGFycGluaWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVcGRhdGUgSmFtZXMgRGFycGluaWFuJ3Mgc3RhdHVzIHRvIGNvbW1pdHRlcgpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9iaW5kaW5ncy9tYWluLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iaW5kaW5ncy9tYWluLnB5CmluZGV4IGEwNzhiOGM5NjFhZWM4MTc2MDIz
YTBlMjAxZWE3ZmQzNmZiZGFiMGUuLmJlZjMyYzcyOTgwMmRiNjNjN2MzOGNlYzFkMmU1YmUwYjUx
NDI4YzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmluZGluZ3MvbWFpbi5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmRpbmdzL21haW4ucHkKQEAgLTc4LDYg
Kzc4LDggQEAgY2xhc3MgQmluZGluZ3NUZXN0czoKICAgICAgICAgICAgIChuYW1lLCBleHRlbnNp
b24pID0gb3MucGF0aC5zcGxpdGV4dChpbnB1dF9maWxlKQogICAgICAgICAgICAgaWYgZXh0ZW5z
aW9uICE9ICcuaWRsJzoKICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYg
bmFtZS5lbmRzd2l0aCgnQ29uc3RydWN0b3JzJyk6CisgICAgICAgICAgICAgICAgY29udGludWUK
ICAgICAgICAgICAgIG9zLndyaXRlKGlkbF9maWxlc19saXN0WzBdLCBzdHJpbmdfdXRpbHMuZW5j
b2RlKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpICsgIlxuIikpCiAg
ICAgICAgIG9zLmNsb3NlKGlkbF9maWxlc19saXN0WzBdKQogCkBAIC0xOTEsMTggKzE5MywyNSBA
QCBjbGFzcyBCaW5kaW5nc1Rlc3RzOgogCiAgICAgICAgIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5
X2ZpbGVuYW1lID0gJ1N1cHBsZW1lbnRhbERlcGVuZGVuY2llcy50eHQnCiAgICAgICAgIHN1cHBs
ZW1lbnRhbF9tYWtlZmlsZV9kZXBlbmRlbmN5X2ZpbGVuYW1lID0gJ1N1cHBsZW1lbnRhbERlcGVu
ZGVuY2llcy5kZXAnCisgICAgICAgIGRvbV93aW5kb3dfY29uc3RydWN0b3JzX2ZpbGVuYW1lID0g
J0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5pZGwnCisgICAgICAgIHdvcmtlcmdsb2JhbHNjb3BlX2Nv
bnN0cnVjdG9yc19maWxlbmFtZSA9ICdXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwn
CisgICAgICAgIGRlZGljYXRlZHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlbmFt
ZSA9ICdEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwnCisgICAgICAg
IHNlcnZpY2V3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUgPSAnU2Vydmlj
ZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCcKKyAgICAgICAgd29ya2xldGdsb2Jh
bHNjb3BlX2NvbnN0cnVjdG9yc19maWxlbmFtZSA9ICdXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuaWRsJworICAgICAgICBwYWludHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNf
ZmlsZW5hbWUgPSAnUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsJworICAg
ICAgICB0ZXN0Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lID0gJ0JpbmRpbmdUZXN0
R2xvYmFsQ29uc3RydWN0b3JzLmlkbCcKIAogICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBm
aWxlLm1rZHRlbXAoKQogICAgICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ1dl
YkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JykKICAgICAgICAgc3VwcGxlbWVu
dGFsX2RlcGVuZGVuY3lfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgc3VwcGxl
bWVudGFsX2RlcGVuZGVuY3lfZmlsZW5hbWUpCiAgICAgICAgIHN1cHBsZW1lbnRhbF9tYWtlZmls
ZV9kZXBlbmRlbmN5X2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNl
bGYucmVzZXRfcmVzdWx0cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgc3VwcGxlbWVudGFsX21ha2Vm
aWxlX2RlcGVuZGVuY3lfZmlsZW5hbWUpCi0gICAgICAgIHdpbmRvd19jb25zdHJ1Y3RvcnNfZmls
ZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgJ0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5p
ZGwnKQotICAgICAgICB3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBh
dGguam9pbih3b3JrX2RpcmVjdG9yeSwgJ1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlk
bCcpCi0gICAgICAgIGRlZGljYXRlZHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxl
ID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCAnRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuaWRsJykKLSAgICAgICAgc2VydmljZXdvcmtlcmdsb2JhbHNjb3BlX2Nv
bnN0cnVjdG9yc19maWxlID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCAnU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCcpCi0gICAgICAgIHdvcmtsZXRnbG9iYWxz
Y29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgJ1dv
cmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwnKQotICAgICAgICBwYWludHdvcmtsZXRn
bG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9y
eSwgJ1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCcpCi0gICAgICAgIHRl
c3RnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVj
dG9yeSwgJ0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbCcpCisgICAgICAgIHdpbmRv
d19jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSBpZiBub3Qg
c2VsZi5yZXNldF9yZXN1bHRzIGVsc2UgaW5wdXRfZGlyZWN0b3J5LCBkb21fd2luZG93X2NvbnN0
cnVjdG9yc19maWxlbmFtZSkKKyAgICAgICAgd29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3Jz
X2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNlbGYucmVzZXRfcmVz
dWx0cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgd29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3Jz
X2ZpbGVuYW1lKQorICAgICAgICBkZWRpY2F0ZWR3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3Rv
cnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSBpZiBub3Qgc2VsZi5yZXNldF9y
ZXN1bHRzIGVsc2UgaW5wdXRfZGlyZWN0b3J5LCBkZWRpY2F0ZWR3b3JrZXJnbG9iYWxzY29wZV9j
b25zdHJ1Y3RvcnNfZmlsZW5hbWUpCisgICAgICAgIHNlcnZpY2V3b3JrZXJnbG9iYWxzY29wZV9j
b25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSBpZiBub3Qgc2Vs
Zi5yZXNldF9yZXN1bHRzIGVsc2UgaW5wdXRfZGlyZWN0b3J5LCBzZXJ2aWNld29ya2VyZ2xvYmFs
c2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lKQorICAgICAgICB3b3JrbGV0Z2xvYmFsc2NvcGVf
Y29uc3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNl
bGYucmVzZXRfcmVzdWx0cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgd29ya2xldGdsb2JhbHNjb3Bl
X2NvbnN0cnVjdG9yc19maWxlbmFtZSkKKyAgICAgICAgcGFpbnR3b3JrbGV0Z2xvYmFsc2NvcGVf
Y29uc3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNl
bGYucmVzZXRfcmVzdWx0cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgcGFpbnR3b3JrbGV0Z2xvYmFs
c2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lKQorICAgICAgICB0ZXN0Z2xvYmFsc2NvcGVfY29u
c3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNlbGYu
cmVzZXRfcmVzdWx0cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgdGVzdGdsb2JhbHNjb3BlX2NvbnN0
cnVjdG9yc19maWxlbmFtZSkKIAogICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX3N1cHBsZW1lbnRh
bF9kZXBlbmRlbmN5KGlucHV0X2RpcmVjdG9yeSwgc3VwcGxlbWVudGFsX2RlcGVuZGVuY3lfZmls
ZSwgc3VwcGxlbWVudGFsX21ha2VmaWxlX2RlcGVuZGVuY3lfZmlsZSwgd2luZG93X2NvbnN0cnVj
dG9yc19maWxlLCB3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSwgZGVkaWNhdGVk
d29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUsIHNlcnZpY2V3b3JrZXJnbG9iYWxz
Y29wZV9jb25zdHJ1Y3RvcnNfZmlsZSwgd29ya2xldGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19m
aWxlLCBwYWludHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSwgdGVzdGdsb2Jh
bHNjb3BlX2NvbnN0cnVjdG9yc19maWxlKToKICAgICAgICAgICAgIHByaW50KCdGYWlsZWQgdG8g
Z2VuZXJhdGUgYSBzdXBwbGVtZW50YWwgZGVwZW5kZW5jeSBmaWxlLicpCkBAIC0yMTIsNiArMjIx
LDIwIEBAIGNsYXNzIEJpbmRpbmdzVGVzdHM6CiAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jl
c3VsdHM6CiAgICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9maWxlX2NoYW5nZXMoJ2RlcGVuZGVu
Y2llcycsIHdvcmtfZGlyZWN0b3J5LCBpbnB1dF9kaXJlY3RvcnksIHN1cHBsZW1lbnRhbF9tYWtl
ZmlsZV9kZXBlbmRlbmN5X2ZpbGVuYW1lKToKICAgICAgICAgICAgICAgICBhbGxfdGVzdHNfcGFz
c2VkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2ZpbGVfY2hhbmdlcygnZ2xv
YmFsc2NvcGUnLCB3b3JrX2RpcmVjdG9yeSwgaW5wdXRfZGlyZWN0b3J5LCBkb21fd2luZG93X2Nv
bnN0cnVjdG9yc19maWxlbmFtZSk6CisgICAgICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9
IEZhbHNlCisgICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9maWxlX2NoYW5nZXMoJ2dsb2JhbHNj
b3BlJywgd29ya19kaXJlY3RvcnksIGlucHV0X2RpcmVjdG9yeSwgd29ya2VyZ2xvYmFsc2NvcGVf
Y29uc3RydWN0b3JzX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2Vk
ID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2ZpbGVfY2hhbmdlcygnZ2xvYmFs
c2NvcGUnLCB3b3JrX2RpcmVjdG9yeSwgaW5wdXRfZGlyZWN0b3J5LCBkZWRpY2F0ZWR3b3JrZXJn
bG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIGFsbF90
ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfZmlsZV9jaGFu
Z2VzKCdnbG9iYWxzY29wZScsIHdvcmtfZGlyZWN0b3J5LCBpbnB1dF9kaXJlY3RvcnksIHNlcnZp
Y2V3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUpOgorICAgICAgICAgICAg
ICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3Rf
ZmlsZV9jaGFuZ2VzKCdnbG9iYWxzY29wZScsIHdvcmtfZGlyZWN0b3J5LCBpbnB1dF9kaXJlY3Rv
cnksIHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUpOgorICAgICAgICAg
ICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5kZXRl
Y3RfZmlsZV9jaGFuZ2VzKCdnbG9iYWxzY29wZScsIHdvcmtfZGlyZWN0b3J5LCBpbnB1dF9kaXJl
Y3RvcnksIHBhaW50d29ya2xldGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlbmFtZSk6Cisg
ICAgICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisgICAgICAgICAgICBpZiBz
ZWxmLmRldGVjdF9maWxlX2NoYW5nZXMoJ2dsb2JhbHNjb3BlJywgd29ya19kaXJlY3RvcnksIGlu
cHV0X2RpcmVjdG9yeSwgdGVzdGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlbmFtZSk6Cisg
ICAgICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCiAKICAgICAgICAgZm9yIGdl
bmVyYXRvciBpbiBzZWxmLmdlbmVyYXRvcnM6CiAgICAgICAgICAgICBpbnB1dF9kaXJlY3Rvcnkg
PSBvcy5wYXRoLmpvaW4oJ1dlYkNvcmUnLCAnYmluZGluZ3MnLCAnc2NyaXB0cycsICd0ZXN0JykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407963</attachid>
            <date>2020-09-04 05:55:31 -0700</date>
            <delta_ts>2020-09-04 09:40:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216173-20200904145529.patch</filename>
            <type>text/plain</type>
            <size>228895</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDFkZDVkZDIxNjU4OTNh
MTAwNTBkYWMwZjIwZGVlZjcxZjljYTM5Yy4uM2ZkZWRhNjRjZTI5N2YzMWI1NWM1MjljNTM5YjQx
ZTNjOWViMTUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1NyBAQAorMjAyMC0wOS0wNCAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgQmluZGluZyBnZW5lcmF0
b3IgaXMgbm90IGFsd2F5cyBjb21wdXRpbmcgdGhlIHJpZ2h0IGludGVyZmFjZSBhdHRyaWJ1dGVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYxNzMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
dGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgcHJlcHJvY2Vzcy1pZGxzLnBsIGNv
bXB1dGVzIHRoZSByaWdodCBhdHRyaWJ1dGVzIGZvciBpbnRlcmZhY2VzLgorICAgICAgICBQcmV2
aW91c2x5LCBpdCB3YXMgY2F1c2luZyBpc3N1ZXMgaWYgYSBkaWN0aW9uYXJ5IGRlZmluZWQgYmVm
b3JlIGFuIGludGVyZmFjZSBpbiB0aGUgc2FtZSBmaWxlIGhhZCBzb21lIGV4dGVuZGVkIGF0dHJp
YnV0ZXMuCisgICAgICAgIEFkZCBzb21lIGdsb2JhbCBvYmplY3RzIElETCBmaWxlcyB0byBlbmFi
bGUgYmluZGluZyB0ZXN0IGNvdmVyYWdlLgorICAgICAgICBDb3ZlcmVkIGJ5IGJpbmRpbmcgdGVz
dHMgYW5kIGV4aXN0aW5nIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvcHJlcHJvY2Vzcy1pZGxzLnBsOgorICAgICAgICAoZ2V0SW50ZXJmYWNlRXh0ZW5kZWRBdHRy
aWJ1dGVzRnJvbUlETCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0JpbmRpbmdU
ZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0RPTVdpbmRvdy5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9ET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEds
b2JhbENvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2lu
ZG93Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RPTVdpbmRvd0NvbnN0cnVjdG9yOjppbml0aWFsaXplUHJvcGVydGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpKU0RPTVdpbmRvd1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OkpTRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRE9NV2luZG93OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRlPEpT
RE9NV2luZG93Pjo6Y2FzdCk6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0NvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93Q29uc3RydWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1
Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvd0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpqc0RPTVdpbmRvd1Rlc3ROb2RlQ29uc3RydWN0b3JHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldEpTRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvclNldHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU0RPTVdpbmRvd1Rlc3ROb2RlQ29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JTZXR0
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNET01XaW5kb3dUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0
SlNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3JTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNET01XaW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OnN1YnNwYWNlRm9y
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6YW5hbHl6ZUhlYXApOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp0b1dyYXBwZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkpTRE9NV2luZG93OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6
c3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OndyYXBwZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3
bHlDcmVhdGVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5k
b3dDb25zdHJ1Y3RvcnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpqc0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlOjphbmFseXplSGVhcCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNl
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6Ondy
YXBwZWQgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0RGljdGlvbmFyeTxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3Q+KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbnZlcnREaWN0aW9uYXJ5VG9KUyk6CisgICAgICAgIChXZWJDb3JlOjpK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcjo6cHJvdG90
eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6SlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93OjpjcmVhdGVQcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OmRlc3Ryb3kpOgorICAgICAgICAoV2Vi
Q29yZTo6SURMT3BlcmF0aW9uPEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Pjo6Y2FzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5
cGVGdW5jdGlvbkRvU29tZXRoaW5nQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpqc0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRG9Tb21ldGhpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnN1YnNwYWNlRm9ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6ZUhlYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dPd25lcjo6aXNS
ZWFjaGFibGVGcm9tT3BhcXVlUm9vdHMpOgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3dPd25lcjo6ZmluYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05l
d2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Ojp0b1dyYXBwZWQpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycy5oLgorICAgICAgICAoV2ViQ29yZTo6SlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdzo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93OjpzdWJzcGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVy
T3duZXIpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcHBlcktleSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdv
cmtsZXRHbG9iYWxTY29wZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNQ
YWludFdvcmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEdsb2Jh
bFNjb3BlOjpzdWJzcGFjZUZvcik6CisgICAgICAgIChXZWJDb3JlOjpKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlOjp3cmFwcGVkIGNvbnN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9y
U3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6SlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckds
b2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OmNyZWF0
ZVN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZTo6c3Vic3BhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU6OndyYXBwZWQgY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2Jh
bE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0R2xvYmFs
T2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVj
dERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6anNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RQYWludFdvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RHbG9i
YWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0R2xvYmFsT2JqZWN0
V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
ZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVj
dG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdEdsb2Jh
bE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycy5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2Jh
bFNjb3BlOjpKU1dvcmtlckdsb2JhbFNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
R2xvYmFsU2NvcGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2Vy
R2xvYmFsU2NvcGU6OmNyZWF0ZVByb3RvdHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtl
ckdsb2JhbFNjb3BlOjpwcm90b3R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9i
YWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURMQXR0cmlidXRl
PEpTV29ya2VyR2xvYmFsU2NvcGU+OjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1dvcmtlckds
b2JhbFNjb3BlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNXb3JrZXJHbG9iYWxT
Y29wZUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yR2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1dvcmtlckdsb2JhbFNjb3BlRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0SlNXb3JrZXJHbG9iYWxTY29wZUV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVj
dG9yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9k
ZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVU
ZXN0Tm9kZUNvbnN0cnVjdG9yU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2Vy
R2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmpzV29y
a2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3JHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNXb3JrZXJHbG9iYWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1dvcmtlckdsb2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVjdG9yU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6anNXb3JrZXJHbG9iYWxTY29wZVRlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Q29uc3RydWN0b3JTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNX
b3JrZXJHbG9iYWxTY29wZVRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXApOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnRvV3JhcHBlZCk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckdsb2JhbFNjb3BlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJHbG9iYWxTY29wZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV29ya2VyR2xvYmFsU2NvcGU6OndyYXBwZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0pTTmV3bHlDcmVhdGVk
KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6cHJv
dG90eXBlRm9yU3RydWN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpjcmVhdGVQcm90b3R5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnByb3RvdHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6anNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlNOZXdseUNyZWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6
CisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6dG9XcmFwcGVkKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dvcmtsZXRHbG9iYWxTY29wZTo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrbGV0R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2xldEdsb2JhbFNjb3BlOjp3cmFwcGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9KU05ld2x5Q3Jl
YXRlZCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmg6IEFkZGVkLgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5pZGw6
IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5pZGw6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtl
ckdsb2JhbFNjb3BlLmlkbDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbDogQWRkZWQuCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtsZXRHbG9iYWxTY29wZS5pZGw6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aWRsOiBBZGRlZC4KKyAgICAgICAgKiBkb20vVGV4dEVuY29kZXIuaWRsOgorCiAyMDIwLTA5LTAz
ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFN0b3JlIGFsbCBz
dHlsaW5nIGZsYWdzIGluIG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzLWlkbHMucGwgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAppbmRleCBiNzM3Y2Ri
YmE3MDZjYzI5NTViOTlmMzg3YzhhZWM5MTJhMTZhNTY4Li4xMWNjMTYyZWU2MjViYjBmZmFlNTVk
NWQyYjY4ZWZkZTI2YTIwNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3ByZXByb2Nlc3MtaWRscy5wbApAQCAtMjQ1LDcgKzI0NSw4IEBAIGlmICgkc3VwcGxl
bWVudGFsTWFrZWZpbGVEZXBzKSB7CiAgICAgZm9yZWFjaCBteSAkaWRsRmlsZSAoc29ydCBrZXlz
ICVzdXBwbGVtZW50YWxzKSB7CiAgICAgICAgIG15ICRiYXNlbmFtZSA9ICRpZGxGaWxlVG9JbnRl
cmZhY2VOYW1leyRpZGxGaWxlfTsKIAotICAgICAgICBteSBAZGVwZW5kZW5jaWVzID0gbWFwIHsg
YmFzZW5hbWUoJF8pIH0gQHskc3VwcGxlbWVudGFsc3skaWRsRmlsZX19OworICAgICAgICBteSBA
ZGVwZW5kZW5jeUxpc3QgPSBtYXAgeyBiYXNlbmFtZSgkXykgfSBAeyRzdXBwbGVtZW50YWxzeyRp
ZGxGaWxlfX07CisgICAgICAgIG15IEBkZXBlbmRlbmNpZXMgPSBzb3J0KGtleXMgJXt7IG1hcHsk
Xz0+MX1AZGVwZW5kZW5jeUxpc3R9fSk7CiAKICAgICAgICAgJG1ha2VmaWxlRGVwcyAuPSAiSlMk
e2Jhc2VuYW1lfS5oOiBAe2RlcGVuZGVuY2llc31cbiI7CiAgICAgICAgICRtYWtlZmlsZURlcHMg
Lj0gIkRPTSR7YmFzZW5hbWV9Lmg6IEB7ZGVwZW5kZW5jaWVzfVxuIjsKQEAgLTQyNyw3ICs0Mjgs
MTMgQEAgc3ViIGdldEludGVyZmFjZUV4dGVuZGVkQXR0cmlidXRlc0Zyb21JREwKICAgICAkZmls
ZUNvbnRlbnRzID1+IHMvKD86KD86KD86XC9cLykoPzpbXlxuXSopKD86XG4pKXwoPzooPzpcL1wq
KSg/Oig/OlteXCpdK3xcKig/IVwvKSkqKSg/OlwqXC8pKSkvL2c7CiAKICAgICBpZiAoJGZpbGVD
b250ZW50cyA9fiAvXFsoLiopXF1ccysoY2FsbGJhY2sgaW50ZXJmYWNlfGludGVyZmFjZXxleGNl
cHRpb24pXHMrKFx3KykvZ3MpIHsKLSAgICAgICAgbXkgQHBhcnRzID0gc3BsaXQobS8sKD8hW14o
KV0qXCkpLywgJDEpOworICAgICAgICBteSAkcGFyYW1ldGVycyA9ICQxOworICAgICAgICBpZiAo
aW5kZXgoJHBhcmFtZXRlcnMsICd9JykgIT0gLTEpIHsKKyAgICAgICAgICAgICMgSW4gY2FzZSB3
ZSBoYXZlIGEgZGVjbGFyYXRpb24gbGlrZSBhIGRpY3Rpb25hcnkgd2l0aCBleHRlbmRlZCBhdHRy
aWJ1dGVzIGRlZmluZWQgYmVmb3JlIHRoZSBpbnRlcmZhY2UuCisgICAgICAgICAgICAkcGFyYW1l
dGVycyA9IChzcGxpdCAnfScsICQxKVstMV07CisgICAgICAgICAgICAkcGFyYW1ldGVycyA9IHN1
YnN0cigkcGFyYW1ldGVycywgaW5kZXgoJHBhcmFtZXRlcnMsICdbJykgKyAxKTsKKyAgICAgICAg
fQorICAgICAgICBteSBAcGFydHMgPSBzcGxpdChtLywoPyFbXigpXSpcKSkvLCAkcGFyYW1ldGVy
cyk7CiAgICAgICAgIGZvcmVhY2ggbXkgJHBhcnQgKEBwYXJ0cykgewogICAgICAgICAgICAgbXkg
QGtleVZhbHVlID0gc3BsaXQoJz0nLCAkcGFydCk7CiAgICAgICAgICAgICBteSAka2V5ID0gdHJp
bSgka2V5VmFsdWVbMF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9CaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5p
ZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDVkNzJjM2M0MWQ3NDVlMzVjODc3ZTAxMDQ4YTc4NTMzYTQwZmRmNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9C
aW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5pZGwKQEAgLTAsMCArMSw3MSBAQAorcGFydGlh
bCBpbnRlcmZhY2UgVGVzdEdsb2JhbE9iamVjdCB7CisgICAgYXR0cmlidXRlIERPTVdpbmRvd0Nv
bnN0cnVjdG9yIERPTVdpbmRvdzsKKyAgICBhdHRyaWJ1dGUgRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvciBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTsKKyAgICBhdHRyaWJ1
dGUgUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvciBQYWludFdvcmtsZXRHbG9iYWxT
Y29wZTsKKyAgICBhdHRyaWJ1dGUgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Ig
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlOworICAgIGF0dHJpYnV0ZSBUZXN0Q0VSZWFjdGlvbnND
b25zdHJ1Y3RvciBUZXN0Q0VSZWFjdGlvbnM7CisgICAgYXR0cmlidXRlIFRlc3RDRVJlYWN0aW9u
c1N0cmluZ2lmaWVyQ29uc3RydWN0b3IgVGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXI7CisgICAg
YXR0cmlidXRlIFRlc3RDYWxsVHJhY2VyQ29uc3RydWN0b3IgVGVzdENhbGxUcmFjZXI7CisgICAg
W0NvbmRpdGlvbmFsPVRFU1RfQ09ORElUSU9OQUxdIGF0dHJpYnV0ZSBUZXN0Q2FsbGJhY2tJbnRl
cmZhY2VDb25zdHJ1Y3RvciBUZXN0Q2FsbGJhY2tJbnRlcmZhY2U7CisgICAgYXR0cmlidXRlIFRl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3RvckNvbnN0cnVjdG9yIFRlc3RDbGFzc1dpdGhK
U0J1aWx0aW5Db25zdHJ1Y3RvcjsKKyAgICBhdHRyaWJ1dGUgVGVzdERPTUpJVENvbnN0cnVjdG9y
IFRlc3RET01KSVQ7CisgICAgYXR0cmlidXRlIFRlc3REb21haW5TZWN1cml0eUNvbnN0cnVjdG9y
IFRlc3REb21haW5TZWN1cml0eTsKKyAgICBhdHRyaWJ1dGUgVGVzdEVuYWJsZWRCeVNldHRpbmdD
b25zdHJ1Y3RvciBUZXN0RW5hYmxlZEJ5U2V0dGluZzsKKyAgICBbRW5hYmxlZEZvckNvbnRleHQs
IFNlY3VyZUNvbnRleHRdIGF0dHJpYnV0ZSBUZXN0RW5hYmxlZEZvckNvbnRleHRDb25zdHJ1Y3Rv
ciBUZXN0RW5hYmxlZEZvckNvbnRleHQ7CisgICAgYXR0cmlidXRlIFRlc3RFdmVudENvbnN0cnVj
dG9yQ29uc3RydWN0b3IgVGVzdEV2ZW50Q29uc3RydWN0b3I7CisgICAgYXR0cmlidXRlIFRlc3RF
dmVudFRhcmdldENvbnN0cnVjdG9yIFRlc3RFdmVudFRhcmdldDsKKyAgICBhdHRyaWJ1dGUgVGVz
dEV4Y2VwdGlvbkNvbnN0cnVjdG9yIFRlc3RFeGNlcHRpb247CisgICAgYXR0cmlidXRlIFRlc3RH
ZW5lcmF0ZUlzUmVhY2hhYmxlQ29uc3RydWN0b3IgVGVzdEdlbmVyYXRlSXNSZWFjaGFibGU7Cisg
ICAgYXR0cmlidXRlIFRlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvciBUZXN0R2xvYmFsT2JqZWN0
OworICAgIGF0dHJpYnV0ZSBUZXN0SW5kZXhlZFNldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9y
IFRlc3RJbmRleGVkU2V0dGVyTm9JZGVudGlmaWVyOworICAgIGF0dHJpYnV0ZSBUZXN0SW5kZXhl
ZFNldHRlclRocm93aW5nRXhjZXB0aW9uQ29uc3RydWN0b3IgVGVzdEluZGV4ZWRTZXR0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjsKKyAgICBhdHRyaWJ1dGUgVGVzdEluZGV4ZWRTZXR0ZXJXaXRoSWRlbnRp
ZmllckNvbnN0cnVjdG9yIFRlc3RJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI7CisgICAgW0Nv
bmRpdGlvbmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRlIFRlc3RJbnRlcmZhY2VD
b25zdHJ1Y3RvciBUZXN0SW50ZXJmYWNlOworICAgIGF0dHJpYnV0ZSBUZXN0SW50ZXJmYWNlTGVh
ZGluZ1VuZGVyc2NvcmVDb25zdHJ1Y3RvciBUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVyc2NvcmU7
CisgICAgYXR0cmlidXRlIFRlc3RJdGVyYWJsZUNvbnN0cnVjdG9yIFRlc3RJdGVyYWJsZTsKKyAg
ICBhdHRyaWJ1dGUgVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdEpTQnVp
bHRpbkNvbnN0cnVjdG9yOworICAgIGF0dHJpYnV0ZSBUZXN0TWFwTGlrZUNvbnN0cnVjdG9yIFRl
c3RNYXBMaWtlOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyTm9JZGVu
dGlmaWVyQ29uc3RydWN0b3IgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlck5vSWRlbnRpZmllcjsK
KyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9u
Q29uc3RydWN0b3IgVGVzdE5hbWVkQW5kSW5kZXhlZFNldHRlclRocm93aW5nRXhjZXB0aW9uOwor
ICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXJDb25z
dHJ1Y3RvciBUZXN0TmFtZWRBbmRJbmRleGVkU2V0dGVyV2l0aElkZW50aWZpZXI7CisgICAgYXR0
cmlidXRlIFRlc3ROYW1lZENvbnN0cnVjdG9yQ29uc3RydWN0b3IgVGVzdE5hbWVkQ29uc3RydWN0
b3I7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZENvbnN0cnVjdG9yTmFtZWRDb25zdHJ1Y3RvciBB
dWRpbzsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkRGVsZXRlck5vSWRlbnRpZmllckNvbnN0cnVj
dG9yIFRlc3ROYW1lZERlbGV0ZXJOb0lkZW50aWZpZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1l
ZERlbGV0ZXJUaHJvd2luZ0V4Y2VwdGlvbkNvbnN0cnVjdG9yIFRlc3ROYW1lZERlbGV0ZXJUaHJv
d2luZ0V4Y2VwdGlvbjsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlm
aWVyQ29uc3RydWN0b3IgVGVzdE5hbWVkRGVsZXRlcldpdGhJZGVudGlmaWVyOworICAgIGF0dHJp
YnV0ZSBUZXN0TmFtZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXJDb25zdHJ1Y3RvciBUZXN0TmFt
ZWREZWxldGVyV2l0aEluZGV4ZWRHZXR0ZXI7CisgICAgYXR0cmlidXRlIFRlc3ROYW1lZEdldHRl
ckNhbGxXaXRoQ29uc3RydWN0b3IgVGVzdE5hbWVkR2V0dGVyQ2FsbFdpdGg7CisgICAgYXR0cmli
dXRlIFRlc3ROYW1lZEdldHRlck5vSWRlbnRpZmllckNvbnN0cnVjdG9yIFRlc3ROYW1lZEdldHRl
ck5vSWRlbnRpZmllcjsKKyAgICBhdHRyaWJ1dGUgVGVzdE5hbWVkR2V0dGVyV2l0aElkZW50aWZp
ZXJDb25zdHJ1Y3RvciBUZXN0TmFtZWRHZXR0ZXJXaXRoSWRlbnRpZmllcjsKKyAgICBhdHRyaWJ1
dGUgVGVzdE5hbWVkU2V0dGVyTm9JZGVudGlmaWVyQ29uc3RydWN0b3IgVGVzdE5hbWVkU2V0dGVy
Tm9JZGVudGlmaWVyOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJUaHJvd2luZ0V4Y2Vw
dGlvbkNvbnN0cnVjdG9yIFRlc3ROYW1lZFNldHRlclRocm93aW5nRXhjZXB0aW9uOworICAgIGF0
dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJXaXRoSWRlbnRpZmllckNvbnN0cnVjdG9yIFRlc3ROYW1l
ZFNldHRlcldpdGhJZGVudGlmaWVyOworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJXaXRo
SW5kZXhlZEdldHRlckNvbnN0cnVjdG9yIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVy
OworICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJXaXRoSW5kZXhlZEdldHRlckFuZFNldHRl
ckNvbnN0cnVjdG9yIFRlc3ROYW1lZFNldHRlcldpdGhJbmRleGVkR2V0dGVyQW5kU2V0dGVyOwor
ICAgIGF0dHJpYnV0ZSBUZXN0TmFtZWRTZXR0ZXJXaXRoT3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVj
dG9yIFRlc3ROYW1lZFNldHRlcldpdGhPdmVycmlkZUJ1aWx0aW5zOworICAgIGF0dHJpYnV0ZSBU
ZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNDb25zdHJ1Y3RvciBUZXN0TmFt
ZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXM7CisgICAgYXR0cmlidXRlIFRlc3ROYW1l
ZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllc0FuZE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvciBUZXN0TmFtZWRTZXR0ZXJXaXRoVW5mb3JnYWJsZVByb3BlcnRpZXNBbmRPdmVycmlkZUJ1
aWx0aW5zOworICAgIFtDb25kaXRpb25hbD1Db25kaXRpb25EZXJpdmVkXSBhdHRyaWJ1dGUgVGVz
dE9wZXJhdGlvbkNvbmRpdGlvbmFsQ29uc3RydWN0b3IgVGVzdE9wZXJhdGlvbkNvbmRpdGlvbmFs
OworICAgIGF0dHJpYnV0ZSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNv
bnN0cnVjdG9yIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlOworICAgIGF0
dHJpYnV0ZSBUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yIFRlc3RPdmVycmlkZUJ1aWx0
aW5zOworICAgIGF0dHJpYnV0ZSBUZXN0UGx1Z2luSW50ZXJmYWNlQ29uc3RydWN0b3IgVGVzdFBs
dWdpbkludGVyZmFjZTsKKyAgICBhdHRyaWJ1dGUgVGVzdFJlYWRPbmx5TWFwTGlrZUNvbnN0cnVj
dG9yIFRlc3RSZWFkT25seU1hcExpa2U7CisgICAgYXR0cmlidXRlIFRlc3RSZWFkT25seVNldExp
a2VDb25zdHJ1Y3RvciBUZXN0UmVhZE9ubHlTZXRMaWtlOworICAgIGF0dHJpYnV0ZSBUZXN0UmVw
b3J0RXh0cmFNZW1vcnlDb3N0Q29uc3RydWN0b3IgVGVzdFJlcG9ydEV4dHJhTWVtb3J5Q29zdDsK
KyAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25Db25zdHJ1Y3RvciBUZXN0U2VyaWFsaXph
dGlvbjsKKyAgICBhdHRyaWJ1dGUgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNl
Q29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25JbmRpcmVjdEluaGVyaXRhbmNlOworICAgIGF0
dHJpYnV0ZSBUZXN0U2VyaWFsaXphdGlvbkluaGVyaXRDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXph
dGlvbkluaGVyaXQ7CisgICAgYXR0cmlidXRlIFRlc3RTZXJpYWxpemF0aW9uSW5oZXJpdEZpbmFs
Q29uc3RydWN0b3IgVGVzdFNlcmlhbGl6YXRpb25Jbmhlcml0RmluYWw7CisgICAgW0NvbmRpdGlv
bmFsPUNvbmRpdGlvbjF8Q29uZGl0aW9uMl0gYXR0cmlidXRlIFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2VDb25zdHJ1Y3RvciBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlOworICAgIGF0dHJpYnV0ZSBUZXN0U2V0TGlrZUNvbnN0cnVjdG9yIFRlc3RTZXRMaWtlOwor
ICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJDb25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXI7
CisgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbkNvbnN0cnVj
dG9yIFRlc3RTdHJpbmdpZmllckFub255bW91c09wZXJhdGlvbjsKKyAgICBhdHRyaWJ1dGUgVGVz
dFN0cmluZ2lmaWVyTmFtZWRPcGVyYXRpb25Db25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXJOYW1l
ZE9wZXJhdGlvbjsKKyAgICBhdHRyaWJ1dGUgVGVzdFN0cmluZ2lmaWVyT3BlcmF0aW9uSW1wbGVt
ZW50ZWRBc0NvbnN0cnVjdG9yIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbkltcGxlbWVudGVkQXM7
CisgICAgYXR0cmlidXRlIFRlc3RTdHJpbmdpZmllck9wZXJhdGlvbk5hbWVkVG9TdHJpbmdDb25z
dHJ1Y3RvciBUZXN0U3RyaW5naWZpZXJPcGVyYXRpb25OYW1lZFRvU3RyaW5nOworICAgIGF0dHJp
YnV0ZSBUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNvbnN0cnVjdG9yIFRlc3RTdHJp
bmdpZmllclJlYWRPbmx5QXR0cmlidXRlOworICAgIGF0dHJpYnV0ZSBUZXN0U3RyaW5naWZpZXJS
ZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvciBUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRy
aWJ1dGU7CisgICAgYXR0cmlidXRlIFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yIFRlc3RUeXBlZGVm
czsKKyAgICBhdHRyaWJ1dGUgV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvciBXb3JrZXJHbG9i
YWxTY29wZTsKKyAgICBhdHRyaWJ1dGUgV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IgV29y
a2xldEdsb2JhbFNjb3BlOworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9ET01XaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0RPTVdpbmRvdy5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E0MmIyYTQ4ZWI3YjhlMzM4NDlj
MTRkZDkyZWI2N2IxMDg2MTJiNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9ET01XaW5kb3cuaWRsCkBAIC0wLDAgKzEsMiBAQAoraW50ZXJm
YWNlIERPTVdpbmRvdyA6IEV2ZW50VGFyZ2V0IHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9ET01XaW5kb3dDb25zdHJ1Y3RvcnMu
aWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEyNWRiNThkNjY4ZDg2YjZjZWJkYTM2MTUzZDIwNmQzYzA5YWIzNWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
RE9NV2luZG93Q29uc3RydWN0b3JzLmlkbApAQCAtMCwwICsxLDYgQEAKK3BhcnRpYWwgaW50ZXJm
YWNlIERPTVdpbmRvdyB7CisgICAgYXR0cmlidXRlIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0Nv
bnN0cnVjdG9yIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzsKKyAgICBhdHRyaWJ1dGUgVGVzdE5v
ZGVDb25zdHJ1Y3RvciBUZXN0Tm9kZTsKKyAgICBhdHRyaWJ1dGUgVGVzdE9iakNvbnN0cnVjdG9y
IFRlc3RPYmplY3Q7CisgICAgYXR0cmlidXRlIFRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25z
dHJ1Y3RvciBUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50OworfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MGYzNTJmMDJiOGE1MzQzMjEyMDNiZTQ3
MTk3Y2FlZGFkY2I1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaWRsCkBAIC0wLDAgKzEs
MiBAQAoraW50ZXJmYWNlIERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIDogV29ya2VyR2xvYmFs
U2NvcGUgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcnMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwZDk1YzhmZTk0NDk2YzgwMzhkMTEwM2UwYTdm
YWNkMzYwMzk0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCkBA
IC0wLDAgKzEsMiBAQAorcGFydGlhbCBpbnRlcmZhY2UgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9FeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5pZGwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODk1
ZjI0MmIwZDg5ZjgxMjc4ODA5MTUxNzcxMDNlMDc2ZjE0NTYxZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9FeHBvc2VkVG9Xb3JrZXJBbmRX
aW5kb3cuaWRsCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAgICBKU0dlbmVyYXRlVG9KU09i
amVjdAorXSBkaWN0aW9uYXJ5IEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0RpY3QgeworICAgIFRl
c3RPYmogb2JqOworfTsKKworWworICAgIEV4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpLAorICAgIElt
cGxlbWVudGF0aW9uTGFja3NWVGFibGUKK10gaW50ZXJmYWNlIEV4cG9zZWRUb1dvcmtlckFuZFdp
bmRvdyB7CisgICAgY29uc3RydWN0b3IoKTsKKworICAgIEV4cG9zZWRUb1dvcmtlckFuZFdpbmRv
d0RpY3QgZG9Tb21ldGhpbmcoKTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEds
b2JhbENvbnN0cnVjdG9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFiNjZhZDZjZjI4NjkzN2M2NzQ1NTZk
M2U4MGJmYjVkMzQ2YzFmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmNwcApA
QCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRl
bGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaCBh
bmQKKyAgICBKU0JpbmRpbmdUZXN0R2xvYmFsQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBm
b3IgQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZl
bnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNCaW5kaW5nVGVz
dEdsb2JhbENvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1
Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8g
Y29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3Rv
cnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xMWI2NmFkNmNmMjg2OTM3YzY3NDU1NmQzZTgwYmZiNWQzNDZjMWZi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaApAQCAtMCwwICsxLDYgQEAKKy8q
CisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0
aGF0IEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU0JpbmRpbmdU
ZXN0R2xvYmFsQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgQmluZGluZ1Rlc3RHbG9i
YWxDb25zdHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlw
dHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9y
cy5oIGFuZAorICAgIEpTQmluZGluZ1Rlc3RHbG9iYWxDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5
IGJ1aWxkLiBUaGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5k
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2lu
ZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43NWIxOTk2NTMxMGVhZDNiYzE2ZmIzMmJkMjI5ZTZiMjdlN2M0
NzZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTRE9NV2luZG93LmNwcApAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIK
KworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNl
cy5oIgorI2luY2x1ZGUgIkpTRE9NQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNs
dWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2Fj
aGUuaCIKKyNpbmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oIgorI2luY2x1ZGUg
IkpTVGVzdE5vZGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJKU1Rlc3RQ
cm9taXNlUmVqZWN0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJKU1dpbmRvd1Byb3h5LmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkNvcmVKU0NsaWVu
dERhdGEuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IZWFwQW5hbHl6ZXIuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNEZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisK
KworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworLy8gQXR0cmli
dXRlcworCitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93Q29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNET01XaW5kb3dDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzRE9NV2luZG93RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2Jvb2wgc2V0SlNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3Rv
cihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0
eU5hbWUpOworYm9vbCBzZXRKU0RPTVdpbmRvd1Rlc3ROb2RlQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU0RPTVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0
cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlBy
b3BlcnR5TmFtZSk7Citib29sIHNldEpTRE9NV2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKKwordXNpbmcgSlNET01XaW5kb3dDb25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTRE9NV2luZG93PjsKKworLyogSGFzaCB0
YWJsZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNET01XaW5k
b3dUYWJsZUluZGV4WzEwXSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMCwgOCB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgLTEs
IC0xIH0sCisgICAgeyAzLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCisgICAgeyAxLCA5IH0sCisg
ICAgeyAyLCAtMSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNET01X
aW5kb3dUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ci
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzRE9NV2luZG93RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3Ip
LCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihz
ZXRKU0RPTVdpbmRvd0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKSB9IH0sCisg
ICAgeyAiVGVzdE5vZGUiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJv
cGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlRlc3RPYmplY3Qi
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzRE9NV2luZG93VGVzdE9iamVjdENvbnN0cnVjdG9yKSwgKGludHB0cl90KSBz
dGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNET01XaW5kb3dU
ZXN0T2JqZWN0Q29uc3RydWN0b3IpIH0gfSwKKyAgICB7ICJUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRF
bnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc0RPTVdpbmRvd1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1
Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1
bmM+KHNldEpTRE9NV2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKSB9
IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTRE9NV2luZG93VGFibGUgPSB7IDQs
IDcsIHRydWUsIEpTRE9NV2luZG93OjppbmZvKCksIEpTRE9NV2luZG93VGFibGVWYWx1ZXMsIEpT
RE9NV2luZG93VGFibGVJbmRleCB9OwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTRE9NV2luZG93Q29u
c3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNFdmVudFRhcmdldDo6
Z2V0Q29uc3RydWN0b3Iodm0sICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQg
SlNET01XaW5kb3dDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+cHJvdG90eXBlLCBnbG9iYWxPYmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KHZt
KSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5n
KHZtLCAiRE9NV2luZG93Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBK
U0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVt
cGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNET01XaW5kb3dDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiRE9NV2luZG93IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RPTVdpbmRvd0NvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZv
ciBwcm90b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpT
RE9NV2luZG93UHJvdG90eXBlVGFibGVJbmRleFsyXSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAg
IHsgMCwgLTEgfSwKK307CisKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTRE9NV2lu
ZG93UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0lu
dHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzRE9NV2luZG93Q29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFBy
b3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU0RPTVdpbmRvd0NvbnN0cnVjdG9yKSB9IH0s
Cit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTRE9NV2luZG93UHJvdG90eXBlVGFibGUg
PSB7IDEsIDEsIHRydWUsIEpTRE9NV2luZG93OjppbmZvKCksIEpTRE9NV2luZG93UHJvdG90eXBl
VGFibGVWYWx1ZXMsIEpTRE9NV2luZG93UHJvdG90eXBlVGFibGVJbmRleCB9OworY29uc3QgQ2xh
c3NJbmZvIEpTRE9NV2luZG93UHJvdG90eXBlOjpzX2luZm8gPSB7ICJET01XaW5kb3ciLCAmQmFz
ZTo6c19pbmZvLCAmSlNET01XaW5kb3dQcm90b3R5cGVUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU0RPTVdpbmRvd1Byb3RvdHlwZSkgfTsKKwordm9pZCBKU0RPTVdpbmRvd1By
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXModm0sIEpTRE9NV2luZG93OjppbmZv
KCksIEpTRE9NV2luZG93UHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9f
U1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpT
RE9NV2luZG93OjpzX2luZm8gPSB7ICJET01XaW5kb3ciLCAmQmFzZTo6c19pbmZvLCAmSlNET01X
aW5kb3dUYWJsZSwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RPTVdpbmRvdykgfTsK
KworSlNET01XaW5kb3c6OkpTRE9NV2luZG93KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFJlZjxET01XaW5kb3c+JiYgaW1wbCwgSlNXaW5kb3dQcm94eSogcHJveHkpCisgICAgOiBKU0V2
ZW50VGFyZ2V0KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCksIHByb3h5KQoreworfQorCit2
b2lkIEpTRE9NV2luZG93OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTV2luZG93UHJveHkqIHBy
b3h5KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBET01XaW5kb3c+Ojp2
YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4g
dGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIp
OworCit9CisKK0pTVmFsdWUgSlNET01XaW5kb3c6OmdldENvbnN0cnVjdG9yKFZNJiB2bSwgY29u
c3QgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNET01XaW5kb3dDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01H
bG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordGVtcGxhdGU8PiBpbmxpbmUgSlNE
T01XaW5kb3cqIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OmNhc3QoSlNHbG9iYWxPYmplY3Qm
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvdyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIGpzRE9NV2luZG93Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZN
JiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Nj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNE
eW5hbWljQ2FzdDxKU0RPTVdpbmRvd1Byb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhp
c1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRE9NV2luZG93OjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9
CisKK2Jvb2wgc2V0SlNET01XaW5kb3dDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNh
bEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTRE9NV2luZG93UHJvdG90eXBlKj4o
dm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtFTFkoIXByb3Rv
dHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzRE9NV2luZG93RXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTRE9NV2luZG93JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3c6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCAmdGhpc09iamVjdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93RXhwb3NlZFRv
V29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNET01XaW5kb3c+OjpnZXQ8anNET01XaW5kb3dFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIkV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93IiksIHN0cmxlbigiRXhwb3NlZFRvV29ya2VyQW5kV2luZG93IikpLCB2YWx1
ZSk7Cit9CisKK2Jvb2wgc2V0SlNET01XaW5kb3dFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25z
dHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFs
dWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJu
IElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OnNldDxzZXRKU0RPTVdpbmRvd0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhp
c1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciKTsKK30KKwor
c3RhdGljIGlubGluZSBKU1ZhbHVlIGpzRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvckdldHRl
cihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cmIHRoaXNP
YmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJl
dHVybiBKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KSwgJnRoaXNPYmplY3QpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc0RPTVdpbmRvd1Rl
c3ROb2RlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNET01XaW5kb3c+OjpnZXQ8anNET01XaW5kb3dUZXN0Tm9kZUNvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE5vZGUiKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTRE9NV2luZG93VGVzdE5vZGVDb25zdHJ1Y3RvclNl
dHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cmIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1
Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigiVGVzdE5vZGUiKSwg
c3RybGVuKCJUZXN0Tm9kZSIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTRE9NV2luZG93VGVz
dE5vZGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7Cisg
ICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OnNldDxzZXRKU0RPTVdpbmRvd1Rl
c3ROb2RlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUs
IGVuY29kZWRWYWx1ZSwgIlRlc3ROb2RlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBq
c0RPTVdpbmRvd1Rlc3RPYmplY3RDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01XaW5kb3cmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VE
X1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3RPYmo6OmdldENv
bnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCAmdGhpc09iamVjdCk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzRE9NV2luZG93VGVzdE9iamVjdENvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTRE9NV2luZG93
Pjo6Z2V0PGpzRE9NV2luZG93VGVzdE9iamVjdENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdE9iamVjdCIpOworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NV2luZG93JiB0aGlzT2JqZWN0LCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0
dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oIlRlc3RPYmplY3QiKSwgc3RybGVuKCJUZXN0
T2JqZWN0IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wgc2V0SlNET01XaW5kb3dUZXN0T2JqZWN0Q29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVy
biBJRExBdHRyaWJ1dGU8SlNET01XaW5kb3c+OjpzZXQ8c2V0SlNET01XaW5kb3dUZXN0T2JqZWN0
Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29k
ZWRWYWx1ZSwgIlRlc3RPYmplY3QiKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzRE9N
V2luZG93VGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTVdpbmRvdyYgdGhpc09iamVjdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTVGVz
dFByb21pc2VSZWplY3Rpb25FdmVudDo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCksICZ0aGlzT2JqZWN0KTsKK30KKworRW5jb2RlZEpTVmFsdWUganNET01X
aW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNET01XaW5kb3c+OjpnZXQ8anNET01X
aW5kb3dUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Iik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU0RPTVdpbmRvd1Rlc3RQcm9taXNlUmVqZWN0aW9u
RXZlbnRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01XaW5kb3cmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCIpLCBzdHJsZW4oIlRlc3RQcm9taXNlUmVq
ZWN0aW9uRXZlbnQiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU0RPTVdpbmRvd1Rlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU0RPTVdpbmRvdz46OnNldDxzZXRK
U0RPTVdpbmRvd1Rlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvclNldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiVGVzdFByb21pc2VS
ZWplY3Rpb25FdmVudCIpOworfQorCitKU0M6Oklzb1N1YnNwYWNlKiBKU0RPTVdpbmRvdzo6c3Vi
c3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3Rh
dGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRhKTsKKyAgICBhdXRvJiBzcGFj
ZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7Cisg
ICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JET01XaW5kb3cgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNl
PiBJU09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCBjbGllbnREYXRhLm1faGVhcENlbGxUeXBlRm9y
SlNET01XaW5kb3cuZ2V0KCksIEpTRE9NV2luZG93KTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNl
cy5tX3N1YnNwYWNlRm9yRE9NV2luZG93LmdldCgpOworSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1
bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9sb2dpY2FsLWNv
bXBhcmUiKQorICAgIGlmICgmSlNET01XaW5kb3c6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0g
JkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRh
Lm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdT
X0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBK
U0RPTVdpbmRvdzo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5
emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNET01XaW5kb3cqPihjZWxs
KTsKKyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVj
dC0+d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhp
c09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAg
QmFzZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCisjaWYgRU5BQkxFKEJJTkRJ
TkdfSU5URUdSSVRZKQorI2lmIFBMQVRGT1JNKFdJTikKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NDgzKQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkICgqY29uc3QgX19pZGVudGlmaWVyKCI/
P183RE9NV2luZG93QFdlYkNvcmVAQDZCQCIpW10pKCk7IH0KKyNlbHNlCitleHRlcm4gIkMiIHsg
ZXh0ZXJuIHZvaWQqIF9aVFZON1dlYkNvcmU5RE9NV2luZG93RVtdOyB9CisjZW5kaWYKKyNlbmRp
ZgorCitKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPERPTVdpbmRvdz4mJiBpbXBsKQor
eworCisjaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZvaWQqIGFjdHVh
bFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOworI2lmIFBMQVRG
T1JNKFdJTikKKyAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIo
Ij8/XzdET01XaW5kb3dAV2ViQ29yZUBANkJAIik7CisjZWxzZQorICAgIHZvaWQqIGV4cGVjdGVk
VlRhYmxlUG9pbnRlciA9ICZfWlRWTjdXZWJDb3JlOURPTVdpbmRvd0VbMl07CisjZW5kaWYKKwor
ICAgIC8vIElmIHRoaXMgZmFpbHMgRE9NV2luZG93IGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNv
IHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAvLyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0
dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfcG9seW1vcnBoaWM8RE9NV2luZG93Pjo6dmFsdWUsICJET01XaW5kb3cgaXMgbm90IHBv
bHltb3JwaGljIik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRo
ZXIgaGF2ZSBhIHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBET01XaW5kb3cgaGFzIHN1
YmNsYXNzZXMuIElmIERPTVdpbmRvdyBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAg
ICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgRE9NV2luZG93IHlvdSB0byBvcHQg
b3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRkaW5nIHRoZSBTa2lwVlRhYmxl
VmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJREwgZGVmaW5pdGlvbgorICAg
IFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0gZXhwZWN0ZWRWVGFibGVQb2lu
dGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPERPTVdpbmRvdz4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRE9NV2luZG93JiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK0RPTVdpbmRvdyogSlNET01XaW5k
b3c6OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
IChhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU0RPTVdpbmRvdyo+KHZtLCB2YWx1ZSkp
CisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU0RPTVdpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NjhkYTc4YTZjMDMxZTIwMTMxZWQyNDNl
NTAwNzQzYWQzMjllNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNET01XaW5kb3cuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAg
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisg
ICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4g
RE8gTk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ci5oIgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBET01XaW5kb3c7CisKK2NsYXNzIEpTV2luZG93UHJveHk7CisKK2NsYXNzIEpTRE9N
V2luZG93IDogcHVibGljIEpTRXZlbnRUYXJnZXQgeworcHVibGljOgorICAgIHVzaW5nIEJhc2Ug
PSBKU0V2ZW50VGFyZ2V0OworICAgIHVzaW5nIERPTVdyYXBwZWQgPSBET01XaW5kb3c7CisgICAg
c3RhdGljIEpTRE9NV2luZG93KiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFJlZjxET01XaW5kb3c+JiYgaW1wbCwgSlNXaW5kb3dQcm94eSogcHJveHkpCisg
ICAgeworICAgICAgICBKU0RPTVdpbmRvdyogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9j
YXRlQ2VsbDxKU0RPTVdpbmRvdz4odm0uaGVhcCkpIEpTRE9NV2luZG93KHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUoaW1wbCksIHByb3h5KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSwg
cHJveHkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBET01XaW5k
b3cqIHRvV3JhcHBlZChKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworICAgIERFQ0xBUkVfSU5G
TzsKKworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpHbG9iYWxPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlNDOjpOb25BcnJheSk7CisgICAgfQorCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1Y3RvcihKU0M6OlZNJiwgY29uc3QgSlND
OjpKU0dsb2JhbE9iamVjdCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNl
QWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZN
JiB2bSkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAobW9kZSA9PSBKU0M6OlN1YnNwYWNl
QWNjZXNzOjpDb25jdXJyZW50bHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7CisgICAgfQorICAgIHN0YXRpYyBKU0M6Oklz
b1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpWTSYgdm0pOworICAgIHN0YXRpYyB2b2lk
IGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFuYWx5emVyJik7CisgICAgRE9NV2luZG93
JiB3cmFwcGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxET01X
aW5kb3cmPihCYXNlOjp3cmFwcGVkKCkpOworICAgIH0KK3B1YmxpYzoKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBK
U0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8
IEpTQzo6SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZTsKK3Byb3RlY3RlZDoKKyAgICBKU0RP
TVdpbmRvdyhKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUqLCBSZWY8RE9NV2luZG93PiYmLCBKU1dp
bmRvd1Byb3h5Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNXaW5kb3dQ
cm94eSopOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgRE9NV2luZG93Jik7CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgRE9NV2luZG93KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7
IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0RPTUdsb2JhbE9iamVjdCosIFJlZjxET01XaW5kb3c+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxET01XaW5kb3c+JiYg
aW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsg
fQorCitjbGFzcyBKU0RPTVdpbmRvd1Byb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxP
YmplY3Q7CisgICAgc3RhdGljIEpTRE9NV2luZG93UHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYg
dm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBKU0RPTVdpbmRvd1Byb3RvdHlwZSogcHRyID0gbmV3IChO
b3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0RPTVdpbmRvd1Byb3RvdHlwZT4odm0uaGVhcCkp
IEpTRE9NV2luZG93UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0K
KworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlND
OjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VG
b3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU0RPTVdpbmRvd1Byb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAm
dm0ucGxhaW5PYmplY3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBl
SW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgSlNET01XaW5kb3dQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6
SlNOb25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFD
RV9TSEFSQUJMRShKU0RPTVdpbmRvd1Byb3RvdHlwZSwgSlNET01XaW5kb3dQcm90b3R5cGU6OkJh
c2UpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9N
V2luZG93PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNET01XaW5kb3c7CisgICAgdXNp
bmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IERPTVdpbmRvdyo7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93Q29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMTJlOTI0OGUyZWVhZjQ4NTcxNTYxOWZiMmZkODIwM2Y0ZjA5MTFiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRE9NV2luZG93
Q29uc3RydWN0b3JzLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIGdl
bmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTRE9NV2luZG93Q29uc3Ry
dWN0b3JzLmggYW5kCisgICAgSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVk
IGZvciBET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhl
IGJ1aWxkIHNjcmlwdHMgZnJvbSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNET01XaW5kb3dDb25zdHJ1
Y3RvcnMuaCBhbmQKKyAgICBKU0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5jcHAgYXQgZXZlcnkgYnVp
bGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvd0Nv
bnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
RE9NV2luZG93Q29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzEyZTkyNDhlMmVlYWY0ODU3MTU2
MTlmYjJmZDgyMDNmNGYwOTExYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5oCkBAIC0wLDAg
KzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWls
ZCBzY3JpcHRzIHRoYXQgSlNET01XaW5kb3dDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU0RPTVdp
bmRvd0NvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIERPTVdpbmRvd0NvbnN0cnVjdG9y
cy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWlu
ZyB0byBnZW5lcmF0ZSBKU0RPTVdpbmRvd0NvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpTRE9NV2lu
ZG93Q29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJl
IHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZDNkMjdmZmVmYmEwMWNhNjQxOWYyMzA0MDBiYjFl
NDcxMDUyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTAsMCArMSwx
NTkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCIKKworI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5oIgorI2luY2x1ZGUgIkRl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpT
Q2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwu
aD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBB
dHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK3VzaW5nIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGU+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNEZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIEpTV29ya2VyR2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKHZtLCAmZ2xvYmFsT2JqZWN0
KTsKK30KKwordGVtcGxhdGU8PiB2b2lkIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+cHJv
dG90eXBlLCBnbG9iYWxPYmplY3QuZ2V0UHJvdG90eXBlRGlyZWN0KHZtKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5
IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiRGVkaWNhdGVk
V29ya2VyR2xvYmFsU2NvcGUiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8
IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0
ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3I6OnNfaW5mbyA9IHsgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHBy
b3RvdHlwZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlSW5kZXhbMl0gPSB7CisgICAgeyAt
MSwgLTEgfSwKKyAgICB7IDAsIC0xIH0sCit9OworCisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9
Cit7CisgICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cikgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU0RlZGljYXRlZFdvcmtlckds
b2JhbFNjb3BlUHJvdG90eXBlVGFibGUgPSB7IDEsIDEsIHRydWUsIEpTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGU6OmluZm8oKSwgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlw
ZVRhYmxlVmFsdWVzLCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVJ
bmRleCB9OworY29uc3QgQ2xhc3NJbmZvIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90
b3R5cGU6OnNfaW5mbyA9IHsgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIiwgJkJhc2U6OnNf
aW5mbywgJkpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZSwgbnVsbHB0
ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90
eXBlKSB9OworCit2b2lkIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgcmVpZnlTdGF0aWNQcm9wZXJ0aWVzKHZtLCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OjppbmZvKCksIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZhbHVl
cywgKnRoaXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwor
fQorCitjb25zdCBDbGFzc0luZm8gSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6c19pbmZv
ID0geyAiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGUpIH07CisKK0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OkpTRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPERlZGljYXRlZFdv
cmtlckdsb2JhbFNjb3BlPiYmIGltcGwpCisgICAgOiBKU1dvcmtlckdsb2JhbFNjb3BlKHZtLCBz
dHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNEZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1Byb3h5KiBwcm94eSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgcHJveHkpOworCisgICAgc3RhdGljX2Fzc2VydCgh
c3RkOjppc19iYXNlX29mPEFjdGl2ZURPTU9iamVjdCwgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2Nv
cGU+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2VkIGFzIFtBY3RpdmVET01PYmplY3Rd
IGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1YmNsYXNzZXMgQWN0aXZlRE9NT2Jq
ZWN0LiIpOworCit9CisKK0pTVmFsdWUgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6Z2V0
Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xv
YmFsT2JqZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzRGVkaWNhdGVkV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5
cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jvb2wgc2V0SlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwg
dGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93
aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSk7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGll
bnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7Cisg
ICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byog
c3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvckRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmdl
dCgpKQorICAgICAgICByZXR1cm4gc3BhY2U7CisgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJT
UEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmdldCgpLCBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKTsK
KyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGUuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUi
KQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisgICAgaWYg
KCZKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9
ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0
YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5H
U19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQg
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBI
ZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdy
YXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlm
ICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVy
LnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxs
LCBhbmFseXplcik7Cit9CisKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA3NmQwNzMwNjc4NGYyZDdlNDYyNGFjNTNkYjVhOWRiNzdh
MGYwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTAsMCArMSwxMDUgQEAK
Ky8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9q
ZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGlu
Z3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7CisKK2NsYXNz
IEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgOiBwdWJsaWMgSlNXb3JrZXJHbG9iYWxTY29w
ZSB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpTV29ya2VyR2xvYmFsU2NvcGU7CisgICAg
dXNpbmcgRE9NV3JhcHBlZCA9IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOworICAgIHN0YXRp
YyBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZT4mJiBp
bXBsLCBKU0M6OkpTUHJveHkqIHByb3h5KQorICAgIHsKKyAgICAgICAgSlNEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlPih2bS5oZWFwKSkgSlNEZWRpY2F0ZWRXb3JrZXJHbG9i
YWxTY29wZSh2bSwgc3RydWN0dXJlLCBXVEZNb3ZlKGltcGwpKTsKKyAgICAgICAgcHRyLT5maW5p
c2hDcmVhdGlvbih2bSwgcHJveHkpOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworCisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Okdsb2JhbE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6
Vk0mLCBjb25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUs
IEpTQzo6U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNw
YWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09
IEpTQzo6U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAg
c3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7Cisg
ICAgc3RhdGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsK
KyAgICBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUmPihC
YXNlOjp3cmFwcGVkKCkpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBKU0RlZGljYXRlZFdvcmtl
ckdsb2JhbFNjb3BlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJlZjxEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZT4mJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlND
OjpKU1Byb3h5Kik7Cit9OworCisKK2NsYXNzIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVQ
cm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKiBw
dHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTRGVkaWNhdGVkV29ya2VyR2xv
YmFsU2NvcGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
UHJvdG90eXBlKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xB
UkVfSU5GTzsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFj
Y2Vzcz4KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYg
dm0pCisgICAgeworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShK
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0
dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6
OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBl
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxPYmplY3Qodm0sIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJik7Cit9OworU1RB
VElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxT
Y29wZVByb3RvdHlwZSwgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6QmFz
ZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxEZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZT4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTRGVk
aWNhdGVkV29ya2VyR2xvYmFsU2NvcGU7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmNjZWVhZWJjYzRkZTdmMGZlNzM4MDE5Y2I0
NTI4YTQ0YmMyZTMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
Y3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3Qg
dG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5oIGFuZAorICAgIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZvciBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9t
IHRyeWluZyB0byBnZW5lcmF0ZSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0
b3JzLmggYW5kCisgICAgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5j
cHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxl
LgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyY2NlZWFlYmNjNGRlN2YwZmU3MzgwMTljYjQ1
MjhhNDRiYzJlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5o
CkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8g
dGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0
cnVjdG9ycy5oIGFuZAorICAgIEpTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnMuY3BwIGFyZSBjcmVhdGVkIGZvciBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRy
eWluZyB0byBnZW5lcmF0ZSBKU0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmggYW5kCisgICAgSlNEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAg
YXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgor
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFkMjhmNmQwNzcyYzA5OGI2MWE2MjBlZjFjMGVhZWEwNGZiNzc2N2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3cuY3BwCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICAgIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUg
aGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZ
IQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0V4cG9zZWRUb1dvcmtlckFu
ZFdpbmRvdy5oIgorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9N
SXNvU3Vic3BhY2VzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIkpTRE9NT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU1Rlc3RPYmouaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5s
aW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVh
cENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3Iu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdWJzcGFjZUlubGluZXMuaD4KKyNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL1BvaW50ZXJQcmVwYXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvVVJMLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgewordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKwordGVtcGxhdGU8PiBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3QgY29u
dmVydERpY3Rpb25hcnk8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpEaWN0PihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBib29sIGlzTnVsbE9yVW5kZWZpbmVkID0g
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKTsKKyAgICBhdXRvKiBvYmplY3QgPSBpc051bGxPclVu
ZGVmaW5lZCA/IG51bGxwdHIgOiB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoVU5MSUtFTFko
IWlzTnVsbE9yVW5kZWZpbmVkICYmICFvYmplY3QpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisgICAgRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjpEaWN0IHJlc3VsdDsKKyAgICBK
U1ZhbHVlIG9ialZhbHVlOworICAgIGlmIChpc051bGxPclVuZGVmaW5lZCkKKyAgICAgICAgb2Jq
VmFsdWUgPSBqc1VuZGVmaW5lZCgpOworICAgIGVsc2UgeworICAgICAgICBvYmpWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAib2JqIikpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7
CisgICAgfQorICAgIGlmICghb2JqVmFsdWUuaXNVbmRlZmluZWQoKSkgeworICAgICAgICByZXN1
bHQub2JqID0gY29udmVydDxJRExJbnRlcmZhY2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmpl
Y3QsIG9ialZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7
IH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU0M6OkpTT2JqZWN0KiBjb252
ZXJ0RGljdGlvbmFyeVRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93OjpEaWN0JiBkaWN0aW9uYXJ5KQoreworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCkpOworCisgICAgaWYgKCFJRExJbnRlcmZhY2U8VGVzdE9iaj46OmlzTnVsbFZhbHVlKGRp
Y3Rpb25hcnkub2JqKSkgeworICAgICAgICBhdXRvIG9ialZhbHVlID0gdG9KUzxJRExJbnRlcmZh
Y2U8VGVzdE9iaj4+KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgSURMSW50ZXJm
YWNlPFRlc3RPYmo+OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUoZGljdGlvbmFyeS5vYmopKTsK
KyAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIm9iaiIpLCBvYmpWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
Ky8vIEZ1bmN0aW9ucworCitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGVGdW5jdGlvbkRvU29tZXRoaW5nKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkNhbGxGcmFtZSopOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUganNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
KworY2xhc3MgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUgZmluYWwgOiBwdWJs
aWMgSlNDOjpKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlND
OjpKU05vbkZpbmFsT2JqZWN0OworICAgIHN0YXRpYyBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
d1Byb3RvdHlwZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjph
bGxvY2F0ZUNlbGw8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGU+KHZtLmhlYXAp
KSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0LCBz
dHJ1Y3R1cmUpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIHB0cjsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2VsbFR5cGUsIEpTQzo6U3Vic3BhY2VBY2Nlc3M+CisgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgU1RBVElDX0FT
U0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUoSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90
b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7CisgICAg
fQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUsIEpTRXhwb3NlZFRvV29ya2VyQW5k
V2luZG93UHJvdG90eXBlOjpCYXNlKTsKKwordXNpbmcgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3dDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3I8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3c+OworCit0ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBWTSYgdm0g
PSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7
CisgICAgQVNTRVJUKGNhc3RlZFRoaXMpOworICAgIGF1dG8gb2JqZWN0ID0gRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93OjpjcmVhdGUoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGRlY2x0eXBlKG9iamVj
dCk6OmlzUmVmKTsKKyAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlDcmVhdGVkPElETEludGVy
ZmFjZTxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNh
c3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOworICAgIHNldFN1YmNs
YXNzU3RydWN0dXJlSWZOZWVkZWQ8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93PihsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjYWxsRnJhbWUsIGFzT2JqZWN0KGpzVmFsdWUpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1ZhbHVlKTsKK30KKwordGVtcGxhdGU8PiBKU1ZhbHVlIEpTRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93Q29uc3RydWN0b3I6OnByb3RvdHlwZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3Qg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0odm0p
OworICAgIHJldHVybiBnbG9iYWxPYmplY3QuZnVuY3Rpb25Qcm90b3R5cGUoKTsKK30KKwordGVt
cGxhdGU8PiB2b2lkIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3I6OmluaXRp
YWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
K3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSwgSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnByb3RvdHlwZSh2bSwgZ2xvYmFsT2JqZWN0KSwgSlNDOjpQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwganNOb250cml2aWFsU3RyaW5nKHZtLCAiRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93Il9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9u
bHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0
cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30K
KwordGVtcGxhdGU8PiBjb25zdCBDbGFzc0luZm8gSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dD
b25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRXhwb3NlZFRvV29ya2VyQW5kV2luZG93IiwgJkJhc2U6
OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90
b3R5cGUgKi8KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93UHJvdG90eXBlVGFibGVWYWx1ZXNbXSA9Cit7CisgICAgeyAiY29uc3RydWN0b3Ii
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKSB9IH0sCisgICAgeyAiZG9Tb21ldGhpbmci
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RnVuY3Rpb24p
LCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZlRnVuY3Rpb24+
KGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlRnVuY3Rpb25Eb1NvbWV0aGluZyks
IChpbnRwdHJfdCkgKDApIH0gfSwKK307CisKK2NvbnN0IENsYXNzSW5mbyBKU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvd1Byb3RvdHlwZTo6c19pbmZvID0geyAiRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZSkgfTsKKwordm9pZCBKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorewor
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRpZXMo
dm0sIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93OjppbmZvKCksIEpTRXhwb3NlZFRvV29ya2Vy
QW5kV2luZG93UHJvdG90eXBlVGFibGVWYWx1ZXMsICp0aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5H
X1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93OjpzX2luZm8gPSB7ICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ci
LCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93KSB9OworCitKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRv
dzo6SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3coU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+
JiYgaW1wbCkKKyAgICA6IEpTRE9NV3JhcHBlcjxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+KHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKQoreworfQorCit2b2lkIEpTRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7
CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+Ojp2YWx1ZSwgIkludGVyZmFjZSBpcyBub3QgbWFya2Vk
IGFzIFtBY3RpdmVET01PYmplY3RdIGV2ZW4gdGhvdWdoIGltcGxlbWVudGF0aW9uIGNsYXNzIHN1
YmNsYXNzZXMgQWN0aXZlRE9NT2JqZWN0LiIpOworCit9CisKK0pTT2JqZWN0KiBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6Y3JlYXRlUHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3dQcm90b3R5cGU6OmNyZWF0ZSh2bSwgJmdsb2JhbE9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3dQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgZ2xv
YmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpKSk7Cit9CisKK0pTT2JqZWN0KiBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6cHJvdG90eXBlKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NUHJvdG90eXBlPEpTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93Pih2bSwgZ2xvYmFsT2JqZWN0KTsKK30KKworSlNWYWx1ZSBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdzo6Z2V0Q29uc3RydWN0b3IoVk0mIHZtLCBjb25zdCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yPih2bSwgKmpzQ2FzdDxjb25zdCBKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQorCit2b2lkIEpTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQoreworICAgIEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3cqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdzo6fkpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KCk7Cit9CisKK3RlbXBsYXRl
PD4gaW5saW5lIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KiBJRExPcGVyYXRpb248SlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3c+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4ganNEeW5hbWljQ2Fz
dDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpLCBjYWxsRnJhbWUudGhpc1ZhbHVlKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvd0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlw
ZSA9IGpzRHluYW1pY0Nhc3Q8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dQcm90b3R5cGUqPih2
bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0V4cG9zZWRUb1dv
cmtlckFuZFdpbmRvdzo6Z2V0Q29uc3RydWN0b3IoSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2Jq
ZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOworfQorCitib29sIHNldEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1By
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1cm4gcHJvdG90eXBl
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9yLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRG9Tb21ldGhp
bmdCb2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHR5cGVuYW1lIElETE9wZXJhdGlvbjxKU0V4cG9zZWRUb1dvcmtl
ckFuZFdpbmRvdz46OkNsYXNzUGFyYW1ldGVyIGNhc3RlZFRoaXMpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
KyAgICBVTlVTRURfUEFSQU0oY2FsbEZyYW1lKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBKU1ZhbHVl
OjplbmNvZGUodG9KUzxJRExEaWN0aW9uYXJ5PEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6RGlj
dD4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwuZG9Tb21ldGhpbmcoKSkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd1Byb3RvdHlwZUZ1bmN0aW9uRG9Tb21ldGhpbmcoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQor
eworICAgIHJldHVybiBJRExPcGVyYXRpb248SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+Ojpj
YWxsPGpzRXhwb3NlZFRvV29ya2VyQW5kV2luZG93UHJvdG90eXBlRnVuY3Rpb25Eb1NvbWV0aGlu
Z0JvZHk+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FsbEZyYW1lLCAiZG9Tb21ldGhpbmciKTsK
K30KKworSlNDOjpJc29TdWJzcGFjZSogSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnN1YnNw
YWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRhID0gKnN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0byYgc3BhY2Vz
ID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2UgPSBzcGFjZXMu
bV9zdWJzcGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIHNwYWNlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mX3Y8SlNDOjpKU0Rl
c3RydWN0aWJsZU9iamVjdCwgSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHx8ICFKU0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdzo6bmVlZHNEZXN0cnVjdGlvbik7CisgICAgaWYgY29uc3RleHBy
IChzdGQ6OmlzX2Jhc2Vfb2ZfdjxKU0M6OkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LCBKU0V4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdz4pCisgICAgICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93ID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lO
SVQodm0uaGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU0V4
cG9zZWRUb1dvcmtlckFuZFdpbmRvdyk7CisgICAgZWxzZQorICAgICAgICBzcGFjZXMubV9zdWJz
cGFjZUZvckV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+
IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIHZtLmNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCksIEpT
RXhwb3NlZFRvV29ya2VyQW5kV2luZG93KTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yRXhwb3NlZFRvV29ya2VyQW5kV2luZG93LmdldCgpOworSUdOT1JFX1dBUk5JTkdT
X0JFR0lOKCJ1bnJlYWNoYWJsZS1jb2RlIikKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidGF1dG9s
b2dpY2FsLWNvbXBhcmUiKQorICAgIGlmICgmSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnZp
c2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxsOjp2aXNpdE91dHB1dENvbnN0cmFp
bnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0cmFpbnRTcGFjZXMoKS5hcHBlbmQo
c3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JFX1dBUk5JTkdTX0VORAorICAgIHJl
dHVybiBzcGFjZTsKK30KKwordm9pZCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6YW5hbHl6
ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQoreworICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqPihjZWxsKTsK
KyAgICBhbmFseXplci5zZXRXcmFwcGVkT2JqZWN0Rm9yQ2VsbChjZWxsLCAmdGhpc09iamVjdC0+
d3JhcHBlZCgpKTsKKyAgICBpZiAodGhpc09iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICAgICBhbmFseXplci5zZXRMYWJlbEZvckNlbGwoY2VsbCwgInVybCAiICsgdGhpc09i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgQmFz
ZTo6YW5hbHl6ZUhlYXAoY2VsbCwgYW5hbHl6ZXIpOworfQorCitib29sIEpTRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFuZGxl
PEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiwgU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0
IGNoYXIqKiByZWFzb24pCit7CisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZSk7CisgICAgVU5VU0VE
X1BBUkFNKHZpc2l0b3IpOworICAgIFVOVVNFRF9QQVJBTShyZWFzb24pOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvd093bmVyOjpmaW5hbGl6
ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKK3sKKyAg
ICBhdXRvKiBqc0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyA9IHN0YXRpY19jYXN0PEpTRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Kj4oaGFuZGxlLnNsb3QoKS0+YXNDZWxsKCkpOworICAgIGF1dG8m
IHdvcmxkID0gKnN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOworICAgIHVu
Y2FjaGVXcmFwcGVyKHdvcmxkLCAmanNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ctPndyYXBwZWQo
KSwganNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cpOworfQorCitKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgUmVmPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4mJiBpbXBsKQoreworICAgIC8v
IElmIHlvdSBoaXQgdGhpcyBmYWlsdXJlIHRoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbiBoYXMgdGhl
IEltcGxlbWVudGF0aW9uTGFja3NWVGFibGUKKyAgICAvLyBhdHRyaWJ1dGUuIFlvdSBzaG91bGQg
cmVtb3ZlIHRoYXQgYXR0cmlidXRlLiBJZiB0aGUgY2xhc3MgaGFzIHN1YmNsYXNzZXMKKyAgICAv
LyB0aGF0IG1heSBiZSBwYXNzZWQgdGhyb3VnaCB0aGlzIHRvSlMoKSBmdW5jdGlvbiB5b3Ugc2hv
dWxkIHVzZSB0aGUgU2tpcFZUYWJsZVZhbGlkYXRpb24KKyAgICAvLyBhdHRyaWJ1dGUgdG8gRXhw
b3NlZFRvV29ya2VyQW5kV2luZG93LgorICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfcG9seW1v
cnBoaWM8RXhwb3NlZFRvV29ya2VyQW5kV2luZG93Pjo6dmFsdWUsICJFeHBvc2VkVG9Xb3JrZXJB
bmRXaW5kb3cgaXMgcG9seW1vcnBoaWMgYnV0IHRoZSBJREwgY2xhaW1zIGl0IGlzIG5vdCIpOwor
ICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4oZ2xvYmFs
T2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRXhwb3NlZFRvV29ya2VyQW5kV2luZG93JiBpbXBsKQoreworICAgIHJldHVybiB3
cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK0V4cG9z
ZWRUb1dvcmtlckFuZFdpbmRvdyogSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OnRvV3JhcHBl
ZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChhdXRvKiB3cmFw
cGVyID0ganNEeW5hbWljQ2FzdDxKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyo+KHZtLCB2YWx1
ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBudWxs
cHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE2NjI2M2MyMWFkYjg1NWEwMjEwMThkYjAxMzNmYmM1NTY5NDFiZDkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3cuaApAQCAtMCwwICsxLDk4IEBACisvKgorICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZp
bGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9E
SUZZIQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRXhwb3NlZFRvV29ya2VyQW5kV2lu
ZG93LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93IDogcHVibGlj
IEpTRE9NV3JhcHBlcjxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHsKK3B1YmxpYzoKKyAgICB1
c2luZyBCYXNlID0gSlNET01XcmFwcGVyPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz47CisgICAg
c3RhdGljIEpTRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KiBjcmVhdGUoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPEV4cG9zZWRU
b1dvcmtlckFuZFdpbmRvdz4mJiBpbXBsKQorICAgIHsKKyAgICAgICAgSlNFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3cqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNFeHBv
c2VkVG9Xb3JrZXJBbmRXaW5kb3c+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFwKSkgSlNFeHBvc2Vk
VG9Xb3JrZXJBbmRXaW5kb3coc3RydWN0dXJlLCAqZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwp
KTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbihnbG9iYWxPYmplY3QtPnZtKCkpOworICAg
ICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBjcmVh
dGVQcm90b3R5cGUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIEpT
Qzo6SlNPYmplY3QqIHByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAg
ICBzdGF0aWMgRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KiB0b1dyYXBwZWQoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0M6OkpTQ2VsbCopOworCisg
ICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBj
b25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKK3Byb3Rl
Y3RlZDoKKyAgICBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyhKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0JiwgUmVmPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4mJik7CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CisKK2NsYXNzIEpTRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93T3duZXIgOiBwdWJsaWMgSlNDOjpXZWFrSGFuZGxlT3duZXIgeworcHVi
bGljOgorICAgIHZpcnR1YWwgYm9vbCBpc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhKU0M6Okhh
bmRsZTxKU0M6OlVua25vd24+LCB2b2lkKiBjb250ZXh0LCBKU0M6OlNsb3RWaXNpdG9yJiwgY29u
c3QgY2hhcioqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpV
bmtub3duPiwgdm9pZCogY29udGV4dCk7Cit9OworCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3cqKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0V4cG9zZWRUb1dvcmtlckFuZFdp
bmRvd093bmVyPiBvd25lcjsKKyAgICByZXR1cm4gJm93bmVyLmdldCgpOworfQorCitpbmxpbmUg
dm9pZCogd3JhcHBlcktleShFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIHdyYXBwYWJsZU9iamVj
dCkKK3sKKyAgICByZXR1cm4gd3JhcHBhYmxlT2JqZWN0OworfQorCitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBFeHBvc2VkVG9Xb3Jr
ZXJBbmRXaW5kb3cmKTsKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cqIGltcGwpIHsgcmV0dXJuIGltcGwgPyB0b0pTKGxl
eGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKmltcGwpIDogSlNDOjpqc051bGwoKTsg
fQorSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4mJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRy
PEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05l
d2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFz
ZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzsKKyAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gRXhwb3NlZFRvV29ya2VyQW5kV2luZG93KjsKK307Cit0
ZW1wbGF0ZTw+IEV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6RGljdCBjb252ZXJ0RGljdGlvbmFy
eTxFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3c6OkRpY3Q+KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBK
U0M6OkpTVmFsdWUpOworCitKU0M6OkpTT2JqZWN0KiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoSlND
OjpKU0dsb2JhbE9iamVjdCYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93OjpEaWN0Jik7CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNWFkYmMyNzQ1
ZGEzOWZlOTNmYzhmZGYwMDg4Zjk1MjlhNjVjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5l
cmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaCIKKwor
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRPTUlzb1N1YnNwYWNlcy5o
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5jbHVkZSAiUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBB
bmFseXplci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCisvLyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNQYWludFdvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK3VzaW5nIEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGVDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGU+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IEpTV29ya2xldEdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7
Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlw
ZSwgZ2xvYmFsT2JqZWN0LmdldFByb3RvdHlwZURpcmVjdCh2bSksIEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzTm9udHJpdmlhbFN0cmluZyh2bSwgIlBhaW50V29ya2xldEds
b2JhbFNjb3BlIl9zKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlBy
b3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgsIGpzTnVtYmVyKDApLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKK30KKwordGVtcGxhdGU8
PiBjb25zdCBDbGFzc0luZm8gSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJQYWludFdvcmtsZXRHbG9iYWxTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yKSB9OworCisvKiBIYXNoIHRhYmxlIGZvciBwcm90b3R5cGUgKi8KKworc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTUGFpbnRXb3JrbGV0R2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZUluZGV4WzJdID0geworICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCAt
MSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNQYWludFdvcmtsZXRH
bG9iYWxTY29wZVByb3RvdHlwZVRhYmxlVmFsdWVzW10gPQoreworICAgIHsgImNvbnN0cnVjdG9y
Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IpLCAoaW50cHRy
X3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBI
YXNoVGFibGUgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlID0geyAxLCAx
LCB0cnVlLCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjppbmZvKCksIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZhbHVlcywgSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZVByb3RvdHlwZVRhYmxlSW5kZXggfTsKK2NvbnN0IENsYXNzSW5mbyBKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlUHJvdG90eXBlOjpzX2luZm8gPSB7ICJQYWludFdvcmtsZXRHbG9iYWxTY29wZSIs
ICZCYXNlOjpzX2luZm8sICZKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGUs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVBy
b3RvdHlwZSkgfTsKKwordm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
ICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTo6
aW5mbygpLCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXMsICp0
aGlzKTsKKyAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKK30KKwor
Y29uc3QgQ2xhc3NJbmZvIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU6OnNfaW5mbyA9IHsgIlBh
aW50V29ya2xldEdsb2JhbFNjb3BlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlKSB9OworCitKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlOjpKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJlZjxQYWludFdvcmtsZXRHbG9iYWxTY29wZT4mJiBpbXBs
KQorICAgIDogSlNXb3JrbGV0R2xvYmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBs
KSkKK3sKK30KKwordm9pZCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIEpTUHJveHkqIHByb3h5KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
LCBwcm94eSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9N
T2JqZWN0LCBQYWludFdvcmtsZXRHbG9iYWxTY29wZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5v
dCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24g
Y2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNWYWx1ZSBKU1Bh
aW50V29ya2xldEdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9y
PEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3Qg
SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
anNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8qIHByb3Rv
dHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSo+
KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90
b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9i
amVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKK30KKworYm9vbCBzZXRKU1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7
CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJv
dG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5cGUt
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNQYWludFdvcmts
ZXRHbG9iYWxTY29wZTo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKQoreworICAgIGF1dG8m
IGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS5jbGllbnREYXRh
KTsKKyAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1YnNwYWNlcygpOworICAgIGlmIChh
dXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUu
Z2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAgICBzcGFjZXMubV9zdWJzcGFjZUZvclBh
aW50V29ya2xldEdsb2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQ
QUNFX0lOSVQodm0uaGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGUuZ2V0KCksIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUpOworICAgIGF1
dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JQYWludFdvcmtsZXRHbG9iYWxTY29wZS5n
ZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJTigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVf
V0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNhbC1jb21wYXJlIikKKyAgICBpZiAoJkpTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGU6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMgIT0gJkpTQzo6SlNDZWxs
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzKQorICAgICAgICBjbGllbnREYXRhLm91dHB1dENvbnN0
cmFpbnRTcGFjZXMoKS5hcHBlbmQoc3BhY2UpOworSUdOT1JFX1dBUk5JTkdTX0VORAorSUdOT1JF
X1dBUk5JTkdTX0VORAorICAgIHJldHVybiBzcGFjZTsKK30KKwordm9pZCBKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlOjphbmFseXplSGVhcChKU0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5h
bHl6ZXIpCit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBlZE9iamVjdEZvckNlbGwo
Y2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRoaXNPYmplY3QtPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0TGFiZWxGb3JDZWxsKGNl
bGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dXJsKCku
c3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFuYWx5emVyKTsKK30KKwor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWU4
YzY5NDljM2U0NTA5NTI5NGNjYzM1ODA4ZDc1M2M1Mjg4NGU2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGUuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVu
IGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTV29y
a2xldEdsb2JhbFNjb3BlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGU7CisKK2NsYXNzIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgOiBw
dWJsaWMgSlNXb3JrbGV0R2xvYmFsU2NvcGUgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBK
U1dvcmtsZXRHbG9iYWxTY29wZTsKKyAgICB1c2luZyBET01XcmFwcGVkID0gUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGU7CisgICAgc3RhdGljIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUqIGNyZWF0
ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFBhaW50V29ya2xl
dEdsb2JhbFNjb3BlPiYmIGltcGwsIEpTQzo6SlNQcm94eSogcHJveHkpCisgICAgeworICAgICAg
ICBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxs
b2NhdGVDZWxsPEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGU+KHZtLmhlYXApKSBKU1BhaW50V29y
a2xldEdsb2JhbFNjb3BlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBw
dHItPmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAg
fQorCisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6R2xvYmFsT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6
Tm9uQXJyYXkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0
b3IoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSwgSlNDOjpTdWJzcGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIg
KG1vZGUgPT0gSlNDOjpTdWJzcGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAg
IH0KKyAgICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0m
IHZtKTsKKyAgICBzdGF0aWMgdm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFs
eXplciYpOworICAgIFBhaW50V29ya2xldEdsb2JhbFNjb3BlJiB3cmFwcGVkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWludFdvcmtsZXRHbG9iYWxTY29wZSY+
KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEpTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGUoSlNDOjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPFBhaW50V29ya2xldEds
b2JhbFNjb3BlPiYmKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTQzo6Vk0mLCBKU0M6OkpT
UHJveHkqKTsKK307CisKKworY2xhc3MgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlw
ZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVz
aW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxPYmplY3Q7CisgICAgc3RhdGljIEpTUGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90
TnVsbCwgSlNDOjphbGxvY2F0ZUNlbGw8SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlw
ZT4odm0uaGVhcCkpIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Cisg
ICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBK
U0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAg
IFNUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTUGFpbnRXb3JrbGV0R2xvYmFs
U2NvcGVQcm90b3R5cGUsIEJhc2UpOworICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3Bh
Y2U7CisgICAgfQorICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpT
UGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlLCBKU1BhaW50V29ya2xl
dEdsb2JhbFNjb3BlUHJvdG90eXBlOjpCYXNlKTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFBhaW50V29ya2xldEdsb2JhbFNjb3BlPiB7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZTsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUqOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzYzdkYzA5ZDQ2MmJmZjA3
YTlhM2ExYTFjMmQ1ZjE1NjhlNzJhODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0
cnVjdG9ycy5jcHAKQEAgLTAsMCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0
ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhhdCBKU1BhaW50V29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0
cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20g
dHJ5aW5nIHRvIGdlbmVyYXRlIEpTUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMu
aCBhbmQKKyAgICBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhdCBl
dmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNjNjN2RjMDlkNDYyYmZmMDdhOWEzYTFhMWMyZDVmMTU2OGU3MmE4Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw2IEBA
CisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlw
dHMgdGhhdCBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAg
SlNQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9y
IFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5kIHRodXMKKyAgICBw
cmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVyYXRlIEpTUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qg
bm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJH
bG9iYWxTY29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ0YzZhM2RjYzk0YjAwNjkxMGMzOTA3Y2I1Y2Uz
ZDBiZGFmMjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jcHAKQEAgLTAsMCArMSwx
NTkgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgiCisKKyNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZS5o
IgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaCIKKyNpbmNsdWRlICJXZWJDb3JlSlNDbGll
bnREYXRhLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGVhcEFuYWx5emVyLmg+CisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1VSTC5oPgor
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKy8vIEF0dHJp
YnV0ZXMKKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworCit1c2luZyBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yID0gSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU8SlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGU+OworCit0ZW1wbGF0ZTw+IEpTVmFsdWUgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBlRm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1dvcmtlckds
b2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3Rvcih2bSwgJmdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBs
YXRlPD4gdm9pZCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjppbml0aWFs
aXplUHJvcGVydGllcyhWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUsIGdsb2JhbE9i
amVjdC5nZXRQcm90b3R5cGVEaXJlY3Qodm0pLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250
RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5
QXR0cmlidXRlOjpEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBqc05vbnRyaXZpYWxTdHJpbmcodm0sICJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUi
X3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxl
bmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENs
YXNzSW5mbyBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7
ICJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLworCitzdGF0aWMgY29u
c3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90
b3R5cGVUYWJsZUluZGV4WzJdID0geworICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCAtMSB9LAor
fTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkg
c3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTU2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNo
VGFibGUgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwg
dHJ1ZSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OmluZm8oKSwgSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZhbHVlcywgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZUluZGV4IH07Citjb25zdCBDbGFzc0luZm8gSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZSIsICZCYXNlOjpzX2luZm8sICZKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRh
YmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlUHJvdG90eXBlKSB9OworCit2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgIHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGU6OmluZm8oKSwgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZh
bHVlcywgKnRoaXMpOworICAgIEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigp
OworfQorCitjb25zdCBDbGFzc0luZm8gSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6OnNfaW5m
byA9IHsgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUp
IH07CisKK0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpKU1NlcnZpY2VXb3JrZXJHbG9iYWxT
Y29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8U2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlPiYmIGltcGwpCisgICAgOiBKU1dvcmtlckdsb2JhbFNjb3BlKHZtLCBzdHJ1Y3R1cmUs
IFdURk1vdmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNQcm94eSogcHJveHkpCit7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFz
ZV9vZjxBY3RpdmVET01PYmplY3QsIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT46OnZhbHVlLCAi
SW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2gg
aW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30K
KworSlNWYWx1ZSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IoVk0m
IHZtLCBjb25zdCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yPih2
bSwgKmpzQ2FzdDxjb25zdCBKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpOworfQor
CitFbmNvZGVkSlNWYWx1ZSBqc1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFs
dWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNTZXJ2aWNlV29ya2VyR2xv
YmFsU2NvcGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAg
IGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KSwgcHJvdG90eXBlLT5nbG9iYWxPYmplY3QoKSkpOwor
fQorCitib29sIHNldEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0o
bGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1NlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1Zh
bHVlKSk7CisgICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1U
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IK
KyAgICByZXR1cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNv
bnN0cnVjdG9yLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK0pTQzo6SXNv
U3Vic3BhY2UqIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpzdWJzcGFjZUZvckltcGwoSlND
OjpWTSYgdm0pCit7CisgICAgYXV0byYgY2xpZW50RGF0YSA9ICpzdGF0aWNfY2FzdDxKU1ZNQ2xp
ZW50RGF0YSo+KHZtLmNsaWVudERhdGEpOworICAgIGF1dG8mIHNwYWNlcyA9IGNsaWVudERhdGEu
c3Vic3BhY2VzKCk7CisgICAgaWYgKGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VGb3JT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCkpCisgICAgICAgIHJldHVybiBzcGFjZTsKKyAg
ICBzcGFjZXMubV9zdWJzcGFjZUZvclNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA9IG1ha2VVbmlx
dWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVudERhdGEubV9o
ZWFwQ2VsbFR5cGVGb3JKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5nZXQoKSwgSlNTZXJ2aWNl
V29ya2VyR2xvYmFsU2NvcGUpOworICAgIGF1dG8qIHNwYWNlID0gc3BhY2VzLm1fc3Vic3BhY2VG
b3JTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4o
InVucmVhY2hhYmxlLWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwt
Y29tcGFyZSIpCisgICAgaWYgKCZKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTo6dmlzaXRPdXRw
dXRDb25zdHJhaW50cyAhPSAmSlNDOjpKU0NlbGw6OnZpc2l0T3V0cHV0Q29uc3RyYWludHMpCisg
ICAgICAgIGNsaWVudERhdGEub3V0cHV0Q29uc3RyYWludFNwYWNlcygpLmFwcGVuZChzcGFjZSk7
CitJR05PUkVfV0FSTklOR1NfRU5ECitJR05PUkVfV0FSTklOR1NfRU5ECisgICAgcmV0dXJuIHNw
YWNlOworfQorCit2b2lkIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjphbmFseXplSGVhcChK
U0NlbGwqIGNlbGwsIEhlYXBBbmFseXplciYgYW5hbHl6ZXIpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSo+KGNlbGwpOworICAgIGFu
YWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlzT2JqZWN0LT53cmFwcGVk
KCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
ICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIgKyB0aGlzT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsKKyAgICBCYXNlOjphbmFs
eXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29y
a2VyR2xvYmFsU2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzUyOGMxNTYxMDM0OGUwOTJlYzY4MTkyZmZl
YjkxYjk4NjU1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgKQEAgLTAsMCArMSwx
MDUgQEAKKy8qCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJj
ZSBwcm9qZWN0LgorICAgIFRoaXMgZmlsZSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUt
YmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkhCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOworCitj
bGFzcyBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA6IHB1YmxpYyBKU1dvcmtlckdsb2JhbFNj
b3BlIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNXb3JrZXJHbG9iYWxTY29wZTsKKyAg
ICB1c2luZyBET01XcmFwcGVkID0gU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOworICAgIHN0YXRp
YyBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSogY3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8U2VydmljZVdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGws
IEpTQzo6SlNQcm94eSogcHJveHkpCisgICAgeworICAgICAgICBKU1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZT4odm0uaGVhcCkpIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKHZt
LCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpOworICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9u
KHZtLCBwcm94eSk7CisgICAgICAgIHJldHVybiBwdHI7CisgICAgfQorCisKKyAgICBERUNMQVJF
X0lORk87CisKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6R2xvYmFsT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCksIEpTQzo6Tm9uQXJyYXkpOworICAgIH0K
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgZ2V0Q29uc3RydWN0b3IoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgSlNDOjpTdWJz
cGFjZUFjY2VzcyBtb2RlPiBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlND
OjpWTSYgdm0pCisgICAgeworICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0gSlNDOjpTdWJz
cGFjZUFjY2Vzczo6Q29uY3VycmVudGx5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBzdWJzcGFjZUZvckltcGwodm0pOworICAgIH0KKyAgICBzdGF0aWMgSlND
OjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3JJbXBsKEpTQzo6Vk0mIHZtKTsKKyAgICBzdGF0aWMg
dm9pZCBhbmFseXplSGVhcChKU0NlbGwqLCBKU0M6OkhlYXBBbmFseXplciYpOworICAgIFNlcnZp
Y2VXb3JrZXJHbG9iYWxTY29wZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2VydmljZVdvcmtlckdsb2JhbFNjb3BlJj4oQmFzZTo6d3JhcHBlZCgp
KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUoSlND
OjpWTSYsIEpTQzo6U3RydWN0dXJlKiwgUmVmPFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4mJik7
CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0M6OlZNJiwgSlNDOjpKU1Byb3h5Kik7Cit9Owor
CisKK2NsYXNzIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlIGZpbmFsIDogcHVi
bGljIEpTQzo6SlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgdXNpbmcgQmFzZSA9IEpT
Qzo6SlNOb25GaW5hbE9iamVjdDsKKyAgICBzdGF0aWMgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEpTU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlPih2bS5oZWFw
KSkgSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJl
dHVybiBwdHI7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgorICAgIHN0YXRpYyBKU0M6Oklzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKKyAgICB7CisgICAgICAgIFNUQVRJQ19B
U1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJv
dG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNlOworICAg
IH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1NlcnZpY2VX
b3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogSlNDOjpKU05vbkZpbmFs
T2JqZWN0KHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oSlNDOjpWTSYpOworfTsKK1NUQVRJQ19BU1NFUlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxF
KEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlLCBKU1NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZVByb3RvdHlwZTo6QmFzZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU+IHsKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKKyAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gU2VydmljZVdvcmtlckdsb2JhbFNjb3BlKjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2Vy
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNjA4ZTUzY2M2ZmI2YzEw
MWE4YTg1NzM1MmE0MDdiOGZlYzIzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJh
dGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNTZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBm
cm9tIHRyeWluZyB0byBnZW5lcmF0ZSBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9ycy5oIGFuZAorICAgIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNw
cCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUu
CisqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzYwOGU1M2NjNmZiNmMxMDFhOGE4NTczNTJhNDA3Yjhm
ZWMyMzFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKQEAgLTAs
MCArMSw2IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1
aWxkIHNjcmlwdHMgdGhhdCBKU1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5o
IGFuZAorICAgIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhcmUg
Y3JlYXRlZCBmb3IgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCwgYW5k
IHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5aW5nIHRvIGdlbmVy
YXRlIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNT
ZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBU
aGlzIGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KKyovCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9i
YWxPYmplY3QuY3BwCmluZGV4IDZjMGU1NDYwMWE0NjU5NjFjZGMwNjgyOTE0ZTc2ZmViY2RjMTUy
ZGEuLjg5NDBiZTNiMmU1YjczMTAwMDAzYWM1ZmI4ZjVhY2U5YWViNjA2YmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCkBAIC0zMyw3ICszMywxMSBAQAogI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkpTRE9NT3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93
LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU0RlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlLmgiCisjaW5jbHVkZSAiSlNQYWludFdvcmtsZXRHbG9iYWxTY29w
ZS5oIgorI2luY2x1ZGUgIkpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAi
SlNUZXN0Q0VSZWFjdGlvbnMuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lm
aWVyLmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbFRyYWNlci5oIgpAQCAtNzQsNyArNzgsNiBAQAog
I2luY2x1ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aE92ZXJyaWRlQnVpbHRpbnMuaCIKICNpbmNs
dWRlICJKU1Rlc3ROYW1lZFNldHRlcldpdGhVbmZvcmdhYmxlUHJvcGVydGllcy5oIgogI2luY2x1
ZGUgIkpTVGVzdE5hbWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVC
dWlsdGlucy5oIgotI2luY2x1ZGUgIkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCIKICNp
bmNsdWRlICJKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmgiCiAjaW5j
bHVkZSAiSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgogI2luY2x1ZGUgIkpTVGVzdFBsdWdpbklu
dGVyZmFjZS5oIgpAQCAtOTQsNiArOTcsOCBAQAogI2luY2x1ZGUgIkpTVGVzdFN0cmluZ2lmaWVy
UmVhZE9ubHlBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJKU1Rlc3RTdHJpbmdpZmllclJlYWRXcml0
ZUF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkpTVGVzdFR5cGVkZWZzLmgiCisjaW5jbHVkZSAiSlNX
b3JrZXJHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgIkpTV29ya2xldEdsb2JhbFNjb3BlLmgiCiAj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJDb3JlSlNDbGllbnREYXRhLmgiCkBAIC0xNjQs
NiArMTY5LDE0IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UHVibGljQW5kUHJpdmF0ZUNv
bmRpdGlvbmFsQXR0cmlidXRlKEpTQzo6SlNHbG9iYWxPYmplCiBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRBdFJ1bnRpbWVBdHRyaWJ1dGUoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKIGJvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0RW5hYmxlZEF0UnVudGltZUF0dHJpYnV0ZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CiAj
ZW5kaWYKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RE9NV2luZG93Q29u
c3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0RE9NV2luZG93Q29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3REZWRp
Y2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEds
b2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQYWludFdvcmtsZXRHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVl
LCBKU0M6OlByb3BlcnR5TmFtZSk7Citib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFBhaW50V29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dFRlc3RDRVJlYWN0aW9uc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5h
bWUpOwpAQCAtMjU2LDggKzI2OSw2IEBAIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE5h
bWVkU2V0dGVyV2l0aFVuZm9yZ2FibGVQcm9wZXJ0aWVzQW5kT3ZlcnJpZGVCdWlsCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25Db25kaXRpb25hbENv
bnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPcGVyYXRpb25D
b25kaXRpb25hbENvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKICNlbmRpZgotSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5
TmFtZSk7Ci1ib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFt
ZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
V2l0aFNlcXVlbmNlQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rl
c3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CkBAIC0z
MDAsMTggKzMxMSwyMiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRl
c3RTdHJpbmdpZmllclJlYWRXcml0ZUF0dHJpYnV0ZUNvbnN0cnVjdAogYm9vbCBzZXRKU1Rlc3RH
bG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcihK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CiBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVm
c0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3Io
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKK2Jvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0V29ya2xldEdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUpOwogCiB1c2luZyBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvciA9IEpT
RE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTVGVzdEdsb2JhbE9iamVjdD47CiAKIC8q
IEhhc2ggdGFibGUgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpT
VGVzdEdsb2JhbE9iamVjdFRhYmxlSW5kZXhbMjY3XSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
Q29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2OF0gPSB7CiAg
ICAgeyAtMSwgLTEgfSwKLSAgICB7IDM2LCAtMSB9LAorICAgIHsgNDAsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IDAsIC0xIH0sCi0gICAgeyA0LCAyNjMgfSwKLSAgICB7IDQwLCAtMSB9
LAorICAgIHsgOCwgMjYzIH0sCisgICAgeyA0NCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAgLTMxOSwxNSArMzM0LDE1IEBAIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUlu
ZGV4WzI2N10gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCi0gICAgeyA1MSwgLTEgfSwKKyAgICB7IDU0LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMTksIC0xIH0sCisgICAg
eyAyMywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDYzLCAtMSB9LAorICAgIHsgNjYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNDEsMTQgKzM1NiwxNCBAQCBz
dGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0VGFi
bGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAotICAgIHsgMzAsIC0xIH0sCisgICAgeyAzNCwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAog
ICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NiwgLTEgfSwKLSAgICB7IDksIDI1OCB9LAorICAgIHsg
NzEsIC0xIH0sCisgICAgeyAxMywgMjU4IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC0zNTYsMTIgKzM3MSw5IEBAIHN0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2N10g
PSB7CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyAzNCwgLTEgfSwKLSAgICB7IDE2LCAyNjQgfSwKLSAgICB7IDYsIC0xIH0sCi0gICAgeyAt
MSwgLTEgfSwKLSAgICB7IC0xLCAtMSB9LAotICAgIHsgLTEsIC0xIH0sCisgICAgeyAzOCwgLTEg
fSwKKyAgICB7IDIwLCAyNjQgfSwKKyAgICB7IDEwLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAg
ICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtMzY5LDg4ICszODEsODkgQEAgc3Rh
dGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
SW5kZXhbMjY3XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDMyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxOCwgMjY1IH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAyMiwgMjY1
IH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDks
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTcsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA2MCwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDIwLCAyNTYgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNTgsIC0xIH0sCi0gICAg
eyAxNSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA0Miwg
LTEgfSwKLSAgICB7IDE0LCAtMSB9LAorICAgIHsgMjQsIDI1NiB9LAogICAgIHsgLTEsIC0xIH0s
CisgICAgeyA2MSwgLTEgfSwKKyAgICB7IDE5LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKKyAgICB7IDQ2LCAtMSB9LAorICAgIHsgMTgsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKLSAgICB7IDMxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAorICAgIHsgMzUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAorICAgIHsgNCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDcsIC0x
IH0sCi0gICAgeyAyMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMiwgLTEgfSwKLSAg
ICB7IDMzLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA1MCwgLTEgfSwKKyAgICB7IDI1
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyAyLCAyNjcgfSwKKyAgICB7IDM3LCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxNywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCisgICAgeyAyMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEs
IC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU1LCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
CiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDU4LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjcsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMzgsIC0xIH0sCisgICAgeyAzMSwgLTEgfSwK
ICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA0MiwgLTEgfSwKICAgICB7
IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDUwLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAxMCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAor
ICAgIHsgNTMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDE0LCAtMSB9LAogICAgIHsg
LTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LApAQCAtNDYxLDI4ICs0
NzQsMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IEpTVGVzdEdsb2Jh
bE9iamVjdFRhYmxlSW5kZXhbMjY3XSA9IHsKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0x
IH0sCiAgICAgeyAtMSwgLTEgfSwKKyAgICB7IDYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA2NCwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAorICAgIHsgNjcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAotICAgIHsgMjgsIC0xIH0sCi0gICAgeyAyNSwgMjYyIH0sCi0gICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAorICAgIHsgMzIsIC0xIH0sCisgICAgeyAyOSwgMjYyIH0sCiAgICAgeyAt
MSwgLTEgfSwKKyAgICB7IDUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAg
IHsgLTEsIC0xIH0sCi0gICAgeyAxMiwgMjU3IH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDU5
LCAtMSB9LAorICAgIHsgMTYsIDI1NyB9LAogICAgIHsgLTEsIC0xIH0sCisgICAgeyA2MiwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKQEAg
LTQ5MCwxNyArNTA0LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2N10gPSB7CiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyOSwgMjY2IH0sCiAgICAgeyAt
MSwgLTEgfSwKLSAgICB7IDEzLCAtMSB9LAorICAgIHsgMzMsIDI2NiB9LAogICAgIHsgLTEsIC0x
IH0sCi0gICAgeyA2MiwgLTEgfSwKKyAgICB7IDE3LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCisg
ICAgeyA2NSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDUsIC0xIH0sCiAgICAgeyAtMSwgLTEg
fSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCkBAIC01MTAsMTMgKzUyMywxNSBA
QCBzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNUZXN0R2xvYmFsT2JqZWN0
VGFibGVJbmRleFsyNjddID0gewogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAg
ICB7IC0xLCAtMSB9LAorICAgIHsgNzAsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0x
LCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyA1MywgLTEgfSwKICAgICB7IC0xLCAtMSB9
LAorICAgIHsgNTYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAorICAg
IHsgMywgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwg
LTEgfSwKQEAgLTUzMCw0OSArNTQ1LDUwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhh
c2hJbmRleCBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZUluZGV4WzI2N10gPSB7CiAgICAgeyAtMSwg
LTEgfSwKICAgICB7IDEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDgsIC0xIH0sCisg
ICAgeyAxMiwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAt
MSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgNDQsIDI2MSB9LAotICAgIHsgNywgMjYw
IH0sCisgICAgeyA0OCwgMjYxIH0sCisgICAgeyAxMSwgMjYwIH0sCiAgICAgeyAtMSwgLTEgfSwK
LSAgICB7IDYwLCAtMSB9LAorICAgIHsgNjMsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7
IDQzLCAtMSB9LAorICAgIHsgNDcsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAt
MSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDExLCAtMSB9LAor
ICAgIHsgMTUsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKLSAgICB7IDIyLCAtMSB9LAorICAgIHsg
MjYsIC0xIH0sCiAgICAgeyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAotICAgIHsgMjQsIC0x
IH0sCisgICAgeyAyOCwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0g
ICAgeyA0MSwgLTEgfSwKLSAgICB7IDMsIC0xIH0sCi0gICAgeyA0OCwgLTEgfSwKKyAgICB7IDQ1
LCAtMSB9LAorICAgIHsgNywgLTEgfSwKKyAgICB7IDUxLCAtMSB9LAogICAgIHsgLTEsIC0xIH0s
Ci0gICAgeyA0OSwgLTEgfSwKKyAgICB7IDUyLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCiAgICAg
eyAtMSwgLTEgfSwKICAgICB7IC0xLCAtMSB9LAogICAgIHsgLTEsIC0xIH0sCi0gICAgeyAyMywg
MjU5IH0sCi0gICAgeyAyNiwgLTEgfSwKLSAgICB7IDM1LCAtMSB9LAotICAgIHsgMzcsIC0xIH0s
CisgICAgeyAyNywgMjU5IH0sCisgICAgeyAzMCwgLTEgfSwKICAgICB7IDM5LCAtMSB9LAotICAg
IHsgNDYsIC0xIH0sCi0gICAgeyA1MiwgLTEgfSwKLSAgICB7IDU0LCAtMSB9LAotICAgIHsgNTYs
IC0xIH0sCi0gICAgeyA2MSwgLTEgfSwKLSAgICB7IDY1LCAtMSB9LAorICAgIHsgNDEsIC0xIH0s
CisgICAgeyA0MywgLTEgfSwKKyAgICB7IDQ5LCAtMSB9LAorICAgIHsgNTUsIC0xIH0sCisgICAg
eyA1NywgLTEgfSwKKyAgICB7IDU5LCAtMSB9LAorICAgIHsgNjQsIC0xIH0sCisgICAgeyA2OCwg
LTEgfSwKKyAgICB7IDY5LCAtMSB9LAogfTsKIAogCkBAIC01ODUsNiArNjAxLDEwIEBAIHN0YXRp
YyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RUYWJsZVZhbHVlc1tdID0K
ICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0gfSwKICNlbmRpZgorICAg
IHsgIkRPTVdpbmRvdyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0RE9NV2luZG93Q29uc3Ry
dWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RET01XaW5kb3dDb25zdHJ1Y3RvcikgfSB9LAorICAg
IHsgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmpl
Y3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0
aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2Jq
ZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlBh
aW50V29ya2xldEdsb2JhbFNjb3BlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RQYWludFdv
cmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3Jr
bGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIlNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0U2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6
UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RDRVJlYWN0aW9ucyIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0Q0VSZWFjdGlvbnNDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RDRVJlYWN0
aW9uc1N0cmluZ2lmaWVyIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllckNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rp
b25zU3RyaW5naWZpZXJDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RDYWxsVHJhY2VyIiwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0Q2FsbFRyYWNlckNvbnN0cnVjdG9yKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNU
ZXN0R2xvYmFsT2JqZWN0VGVzdENhbGxUcmFjZXJDb25zdHJ1Y3RvcikgfSB9LApAQCAtNjM5LDcg
KzY1OSw2IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RU
YWJsZVZhbHVlc1tdID0KICNlbHNlCiAgICAgeyAwLCAwLCBOb0ludHJpbnNpYywgeyAwLCAwIH0g
fSwKICNlbmRpZgotICAgIHsgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5z
aWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKSwg
KGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0
SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcikg
fSB9LAogICAgIHsgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1
ZW5jZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1
Y3RvcnNXaXRoU2VxdWVuY2VDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RPdmVycmlkZUJ1
aWx0aW5zIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRv
bnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xv
dDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcnJpZGVCdWlsdGluc0Nv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJyaWRlQnVpbHRpbnNDb25zdHJ1
Y3RvcikgfSB9LAogICAgIHsgIlRlc3RQbHVnaW5JbnRlcmZhY2UiLCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdEds
b2JhbE9iamVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3Rh
dGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdEdsb2JhbE9i
amVjdFRlc3RQbHVnaW5JbnRlcmZhY2VDb25zdHJ1Y3RvcikgfSB9LApAQCAtNjY0LDEwICs2ODMs
MTIgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxl
VmFsdWVzW10gPQogICAgIHsgIlRlc3RTdHJpbmdpZmllclJlYWRPbmx5QXR0cmlidXRlIiwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9J
bnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZpZXJSZWFkT25seUF0dHJpYnV0ZUNv
bnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZE9ubHlBdHRy
aWJ1dGVDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RTdHJpbmdpZmllclJlYWRXcml0ZUF0
dHJpYnV0ZSIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFN0cmluZ2lmaWVyUmVhZFdy
aXRlQXR0cmlidXRlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3Bl
cnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0U3RyaW5naWZp
ZXJSZWFkV3JpdGVBdHRyaWJ1dGVDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgIlRlc3RUeXBlZGVm
cyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51
bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6Okdl
dFZhbHVlRnVuYz4oanNUZXN0R2xvYmFsT2JqZWN0VGVzdFR5cGVkZWZzQ29uc3RydWN0b3IpLCAo
aW50cHRyX3QpIHN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRK
U1Rlc3RHbG9iYWxPYmplY3RUZXN0VHlwZWRlZnNDb25zdHJ1Y3RvcikgfSB9LAorICAgIHsgIldv
cmtlckdsb2JhbFNjb3BlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PFBy
b3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6
OlB1dFZhbHVlRnVuYz4oc2V0SlNUZXN0R2xvYmFsT2JqZWN0V29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcikgfSB9LAorICAgIHsgIldvcmtsZXRHbG9iYWxTY29wZSIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
R2xvYmFsT2JqZWN0V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IpLCAoaW50cHRyX3QpIHN0
YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzZXRKU1Rlc3RHbG9iYWxP
YmplY3RXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcikgfSB9LAogICAgIHsgInJlZ3VsYXJP
cGVyYXRpb24iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RnVuY3Rpb24pLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UmF3TmF0aXZl
RnVuY3Rpb24+KGpzVGVzdEdsb2JhbE9iamVjdEluc3RhbmNlRnVuY3Rpb25SZWd1bGFyT3BlcmF0
aW9uKSwgKGludHB0cl90KSAoMSkgfSB9LAogfTsKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBK
U1Rlc3RHbG9iYWxPYmplY3RUYWJsZSA9IHsgNjcsIDI1NSwgdHJ1ZSwgSlNUZXN0R2xvYmFsT2Jq
ZWN0OjppbmZvKCksIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlVmFsdWVzLCBKU1Rlc3RHbG9iYWxP
YmplY3RUYWJsZUluZGV4IH07CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTVGVzdEdsb2JhbE9i
amVjdFRhYmxlID0geyA3MiwgMjU1LCB0cnVlLCBKU1Rlc3RHbG9iYWxPYmplY3Q6OmluZm8oKSwg
SlNUZXN0R2xvYmFsT2JqZWN0VGFibGVWYWx1ZXMsIEpTVGVzdEdsb2JhbE9iamVjdFRhYmxlSW5k
ZXggfTsKIC8qIEhhc2ggdGFibGUgZm9yIGNvbnN0cnVjdG9yICovCiAKIHN0YXRpYyBjb25zdCBI
YXNoVGFibGVWYWx1ZSBKU1Rlc3RHbG9iYWxPYmplY3RDb25zdHJ1Y3RvclRhYmxlVmFsdWVzW10g
PQpAQCAtOTUzLDYgKzk3NCw5OCBAQCBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdEVuYWJsZWRB
dFJ1bnRpbWVBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYQogCiAjZW5kaWYK
IAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0
cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIHJldHVybiBKU0RPTVdpbmRvdzo6Z2V0Q29uc3RydWN0b3IoSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0KCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RET01XaW5kb3dDb25zdHJ1Y3Rv
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RH
bG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0RE9NV2luZG93Q29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJET01XaW5kb3ciKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0
cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RH
bG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiRE9NV2luZG93IiksIHN0cmxlbigiRE9NV2luZG93IikpLCB2YWx1ZSk7Cit9CisKK2Jvb2wg
c2V0SlNUZXN0R2xvYmFsT2JqZWN0RE9NV2luZG93Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xv
YmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdERPTVdpbmRvd0NvbnN0cnVjdG9y
U2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJE
T01XaW5kb3ciKTsKK30KKworc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkK
K3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpT
RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5j
b2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0
ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8anNUZXN0R2xvYmFsT2JqZWN0RGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxleGljYWxHbG9iYWxPYmplY3QsIHRo
aXNWYWx1ZSwgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIik7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3REZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcg
YSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qo
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigiRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUiKSwgc3RybGVuKCJEZWRpY2F0ZWRXb3Jr
ZXJHbG9iYWxTY29wZSIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVj
dERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFs
T2JqZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdERlZGljYXRlZFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVu
Y29kZWRWYWx1ZSwgIkRlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlIik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RQYWludFdvcmtsZXRHbG9iYWxTY29wZUNv
bnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rl
c3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIHJldHVybiBKU1BhaW50V29ya2xldEdsb2JhbFNjb3BlOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFBh
aW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJQYWludFdvcmtsZXRHbG9iYWxTY29wZSIpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0UGFpbnRXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
Ly8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmpl
Y3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9j
YXN0PGNvbnN0IExDaGFyKj4oIlBhaW50V29ya2xldEdsb2JhbFNjb3BlIiksIHN0cmxlbigiUGFp
bnRXb3JrbGV0R2xvYmFsU2NvcGUiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rlc3RHbG9i
YWxPYmplY3RQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEds
b2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RQYWludFdvcmtsZXRHbG9iYWxT
Y29wZUNvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBl
bmNvZGVkVmFsdWUsICJQYWludFdvcmtsZXRHbG9iYWxTY29wZSIpOworfQorCitzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0U2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOjpnZXRD
b25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5n
bG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFNl
cnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sK
KyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OmdldDxqc1Rlc3RH
bG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSIp
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0U2VydmljZVdv
cmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUiKSwgc3RybGVu
KCJTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUiKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1Rl
c3RHbG9iYWxPYmplY3RTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxK
U1Rlc3RHbG9iYWxPYmplY3Q+OjpzZXQ8c2V0SlNUZXN0R2xvYmFsT2JqZWN0U2VydmljZVdvcmtl
ckdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsIGVuY29kZWRWYWx1ZSwgIlNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSIpOworfQorCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdENFUmVhY3Rpb25zQ29u
c3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVGVz
dEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKIHsKICAgICBVTlVTRURfUEFSQU0obGV4aWNhbEds
b2JhbE9iamVjdCk7CkBAIC0xOTYwLDI5ICsyMDczLDYgQEAgYm9vbCBzZXRKU1Rlc3RHbG9iYWxP
YmplY3RUZXN0T3BlcmF0aW9uQ29uZGl0aW9uYWxDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGUKIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhp
Y2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Ci19Ci0KLUVuY29k
ZWRKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29u
c3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEdsb2JhbE9iamVjdFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzQ29uc3RydWN0b3JHZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
VmFsdWUsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgc2V0SlNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIiksIHN0cmxlbigiVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMiKSksIHZhbHVlKTsKLX0KLQotYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKLXsKLSAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9i
amVjdD46OnNldDxzZXRKU1Rlc3RHbG9iYWxPYmplY3RUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
c0NvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNv
ZGVkVmFsdWUsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyIpOwotfQotCiBzdGF0aWMgaW5s
aW5lIEpTVmFsdWUganNUZXN0R2xvYmFsT2JqZWN0VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNX
aXRoU2VxdWVuY2VDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQogewogICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKQEAgLTI0NDksNiArMjUzOSw1MiBAQCBib29sIHNl
dEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsTwogICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2Jq
ZWN0Pjo6c2V0PHNldEpTVGVzdEdsb2JhbE9iamVjdFRlc3RUeXBlZGVmc0NvbnN0cnVjdG9yU2V0
dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0
VHlwZWRlZnMiKTsKIH0KIAorc3RhdGljIGlubGluZSBKU1ZhbHVlIGpzVGVzdEdsb2JhbE9iamVj
dFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTVGVzdEdsb2JhbE9iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICBV
TlVTRURfUEFSQU0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIEpTV29ya2VyR2xv
YmFsU2NvcGU6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
LCB0aGlzT2JqZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0
R2xvYmFsT2JqZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIElETEF0dHJpYnV0ZTxKU1Rlc3RHbG9iYWxPYmplY3Q+OjpnZXQ8
anNUZXN0R2xvYmFsT2JqZWN0V29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcj4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNWYWx1ZSwgIldvcmtlckdsb2JhbFNjb3BlIik7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yU2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1Rlc3RHbG9iYWxPYmplY3QmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dp
bmcgYSBidWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJl
Y3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
TENoYXIqPigiV29ya2VyR2xvYmFsU2NvcGUiKSwgc3RybGVuKCJXb3JrZXJHbG9iYWxTY29wZSIp
KSwgdmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6c2V0PHNldEpTVGVzdEds
b2JhbE9iamVjdFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIldvcmtlckdsb2JhbFNjb3BlIik7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvckdldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNUZXN0R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJB
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNXb3JrbGV0R2xvYmFsU2NvcGU6
OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCB0aGlzT2Jq
ZWN0Lmdsb2JhbE9iamVjdCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUganNUZXN0R2xvYmFsT2Jq
ZWN0V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNUZXN0R2xvYmFsT2JqZWN0Pjo6Z2V0PGpzVGVzdEds
b2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiV29ya2xldEdsb2JhbFNjb3BlIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBzZXRKU1Rlc3RHbG9iYWxPYmplY3RXb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNUZXN0
R2xvYmFsT2JqZWN0JiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgLy8gU2hhZG93aW5nIGEg
YnVpbHQtaW4gY29uc3RydWN0b3IuCisgICAgcmV0dXJuIHRoaXNPYmplY3QucHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFy
Kj4oIldvcmtsZXRHbG9iYWxTY29wZSIpLCBzdHJsZW4oIldvcmtsZXRHbG9iYWxTY29wZSIpKSwg
dmFsdWUpOworfQorCitib29sIHNldEpTVGVzdEdsb2JhbE9iamVjdFdvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSURMQXR0cmlidXRlPEpTVGVzdEdsb2JhbE9iamVjdD46OnNldDxzZXRKU1Rlc3RHbG9i
YWxPYmplY3RXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvclNldHRlcj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIHRoaXNWYWx1ZSwgZW5jb2RlZFZhbHVlLCAiV29ya2xldEdsb2JhbFNjb3BlIik7
Cit9CisKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RHbG9iYWxPYmpl
Y3RJbnN0YW5jZUZ1bmN0aW9uUmVndWxhck9wZXJhdGlvbkJvZHkoSlNDOjpKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNhbGxGcmFtZSwgdHlwZW5h
bWUgSURMT3BlcmF0aW9uPEpTVGVzdEdsb2JhbE9iamVjdD46OkNsYXNzUGFyYW1ldGVyIGNhc3Rl
ZFRoaXMpCiB7CiAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCmluZGV4IGIz
MmZhYzNlYmMxYjk2ODIzNWM0M2NlYWI2NDI5MGIzZTM1NGU5M2IuLmQ5ZWU0OThmNjI0NWY2M2Fj
ZmE1M2JlYjNhZGMyZTVkYmFkMDdhNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5jcHAKQEAgLTEsMzc5ICsxLDYgQEAKIC8qCi0gICAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIFdlYktpdCBvcGVuIHNvdXJjZSBwcm9qZWN0LgotICAgIFRoaXMgZmlsZSBo
YXMgYmVlbiBnZW5lcmF0ZWQgYnkgZ2VuZXJhdGUtYmluZGluZ3MucGwuIERPIE5PVCBNT0RJRlkh
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQganVzdCB0byB0ZWxsIGJ1aWxkIHNjcmlwdHMgdGhh
dCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmlkbCwgYW5kIHRodXMKKyAgICBwcmV2ZW50IHRoZSBidWlsZCBzY3JpcHRzIGZyb20gdHJ5
aW5nIHRvIGdlbmVyYXRlIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBmaWxl
IG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCiAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIgotCi0jaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCi0jaW5jbHVk
ZSAiSlNCbG9iLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oIgotI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFjZS5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydE51
bWJlcnMuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiSlNE
T01Db252ZXJ0VmFyaWFkaWMuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0Z1bmN0aW9uUHJvdG90eXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSGVhcEFuYWx5emVyLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5l
cy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTRGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENl
bGxUeXBlLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvU3Vic3BhY2VJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyUHJlcGFyYXRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5n
IG5hbWVzcGFjZSBKU0M7Ci0KLS8vIEF0dHJpYnV0ZXMKLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLWJvb2wgc2V0SlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLQotY2xhc3MgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpT
Tm9uRmluYWxPYmplY3QgewotcHVibGljOgotICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmlu
YWxPYmplY3Q7Ci0gICAgc3RhdGljIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5
cGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUqIHB0ciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZT4odm0uaGVhcCkpIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgcHRyLT5maW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVy
biBwdHI7Ci0gICAgfQotCi0gICAgREVDTEFSRV9JTkZPOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IENlbGxUeXBlLCBKU0M6OlN1YnNwYWNlQWNjZXNzPgotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIFNUQVRJQ19BU1NF
UlRfSVNPX1NVQlNQQUNFX1NIQVJBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90
b3R5cGUsIEJhc2UpOwotICAgICAgICByZXR1cm4gJnZtLnBsYWluT2JqZWN0U3BhY2U7Ci0gICAg
fQotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZt
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEpTVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IEpTQzo6SlNOb25GaW5h
bE9iamVjdCh2bSwgc3RydWN0dXJlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTQzo6Vk0mKTsKLX07Ci1TVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJM
RShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlLCBKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzUHJvdG90eXBlOjpCYXNlKTsKLQotdXNpbmcgSlNUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9yc0NvbnN0cnVjdG9yID0gSlNET01Db25zdHJ1Y3RvcjxKU1Rlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzPjsKLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzMShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7Ci0gICAgQVNT
RVJUKGNhc3RlZFRoaXMpOwotICAgIEVuc3VyZVN0aWxsQWxpdmVTY29wZSBhcmd1bWVudDAgPSBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwotICAgIGF1dG8gYXJyYXlCdWZmZXIgPSBj
b252ZXJ0PElETEFycmF5QnVmZmVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgYXJndW1lbnQwLnZh
bHVlKCksIFtdKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgMCwgImFycmF5QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyIik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmplY3QgPSBUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKCphcnJheUJ1ZmZlcik7Ci0gICAgc3RhdGlj
X2Fzc2VydChkZWNsdHlwZShvYmplY3QpOjppc1JlZik7Ci0gICAgYXV0byBqc1ZhbHVlID0gdG9K
U05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Pigq
bGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3Zl
KG9iamVjdCkpOwotICAgIHNldFN1YmNsYXNzU3RydWN0dXJlSWZOZWVkZWQ8VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM+KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXNPYmplY3Qo
anNWYWx1ZSkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIEVu
Y29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsK
LSAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBq
c0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKj4oY2FsbEZyYW1l
LT5qc0NhbGxlZSgpKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgRW5zdXJlU3RpbGxB
bGl2ZVNjb3BlIGFyZ3VtZW50MCA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMCk7Ci0g
ICAgYXV0byBhcnJheUJ1ZmZlclZpZXcgPSBjb252ZXJ0PElETEFycmF5QnVmZmVyVmlldz4oKmxl
eGljYWxHbG9iYWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJhcnJheUJ1
ZmZlclZpZXciLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCBudWxscHRyLCAiQXJyYXlC
dWZmZXJWaWV3Iik7IH0pOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7Ci0gICAgYXV0byBvYmplY3QgPSBUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczo6Y3JlYXRlKGFycmF5QnVmZmVyVmlldy5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KGRlY2x0eXBlKG9iamVjdCk6OmlzUmVmKTsKLSAgICBhdXRvIGpzVmFsdWUgPSB0
b0pTTmV3bHlDcmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1v
dmUob2JqZWN0KSk7Ci0gICAgc2V0U3ViY2xhc3NTdHJ1Y3R1cmVJZk5lZWRlZDxUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycz4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBhc09iamVj
dChqc1ZhbHVlKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwot
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
RW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczMoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQot
ewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJh
bWUtPmpzQ2FsbGVlKCkpOwotICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBFbnN1cmVTdGls
bEFsaXZlU2NvcGUgYXJndW1lbnQwID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsK
LSAgICBhdXRvIGJsb2IgPSBjb252ZXJ0PElETEludGVyZmFjZTxCbG9iPj4oKmxleGljYWxHbG9i
YWxPYmplY3QsIGFyZ3VtZW50MC52YWx1ZSgpLCBbXShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJibG9iIiwgIlRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzIiwgbnVsbHB0ciwgIkJsb2IiKTsgfSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iamVj
dCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoKmJsb2IpOwotICAgIHN0YXRp
Y19hc3NlcnQoZGVjbHR5cGUob2JqZWN0KTo6aXNSZWYpOwotICAgIGF1dG8ganNWYWx1ZSA9IHRv
SlNOZXdseUNyZWF0ZWQ8SURMSW50ZXJmYWNlPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPj4o
KmxleGljYWxHbG9iYWxPYmplY3QsICpjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGTW92
ZShvYmplY3QpKTsKLSAgICBzZXRTdWJjbGFzc1N0cnVjdHVyZUlmTmVlZGVkPFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzPihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGFzT2JqZWN0
KGpzVmFsdWUpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIHsgfSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKTsKLX0KLQotc3RhdGljIGlubGluZSBF
bmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KGNhbGxGcmFt
ZS0+anNDYWxsZWUoKSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIEVuc3VyZVN0aWxs
QWxpdmVTY29wZSBhcmd1bWVudDAgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDApOwot
ICAgIGF1dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBhcmd1bWVudDAudmFsdWUoKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Nj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBhdXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpjcmVhdGUoV1RGTW92ZShzdHJpbmcpKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KGRlY2x0eXBlKG9iamVjdCk6OmlzUmVmKTsKLSAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlD
cmVhdGVkPElETEludGVyZmFjZTxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0
KSk7Ci0gICAgc2V0U3ViY2xhc3NTdHJ1Y3R1cmVJZk5lZWRlZDxUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycz4obGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBhc09iamVjdChqc1ZhbHVl
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpT
VmFsdWUgY29uc3RydWN0SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczUoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihjYWxsRnJhbWUtPmpzQ2Fs
bGVlKCkpOwotICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBhdXRvIGxvbmdBcmdzID0gY29u
dmVydFZhcmlhZGljQXJndW1lbnRzPElETExvbmc+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqY2Fs
bEZyYW1lLCAwKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6
OmNyZWF0ZShXVEZNb3ZlKGxvbmdBcmdzKSk7Ci0gICAgc3RhdGljX2Fzc2VydChkZWNsdHlwZShv
YmplY3QpOjppc1JlZik7Ci0gICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRlZDxJRExJ
bnRlcmZhY2U8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+PigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEZNb3ZlKG9iamVjdCkpOwotICAgIHNl
dFN1YmNsYXNzU3RydWN0dXJlSWZOZWVkZWQ8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgYXNPYmplY3QoanNWYWx1ZSkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVmFsdWUpOwotfQotCi10ZW1wbGF0ZTw+IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQotewotICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpOwotICAgIHNpemVfdCBhcmdzQ291bnQgPSBzdGQ6Om1pbjxzaXplX3Q+KDEsIGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKTsKLSAgICBpZiAoYXJnc0NvdW50ID09IDApIHsKLSAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChjb25zdHJ1Y3RKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzNShsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpKSk7Ci0g
ICAgfQotICAgIGlmIChhcmdzQ291bnQgPT0gMSkgewotICAgICAgICBKU1ZhbHVlIGRpc3Rpbmd1
aXNoaW5nQXJnID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKLSAgICAgICAgaWYg
KGRpc3Rpbmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdB
cmcpLT5pbmhlcml0czxKU0FycmF5QnVmZmVyPih2bSkpCi0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4odGhyb3dTY29wZSwgKGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMxKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSkpKTsKLSAgICAgICAgaWYgKGRpc3Rp
bmd1aXNoaW5nQXJnLmlzT2JqZWN0KCkgJiYgYXNPYmplY3QoZGlzdGluZ3Vpc2hpbmdBcmcpLT5p
bmhlcml0czxKU0FycmF5QnVmZmVyVmlldz4odm0pKQotICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHRocm93U2NvcGUsIChjb25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
MihsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUpKSk7Ci0gICAgICAgIGlmIChkaXN0aW5n
dWlzaGluZ0FyZy5pc09iamVjdCgpICYmIGFzT2JqZWN0KGRpc3Rpbmd1aXNoaW5nQXJnKS0+aW5o
ZXJpdHM8SlNCbG9iPih2bSkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dT
Y29wZSwgKGNvbnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMzKGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSkpKTsKLSAgICAgICAgaWYgKGRpc3Rpbmd1aXNoaW5nQXJnLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4odGhyb3dTY29wZSwgKGNv
bnN0cnVjdEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM1KGxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZSkpKTsKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHRocm93U2NvcGUsIChj
b25zdHJ1Y3RKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzNChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUpKSk7Ci0gICAgfQotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUpOwotfQotCi10ZW1wbGF0ZTw+IEpTVmFsdWUgSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yOjpwcm90b3R5cGVGb3JTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKHZtKTsKLSAgICByZXR1cm4gZ2xvYmFsT2JqZWN0LmZ1bmN0aW9u
UHJvdG90eXBlKCk7Ci19Ci0KLXRlbXBsYXRlPD4gdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzQ29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnByb3RvdHlwZSwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6cHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwg
SlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBq
c05vbnRyaXZpYWxTdHJpbmcodm0sICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyJfcyksIEpT
Qzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pOwotICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBq
c051bWJlcigwKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSk7Ci19Ci0KLXRlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZv
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1
Y3RvcikgfTsKLQotLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCi0KLXN0YXRpYyBjb25z
dCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlVGFi
bGVWYWx1ZXNbXSA9Ci17Ci0gICAgeyAiY29uc3RydWN0b3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJpbnNpYywgeyAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE92ZXJs
b2FkZWRDb25zdHJ1Y3RvcnNDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0
UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNDb25zdHJ1Y3RvcikgfSB9LAotfTsKLQotY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9U
QUJMRShKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKSB9OwotCi12b2lkIEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmVpZnlTdGF0aWNQcm9w
ZXJ0aWVzKHZtLCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjppbmZvKCksIEpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOwotICAgIEpT
Q19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOwotfQotCi1jb25zdCBDbGFzc0lu
Zm8gSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6c19pbmZvID0geyAiVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpIH07Ci0KLUpTVGVzdE92
ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4mJiBpbXBsKQotICAgIDogSlNET01XcmFwcGVyPFRlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzPihzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCwgV1RGTW92ZShp
bXBsKSkKLXsKLX0KLQotdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCi17Ci0gICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgIEFT
U0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6Omlz
X2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz46OnZh
bHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0
aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7
Ci0KLX0KLQotSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZVBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNQcm90b3R5cGU6OmNyZWF0ZSh2bSwg
Jmdsb2JhbE9iamVjdCwgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1Byb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCkpKTsKLX0KLQotSlNPYmplY3QqIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OnBy
b3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIGdldERPTVByb3RvdHlwZTxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPih2bSwg
Z2xvYmFsT2JqZWN0KTsKLX0KLQotSlNWYWx1ZSBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpnZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3Rvcj4odm0sICpqc0Nhc3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpKTsKLX0KLQotdm9pZCBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQotewotICAgIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yczo6fkpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMoKTsKLX0KLQotRW5jb2RlZEpTVmFs
dWUganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0NvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5
TmFtZSkKLXsKLSAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIGF1dG8q
IHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1By
b3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Ci0gICAgaWYgKFVOTElL
RUxZKCFwcm90b3R5cGUpKQotICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihsZXhpY2Fs
R2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmdldENvbnN0cnVjdG9yKEpTQzo6Z2V0Vk0obGV4
aWNhbEdsb2JhbE9iamVjdCksIHByb3RvdHlwZS0+Z2xvYmFsT2JqZWN0KCkpKTsKLX0KLQotYm9v
bCBzZXRKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IoSlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQotewotICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzUHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUp
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXByb3RvdHlwZSkpIHsKLSAgICAgICAgdGhyb3dWTVR5cGVF
cnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgotICAg
IHJldHVybiBwcm90b3R5cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3Ry
dWN0b3IsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKLX0KLQotSlNDOjpJc29TdWJz
cGFjZSogSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6c3Vic3BhY2VGb3JJbXBsKEpTQzo6
Vk0mIHZtKQotewotICAgIGF1dG8mIGNsaWVudERhdGEgPSAqc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS5jbGllbnREYXRhKTsKLSAgICBhdXRvJiBzcGFjZXMgPSBjbGllbnREYXRhLnN1
YnNwYWNlcygpOwotICAgIGlmIChhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCkpCi0gICAgICAgIHJldHVybiBzcGFjZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmpl
Y3QsIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+IHx8ICFKU1Rlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjpuZWVkc0Rlc3RydWN0aW9uKTsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNf
YmFzZV9vZl92PEpTQzo6SlNEZXN0cnVjdGlibGVPYmplY3QsIEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+KQotICAgICAgICBzcGFjZXMubV9zdWJzcGFjZUZvclRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgdm0uZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlLmdldCgpLCBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKTsKLSAgICBlbHNlCi0gICAgICAgIHNwYWNlcy5tX3N1YnNwYWNl
Rm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPSBtYWtlVW5pcXVlPElzb1N1YnNwYWNlPiBJ
U09fU1VCU1BBQ0VfSU5JVCh2bS5oZWFwLCB2bS5jZWxsSGVhcENlbGxUeXBlLmdldCgpLCBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKTsKLSAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1
YnNwYWNlRm9yVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuZ2V0KCk7Ci1JR05PUkVfV0FSTklO
R1NfQkVHSU4oInVucmVhY2hhYmxlLWNvZGUiKQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0
b2xvZ2ljYWwtY29tcGFyZSIpCi0gICAgaWYgKCZKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3Jz
Ojp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25z
dHJhaW50cykKLSAgICAgICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBw
ZW5kKHNwYWNlKTsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLUlHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICByZXR1cm4gc3BhY2U7Ci19Ci0KLXZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6
YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXImIGFuYWx5emVyKQotewotICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyo+
KGNlbGwpOwotICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNlbGwsICZ0aGlz
T2JqZWN0LT53cmFwcGVkKCkpOwotICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCi0gICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxsLCAidXJsICIg
KyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0cmluZygpKTsK
LSAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Ci19Ci0KLWJvb2wgSlNUZXN0
T3ZlcmxvYWRlZENvbnN0cnVjdG9yc093bmVyOjppc1JlYWNoYWJsZUZyb21PcGFxdWVSb290cyhK
U0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCosIFNsb3RWaXNpdG9yJiB2aXNp
dG9yLCBjb25zdCBjaGFyKiogcmVhc29uKQotewotICAgIFVOVVNFRF9QQVJBTShoYW5kbGUpOwot
ICAgIFVOVVNFRF9QQVJBTSh2aXNpdG9yKTsKLSAgICBVTlVTRURfUEFSQU0ocmVhc29uKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc093
bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29u
dGV4dCkKLXsKLSAgICBhdXRvKiBqc1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyo+KGhhbmRsZS5zbG90KCktPmFzQ2Vs
bCgpKTsKLSAgICBhdXRvJiB3b3JsZCA9ICpzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihj
b250ZXh0KTsKLSAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwgJmpzVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMtPndyYXBwZWQoKSwganNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyk7Ci19Ci0K
LSNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCi0jaWYgUExBVEZPUk0oV0lOKQotI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ0ODMpCi1leHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25z
dCBfX2lkZW50aWZpZXIoIj8/XzdUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0BXZWJDb3JlQEA2
QkAiKVtdKSgpOyB9Ci0jZWxzZQotZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJD
b3JlMjZUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0VbXTsgfQotI2VuZGlmCi0jZW5kaWYKLQot
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cz4mJiBpbXBsKQotewotCi0jaWYgRU5BQkxFKEJJTkRJTkdfSU5URUdSSVRZKQotICAgIGNvbnN0
IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSBnZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkp
OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkKiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBf
X2lkZW50aWZpZXIoIj8/XzdUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc0BXZWJDb3JlQEA2QkAi
KTsKLSNlbHNlCi0gICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNv
cmUyNlRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzRVsyXTsKLSNlbmRpZgotCi0gICAgLy8gSWYg
dGhpcyBmYWlscyBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyBkb2VzIG5vdCBoYXZlIGEgdnRh
YmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCi0gICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCi0gICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPjo6dmFs
dWUsICJUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyBpcyBub3QgcG9seW1vcnBoaWMiKTsKLQot
ICAgIC8vIElmIHlvdSBoaXQgdGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFm
dGVyIGZyZWUgYnVnLCBvcgotICAgIC8vIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIGhhcyBz
dWJjbGFzc2VzLiBJZiBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyBoYXMgc3ViY2xhc3NlcyB0
aGF0IGdldCBwYXNzZWQKLSAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgVGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgeW91IHRvIG9wdCBvdXQgb2YgYmluZGluZyBoYXJkZW5p
bmcKLSAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9uIGF0dHJpYnV0ZSB0
byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCi0gICAgUkVMRUFTRV9BU1NFUlQoYWN0dWFs
VlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOwotI2VuZGlmCi0gICAgcmV0
dXJuIGNyZWF0ZVdyYXBwZXI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGdsb2JhbE9iamVj
dCwgV1RGTW92ZShpbXBsKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzJiBpbXBsKQotewotICAgIHJldHVybiB3cmFw
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Ci19Ci0KLVRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKiBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjp0b1dyYXBw
ZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoYXV0byogd3Jh
cHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyo+KHZtLCB2
YWx1ZSkpCi0gICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMu
aAppbmRleCA5OGUxNjU4NjdhMGRjYzkyMGJiOGM4ZDlmOTgyOWE3MWMyNDNjNmRjLi5kOWVlNDk4
ZjYyNDVmNjNhY2ZhNTNiZWIzYWRjMmU1ZGJhZDA3YTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzLmgKQEAgLTEsOTMgKzEsNiBAQAogLyoKLSAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCi0gICAgVGhpcyBm
aWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1P
RElGWSEKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0
cyB0aGF0IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1Rlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmNwcCBhcmUgY3JlYXRlZCBmb3IgVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJv
bSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGFuZAor
ICAgIEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwIGF0IGV2ZXJ5IGJ1aWxkLiBUaGlz
IGZpbGUgbXVzdCBub3QgYmUgdHJpZWQgdG8gY29tcGlsZS4KICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzIDogcHVibGlj
IEpTRE9NV3JhcHBlcjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gewotcHVibGljOgotICAg
IHVzaW5nIEJhc2UgPSBKU0RPTVdyYXBwZXI8VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+Owot
ICAgIHN0YXRpYyBKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBjcmVhdGUoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiYmIGltcGwpCi0gICAgewotICAgICAgICBKU1Rlc3RP
dmVybG9hZGVkQ29uc3RydWN0b3JzKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVD
ZWxsPEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+KGdsb2JhbE9iamVjdC0+dm0oKS5oZWFw
KSkgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhzdHJ1Y3R1cmUsICpnbG9iYWxPYmplY3Qs
IFdURk1vdmUoaW1wbCkpOwotICAgICAgICBwdHItPmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVj
dC0+dm0oKSk7Ci0gICAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6
SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsK
LSAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotICAgIHN0YXRpYyBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogdG9XcmFw
cGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
OjpKU0NlbGwqKTsKLQotICAgIERFQ0xBUkVfSU5GTzsKLQotICAgIHN0YXRpYyBKU0M6OlN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSwgSlND
OjpOb25BcnJheSk7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBnZXRDb25zdHJ1
Y3RvcihKU0M6OlZNJiwgY29uc3QgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lLCBKU0M6OlN1YnNwYWNlQWNjZXNzIG1vZGU+IHN0YXRpYyBKU0M6Oklzb1N1YnNw
YWNlKiBzdWJzcGFjZUZvcihKU0M6OlZNJiB2bSkKLSAgICB7Ci0gICAgICAgIGlmIGNvbnN0ZXhw
ciAobW9kZSA9PSBKU0M6OlN1YnNwYWNlQWNjZXNzOjpDb25jdXJyZW50bHkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHN1YnNwYWNlRm9ySW1wbCh2bSk7Ci0g
ICAgfQotICAgIHN0YXRpYyBKU0M6Oklzb1N1YnNwYWNlKiBzdWJzcGFjZUZvckltcGwoSlNDOjpW
TSYgdm0pOwotICAgIHN0YXRpYyB2b2lkIGFuYWx5emVIZWFwKEpTQ2VsbCosIEpTQzo6SGVhcEFu
YWx5emVyJik7Ci1wcm90ZWN0ZWQ6Ci0gICAgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyhK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0JiwgUmVmPFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzPiYmKTsKLQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpWTSYpOwotfTsK
LQotY2xhc3MgSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc093bmVyIDogcHVibGljIEpTQzo6
V2Vha0hhbmRsZU93bmVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWFjaGFibGVG
cm9tT3BhcXVlUm9vdHMoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiwgdm9pZCogY29udGV4dCwg
SlNDOjpTbG90VmlzaXRvciYsIGNvbnN0IGNoYXIqKik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmFs
aXplKEpTQzo6SGFuZGxlPEpTQzo6VW5rbm93bj4sIHZvaWQqIGNvbnRleHQpOwotfTsKLQotaW5s
aW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwg
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzT3duZXI+IG93bmVyOwotICAgIHJldHVybiAm
b3duZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzKiB3cmFwcGFibGVPYmplY3QpCi17Ci0gICAgcmV0dXJuIHdyYXBwYWJsZU9i
amVjdDsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMmKTsKLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9y
cyogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9Ci1KU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM+JiYpOwotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycz4mJiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6Ompz
TnVsbCgpOyB9Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTRlYzdm
NDNhZTQzM2YwMzlhZjM4YjUyZWU3Mzc0NDdmZTg5ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJh
dGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlLmgiCisKKyNpbmNsdWRl
ICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJET01Jc29TdWJzcGFjZXMuaCIKKyNpbmNs
dWRlICJKU0RPTUF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlLmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCisjaW5j
bHVkZSAiSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaCIKKyNpbmNsdWRlICJKU1Rlc3ROb2Rl
LmgiCisjaW5jbHVkZSAiSlNUZXN0T2JqLmgiCisjaW5jbHVkZSAiSlNUZXN0UHJvbWlzZVJlamVj
dGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIldlYkNvcmVKU0NsaWVudERhdGEuaCIKKyNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZS5o
IgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Rl
c3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9VUkwuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisvLyBBdHRyaWJ1dGVzCisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7
Citib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1dvcmtlckdsb2JhbFNjb3BlRXhwb3NlZFRvV29y
a2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1dv
cmtlckdsb2JhbFNjb3BlVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1dvcmtl
ckdsb2JhbFNjb3BlVGVzdE5vZGVDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6OkVuY29kZWRKU1Zh
bHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0b3IoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wg
c2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJlamVjdGlvbkV2
ZW50Q29uc3RydWN0b3IoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lKTsKK2Jvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3RQcm9t
aXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisKK3VzaW5nIEpTV29ya2VyR2xv
YmFsU2NvcGVDb25zdHJ1Y3RvciA9IEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpT
V29ya2VyR2xvYmFsU2NvcGU+OworCisvKiBIYXNoIHRhYmxlICovCisKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1dvcmtlckdsb2JhbFNjb3BlVGFibGVJbmRleFsxMF0g
PSB7CisgICAgeyAtMSwgLTEgfSwKKyAgICB7IDAsIDggfSwKKyAgICB7IC0xLCAtMSB9LAorICAg
IHsgLTEsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMywg
LTEgfSwKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMSwgOSB9LAorICAgIHsgMiwgLTEgfSwKK307
CisKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGVUYWJs
ZVZhbHVlc1tdID0KK3sKKyAgICB7ICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCBOb0ludHJp
bnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+
KGpzV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvciks
IChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNl
dEpTV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3Rvcikg
fSB9LAorICAgIHsgIlRlc3ROb2RlIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTQzo6UHJvcGVy
dHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19j
YXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1dvcmtlckdsb2JhbFNjb3BlVGVzdE5v
ZGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQ
dXRWYWx1ZUZ1bmM+KHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKSB9
IH0sCisgICAgeyAiVGVzdE9iamVjdCIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3Bl
cnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNXb3JrZXJHbG9iYWxTY29wZVRlc3RP
YmplY3RDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90
OjpQdXRWYWx1ZUZ1bmM+KHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0Q29uc3RydWN0
b3IpIH0gfSwKKyAgICB7ICJUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Iiwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgTm9JbnRyaW5zaWMs
IHsgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1dv
cmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yKSwgKGlu
dHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNX
b3JrZXJHbG9iYWxTY29wZVRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvcikgfSB9
LAorfTsKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1dvcmtlckdsb2JhbFNjb3BlVGFibGUg
PSB7IDQsIDcsIHRydWUsIEpTV29ya2VyR2xvYmFsU2NvcGU6OmluZm8oKSwgSlNXb3JrZXJHbG9i
YWxTY29wZVRhYmxlVmFsdWVzLCBKU1dvcmtlckdsb2JhbFNjb3BlVGFibGVJbmRleCB9OwordGVt
cGxhdGU8PiBKU1ZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcjo6cHJvdG90eXBl
Rm9yU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBjb25zdCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIHJldHVybiBKU0V2ZW50VGFyZ2V0OjpnZXRDb25zdHJ1Y3Rvcih2bSwg
Jmdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBKU1dvcmtlckdsb2JhbFNjb3Bl
Q29uc3RydWN0b3I6OmluaXRpYWxpemVQcm9wZXJ0aWVzKFZNJiB2bSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PnByb3RvdHlwZSwgSlNXb3JrZXJHbG9iYWxTY29wZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxPYmpl
Y3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxTdHJp
bmcodm0sICJXb3JrZXJHbG9iYWxTY29wZSJfcyksIEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJl
YWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOworICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcigwKSwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
Cit9CisKK3RlbXBsYXRlPD4gY29uc3QgQ2xhc3NJbmZvIEpTV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3Rvcjo6c19pbmZvID0geyAiV29ya2VyR2xvYmFsU2NvcGUiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV29ya2VyR2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcikgfTsKKworLyogSGFzaCB0YWJsZSBmb3IgcHJvdG90eXBlICovCisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3QgQ29tcGFjdEhhc2hJbmRleCBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90
eXBlVGFibGVJbmRleFsyXSA9IHsKKyAgICB7IC0xLCAtMSB9LAorICAgIHsgMCwgLTEgfSwKK307
CisKKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTV29ya2VyR2xvYmFsU2NvcGVQcm90
b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5vSW50cmluc2lj
LCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKSwgKGludHB0cl90KSBzdGF0aWNfY2FzdDxQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4oc2V0SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVj
dG9yKSB9IH0sCit9OworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlIEpTV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNXb3JrZXJHbG9iYWxTY29wZTo6aW5m
bygpLCBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlVGFibGVWYWx1ZXMsIEpTV29ya2VyR2xv
YmFsU2NvcGVQcm90b3R5cGVUYWJsZUluZGV4IH07Citjb25zdCBDbGFzc0luZm8gSlNXb3JrZXJH
bG9iYWxTY29wZVByb3RvdHlwZTo6c19pbmZvID0geyAiV29ya2VyR2xvYmFsU2NvcGUiLCAmQmFz
ZTo6c19pbmZvLCAmSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZVRhYmxlLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUpIH07CisKK3Zv
aWQgSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZWlmeVN0YXRpY1Byb3BlcnRp
ZXModm0sIEpTV29ya2VyR2xvYmFsU2NvcGU6OmluZm8oKSwgSlNXb3JrZXJHbG9iYWxTY29wZVBy
b3RvdHlwZVRhYmxlVmFsdWVzLCAqdGhpcyk7CisgICAgSlNDX1RPX1NUUklOR19UQUdfV0lUSE9V
VF9UUkFOU0lUSU9OKCk7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBKU1dvcmtlckdsb2JhbFNjb3Bl
OjpzX2luZm8gPSB7ICJXb3JrZXJHbG9iYWxTY29wZSIsICZCYXNlOjpzX2luZm8sICZKU1dvcmtl
ckdsb2JhbFNjb3BlVGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXb3JrZXJH
bG9iYWxTY29wZSkgfTsKKworSlNXb3JrZXJHbG9iYWxTY29wZTo6SlNXb3JrZXJHbG9iYWxTY29w
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V29ya2VyR2xvYmFsU2NvcGU+JiYg
aW1wbCkKKyAgICA6IEpTRXZlbnRUYXJnZXQodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSkK
K3sKK30KKwordm9pZCBKU1dvcmtlckdsb2JhbFNjb3BlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTUHJveHkqIHByb3h5KQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7
CisKKyAgICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2Jhc2Vfb2Y8QWN0aXZlRE9NT2JqZWN0LCBX
b3JrZXJHbG9iYWxTY29wZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBtYXJrZWQgYXMgW0Fj
dGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xhc3Mgc3ViY2xhc3Nl
cyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OmNyZWF0ZVByb3RvdHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGU6OmNyZWF0ZSh2
bSwgJmdsb2JhbE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZTo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU0V2ZW50VGFyZ2V0Ojpwcm90b3R5cGUodm0sIGds
b2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTV29ya2VyR2xvYmFsU2NvcGU6OnByb3Rv
dHlwZShWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0
dXJuIGdldERPTVByb3RvdHlwZTxKU1dvcmtlckdsb2JhbFNjb3BlPih2bSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworSlNWYWx1ZSBKU1dvcmtlckdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3RvcihWTSYg
dm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rvcj4odm0sICpqc0Nh
c3Q8Y29uc3QgSlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKTsKK30KKwordGVtcGxh
dGU8PiBpbmxpbmUgSlNXb3JrZXJHbG9iYWxTY29wZSogSURMQXR0cmlidXRlPEpTV29ya2VyR2xv
YmFsU2NvcGU+OjpjYXN0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSB0aGlzVmFsdWUpCit7CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNXb3Jr
ZXJHbG9iYWxTY29wZSo+KEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpLCBKU1ZhbHVl
OjpkZWNvZGUodGhpc1ZhbHVlKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgVk0mIHZtID0gSlND
OjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0
PEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNW
YWx1ZSkpOworICAgIGlmIChVTkxJS0VMWSghcHJvdG90eXBlKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1dvcmtlckdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3RvcihK
U0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgp
KSk7Cit9CisKK2Jvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9yKEpTR2xvYmFs
T2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIGF1dG8qIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNXb3JrZXJH
bG9iYWxTY29wZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7Cisg
ICAgaWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKSB7CisgICAgICAgIHRocm93Vk1UeXBlRXJyb3Io
bGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgLy8gU2hhZG93aW5nIGEgYnVpbHQtaW4gY29uc3RydWN0b3IKKyAgICByZXR1
cm4gcHJvdG90eXBlLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvbnN0cnVjdG9y
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNW
YWx1ZSBqc1dvcmtlckdsb2JhbFNjb3BlRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0
b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTV29ya2VyR2xv
YmFsU2NvcGUmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBKU0V4cG9zZWRUb1dvcmtlckFuZFdpbmRvdzo6Z2V0Q29uc3Ry
dWN0b3IoSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCksIHRoaXNPYmplY3QuZ2xvYmFs
T2JqZWN0KCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBqc1dvcmtlckdsb2JhbFNjb3BlRXhwb3Nl
ZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OmdldDxqc1dvcmtlckds
b2JhbFNjb3BlRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JHZXR0ZXI+KCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciKTsK
K30KKworc3RhdGljIGlubGluZSBib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVFeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwor
ICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0aGlz
T2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciKSwgc3RybGVu
KCJFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3ciKSksIHZhbHVlKTsKK30KKworYm9vbCBzZXRKU1dv
cmtlckdsb2JhbFNjb3BlRXhwb3NlZFRvV29ya2VyQW5kV2luZG93Q29uc3RydWN0b3IoSlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8
SlNXb3JrZXJHbG9iYWxTY29wZT46OnNldDxzZXRKU1dvcmtlckdsb2JhbFNjb3BlRXhwb3NlZFRv
V29ya2VyQW5kV2luZG93Q29uc3RydWN0b3JTZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIkV4cG9zZWRUb1dvcmtlckFuZFdpbmRvdyIpOworfQor
CitzdGF0aWMgaW5saW5lIEpTVmFsdWUganNXb3JrZXJHbG9iYWxTY29wZVRlc3ROb2RlQ29uc3Ry
dWN0b3JHZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTV29ya2Vy
R2xvYmFsU2NvcGUmIHRoaXNPYmplY3QpCit7CisgICAgVU5VU0VEX1BBUkFNKGxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIHJldHVybiBKU1Rlc3ROb2RlOjpnZXRDb25zdHJ1Y3RvcihKU0M6Omdl
dFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9iYWxPYmplY3QoKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9y
KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTV29ya2Vy
R2xvYmFsU2NvcGU+OjpnZXQ8anNXb3JrZXJHbG9iYWxTY29wZVRlc3ROb2RlQ29uc3RydWN0b3JH
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsICJUZXN0Tm9kZSIpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3ROb2RlQ29uc3Ry
dWN0b3JTZXR0ZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTV29ya2Vy
R2xvYmFsU2NvcGUmIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0g
PSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAvLyBTaGFkb3dpbmcgYSBi
dWlsdC1pbiBjb25zdHJ1Y3Rvci4KKyAgICByZXR1cm4gdGhpc09iamVjdC5wdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PigiVGVzdE5vZGUiKSwgc3RybGVuKCJUZXN0Tm9kZSIpKSwgdmFsdWUpOworfQorCitib29sIHNl
dEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0Tm9kZUNvbnN0cnVjdG9yKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gSURMQXR0cmlidXRlPEpTV29ya2VyR2xv
YmFsU2NvcGU+OjpzZXQ8c2V0SlNXb3JrZXJHbG9iYWxTY29wZVRlc3ROb2RlQ29uc3RydWN0b3JT
ZXR0ZXI+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzVmFsdWUsIGVuY29kZWRWYWx1ZSwgIlRl
c3ROb2RlIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSBqc1dvcmtlckdsb2JhbFNjb3Bl
VGVzdE9iamVjdENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU1dvcmtlckdsb2JhbFNjb3BlJiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9Q
QVJBTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0T2JqOjpnZXRDb25z
dHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09iamVjdC5nbG9i
YWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFsU2NvcGVUZXN0
T2JqZWN0Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBJRExB
dHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OmdldDxqc1dvcmtlckdsb2JhbFNjb3BlVGVz
dE9iamVjdENvbnN0cnVjdG9yR2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVl
LCAiVGVzdE9iamVjdCIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNXb3JrZXJHbG9i
YWxTY29wZVRlc3RPYmplY3RDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVjdCwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgorICAgIHJldHVybiB0
aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0T2JqZWN0IiksIHN0cmxlbigiVGVzdE9iamVj
dCIpKSwgdmFsdWUpOworfQorCitib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0T2JqZWN0
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OnNldDxzZXRKU1dvcmtlckds
b2JhbFNjb3BlVGVzdE9iamVjdENvbnN0cnVjdG9yU2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0T2JqZWN0Iik7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSBqc1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dENvbnN0cnVjdG9yR2V0dGVyKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U1dvcmtlckdsb2JhbFNjb3BlJiB0aGlzT2JqZWN0KQoreworICAgIFVOVVNFRF9QQVJBTShsZXhp
Y2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gSlNUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
OjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSwgdGhpc09i
amVjdC5nbG9iYWxPYmplY3QoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2VyR2xvYmFs
U2NvcGVUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlO
YW1lKQoreworICAgIHJldHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46Omdl
dDxqc1dvcmtlckdsb2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9y
R2V0dGVyPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCAiVGVzdFByb21pc2VSZWpl
Y3Rpb25FdmVudCIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNXb3JrZXJHbG9iYWxT
Y29wZVRlc3RQcm9taXNlUmVqZWN0aW9uRXZlbnRDb25zdHJ1Y3RvclNldHRlcihKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNXb3JrZXJHbG9iYWxTY29wZSYgdGhpc09iamVj
dCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxH
bG9iYWxPYmplY3QpOworICAgIC8vIFNoYWRvd2luZyBhIGJ1aWx0LWluIGNvbnN0cnVjdG9yLgor
ICAgIHJldHVybiB0aGlzT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCJUZXN0UHJvbWlzZVJlamVjdGlv
bkV2ZW50IiksIHN0cmxlbigiVGVzdFByb21pc2VSZWplY3Rpb25FdmVudCIpKSwgdmFsdWUpOwor
fQorCitib29sIHNldEpTV29ya2VyR2xvYmFsU2NvcGVUZXN0UHJvbWlzZVJlamVjdGlvbkV2ZW50
Q29uc3RydWN0b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJl
dHVybiBJRExBdHRyaWJ1dGU8SlNXb3JrZXJHbG9iYWxTY29wZT46OnNldDxzZXRKU1dvcmtlckds
b2JhbFNjb3BlVGVzdFByb21pc2VSZWplY3Rpb25FdmVudENvbnN0cnVjdG9yU2V0dGVyPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc1ZhbHVlLCBlbmNvZGVkVmFsdWUsICJUZXN0UHJvbWlzZVJl
amVjdGlvbkV2ZW50Iik7Cit9CisKK0pTQzo6SXNvU3Vic3BhY2UqIEpTV29ya2VyR2xvYmFsU2Nv
cGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBjbGllbnREYXRh
ID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CisgICAgYXV0
byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0byogc3BhY2Ug
PSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtlckdsb2JhbFNjb3BlLmdldCgpKQorICAgICAgICBy
ZXR1cm4gc3BhY2U7CisgICAgc3BhY2VzLm1fc3Vic3BhY2VGb3JXb3JrZXJHbG9iYWxTY29wZSA9
IG1ha2VVbmlxdWU8SXNvU3Vic3BhY2U+IElTT19TVUJTUEFDRV9JTklUKHZtLmhlYXAsIGNsaWVu
dERhdGEubV9oZWFwQ2VsbFR5cGVGb3JKU1dvcmtlckdsb2JhbFNjb3BlLmdldCgpLCBKU1dvcmtl
ckdsb2JhbFNjb3BlKTsKKyAgICBhdXRvKiBzcGFjZSA9IHNwYWNlcy5tX3N1YnNwYWNlRm9yV29y
a2VyR2xvYmFsU2NvcGUuZ2V0KCk7CitJR05PUkVfV0FSTklOR1NfQkVHSU4oInVucmVhY2hhYmxl
LWNvZGUiKQorSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ0YXV0b2xvZ2ljYWwtY29tcGFyZSIpCisg
ICAgaWYgKCZKU1dvcmtlckdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENvbnN0cmFpbnRzICE9ICZK
U0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAgICAgY2xpZW50RGF0YS5v
dXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lHTk9SRV9XQVJOSU5HU19F
TkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7Cit9CisKK3ZvaWQgSlNX
b3JrZXJHbG9iYWxTY29wZTo6YW5hbHl6ZUhlYXAoSlNDZWxsKiBjZWxsLCBIZWFwQW5hbHl6ZXIm
IGFuYWx5emVyKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXb3JrZXJHbG9i
YWxTY29wZSo+KGNlbGwpOworICAgIGFuYWx5emVyLnNldFdyYXBwZWRPYmplY3RGb3JDZWxsKGNl
bGwsICZ0aGlzT2JqZWN0LT53cmFwcGVkKCkpOworICAgIGlmICh0aGlzT2JqZWN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpCisgICAgICAgIGFuYWx5emVyLnNldExhYmVsRm9yQ2VsbChjZWxs
LCAidXJsICIgKyB0aGlzT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnVybCgpLnN0
cmluZygpKTsKKyAgICBCYXNlOjphbmFseXplSGVhcChjZWxsLCBhbmFseXplcik7Cit9CisKKyNp
ZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisjaWYgUExBVEZPUk0oV0lOKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6IDQ0ODMpCitleHRlcm4gIkMiIHsgZXh0ZXJuIHZvaWQgKCpjb25zdCBf
X2lkZW50aWZpZXIoIj8/XzdXb3JrZXJHbG9iYWxTY29wZUBXZWJDb3JlQEA2QkAiKVtdKSgpOyB9
CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRWTjdXZWJDb3JlMTdXb3JrZXJH
bG9iYWxTY29wZUVbXTsgfQorI2VuZGlmCisjZW5kaWYKKworSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxXb3JrZXJHbG9iYWxTY29wZT4mJiBpbXBsKQoreworCisjaWYgRU5BQkxFKEJJ
TkRJTkdfSU5URUdSSVRZKQorICAgIGNvbnN0IHZvaWQqIGFjdHVhbFZUYWJsZVBvaW50ZXIgPSBn
ZXRWVGFibGVQb2ludGVyKGltcGwucHRyKCkpOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICB2b2lk
KiBleHBlY3RlZFZUYWJsZVBvaW50ZXIgPSBfX2lkZW50aWZpZXIoIj8/XzdXb3JrZXJHbG9iYWxT
Y29wZUBXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisgICAgdm9pZCogZXhwZWN0ZWRWVGFibGVQb2lu
dGVyID0gJl9aVFZON1dlYkNvcmUxN1dvcmtlckdsb2JhbFNjb3BlRVsyXTsKKyNlbmRpZgorCisg
ICAgLy8gSWYgdGhpcyBmYWlscyBXb3JrZXJHbG9iYWxTY29wZSBkb2VzIG5vdCBoYXZlIGEgdnRh
YmxlLCBzbyB5b3UgbmVlZCB0byBhZGQgdGhlCisgICAgLy8gSW1wbGVtZW50YXRpb25MYWNrc1ZU
YWJsZSBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBkZWZpbml0aW9uCisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3BvbHltb3JwaGljPFdvcmtlckdsb2JhbFNjb3BlPjo6dmFsdWUsICJXb3Jr
ZXJHbG9iYWxTY29wZSBpcyBub3QgcG9seW1vcnBoaWMiKTsKKworICAgIC8vIElmIHlvdSBoaXQg
dGhpcyBhc3NlcnRpb24geW91IGVpdGhlciBoYXZlIGEgdXNlIGFmdGVyIGZyZWUgYnVnLCBvcgor
ICAgIC8vIFdvcmtlckdsb2JhbFNjb3BlIGhhcyBzdWJjbGFzc2VzLiBJZiBXb3JrZXJHbG9iYWxT
Y29wZSBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBwYXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2Ug
Y3VycmVudGx5IHJlcXVpcmUgV29ya2VyR2xvYmFsU2NvcGUgeW91IHRvIG9wdCBvdXQgb2YgYmlu
ZGluZyBoYXJkZW5pbmcKKyAgICAvLyBieSBhZGRpbmcgdGhlIFNraXBWVGFibGVWYWxpZGF0aW9u
IGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIElETCBkZWZpbml0aW9uCisgICAgUkVMRUFTRV9B
U1NFUlQoYWN0dWFsVlRhYmxlUG9pbnRlciA9PSBleHBlY3RlZFZUYWJsZVBvaW50ZXIpOworI2Vu
ZGlmCisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8V29ya2VyR2xvYmFsU2NvcGU+KGdsb2JhbE9i
amVjdCwgV1RGTW92ZShpbXBsKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFdvcmtlckdsb2JhbFNjb3BlJiBpbXBsKQoreworICAgIHJldHVybiB3cmFwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgaW1wbCk7Cit9CisKK1dvcmtlckdsb2JhbFNj
b3BlKiBKU1dvcmtlckdsb2JhbFNjb3BlOjp0b1dyYXBwZWQoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Nhc3Q8SlNX
b3JrZXJHbG9iYWxTY29wZSo+KHZtLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+
d3JhcHBlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFs
U2NvcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NDVkYjRjMjdmMGZhNGM2YmUwMmQ5ZTlmYTYxMjQzMTc3MDQz
NmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGUuaApAQCAtMCwwICsxLDExNCBAQAorLyoKKyAgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAg
VGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8g
Tk9UIE1PRElGWSEKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5o
IgorI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKKworY2xhc3MgSlNXb3JrZXJHbG9iYWxTY29wZSA6IHB1
YmxpYyBKU0V2ZW50VGFyZ2V0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNFdmVudFRh
cmdldDsKKyAgICB1c2luZyBET01XcmFwcGVkID0gV29ya2VyR2xvYmFsU2NvcGU7CisgICAgc3Rh
dGljIEpTV29ya2VyR2xvYmFsU2NvcGUqIGNyZWF0ZShKU0M6OlZNJiB2bSwgSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUmVmPFdvcmtlckdsb2JhbFNjb3BlPiYmIGltcGwsIEpTQzo6SlNQcm94
eSogcHJveHkpCisgICAgeworICAgICAgICBKU1dvcmtlckdsb2JhbFNjb3BlKiBwdHIgPSBuZXcg
KE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTV29ya2VyR2xvYmFsU2NvcGU+KHZtLmhlYXAp
KSBKU1dvcmtlckdsb2JhbFNjb3BlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoaW1wbCkpOworICAg
ICAgICBwdHItPmZpbmlzaENyZWF0aW9uKHZtLCBwcm94eSk7CisgICAgICAgIHJldHVybiBwdHI7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogcHJv
dG90eXBlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBXb3JrZXJH
bG9iYWxTY29wZSogdG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2Jh
bE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBj
b25zdCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6
U3Vic3BhY2VBY2Nlc3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9y
KEpTQzo6Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6
U3Vic3BhY2VBY2Nlc3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGlj
IEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3Rh
dGljIHZvaWQgYW5hbHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBX
b3JrZXJHbG9iYWxTY29wZSYgd3JhcHBlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V29ya2VyR2xvYmFsU2NvcGUmPihCYXNlOjp3cmFwcGVkKCkpOworICAgIH0K
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6Okhhc1N0YXRpY1Byb3BlcnR5VGFibGU7Citwcm90
ZWN0ZWQ6CisgICAgSlNXb3JrZXJHbG9iYWxTY29wZShKU0M6OlZNJiwgSlNDOjpTdHJ1Y3R1cmUq
LCBSZWY8V29ya2VyR2xvYmFsU2NvcGU+JiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlND
OjpWTSYsIEpTQzo6SlNQcm94eSopOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgV29ya2VyR2xvYmFsU2NvcGUmKTsKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXb3JrZXJHbG9iYWxTY29w
ZSogaW1wbCkgeyByZXR1cm4gaW1wbCA/IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCAqaW1wbCkgOiBKU0M6OmpzTnVsbCgpOyB9CitKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8V29y
a2VyR2xvYmFsU2NvcGU+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxXb3JrZXJHbG9iYWxTY29wZT4mJiBpbXBsKSB7IHJl
dHVybiBpbXBsID8gdG9KU05ld2x5Q3JlYXRlZChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsIGltcGwucmVsZWFzZU5vbk51bGwoKSkgOiBKU0M6OmpzTnVsbCgpOyB9CisKK2NsYXNz
IEpTV29ya2VyR2xvYmFsU2NvcGVQcm90b3R5cGUgZmluYWwgOiBwdWJsaWMgSlNDOjpKU05vbkZp
bmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNDOjpKU05vbkZpbmFsT2Jq
ZWN0OworICAgIHN0YXRpYyBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKiBjcmVhdGUoSlND
OjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBl
KiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6YWxsb2NhdGVDZWxsPEpTV29ya2VyR2xvYmFsU2Nv
cGVQcm90b3R5cGU+KHZtLmhlYXApKSBKU1dvcmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKHZtLCBn
bG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAgICBzdGF0
aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAgeworICAg
ICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1dvcmtlckdsb2JhbFNj
b3BlUHJvdG90eXBlLCBCYXNlKTsKKyAgICAgICAgcmV0dXJuICZ2bS5wbGFpbk9iamVjdFNwYWNl
OworICAgIH0KKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU1dv
cmtlckdsb2JhbFNjb3BlUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiwgSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBKU0M6OkpTTm9uRmluYWxP
YmplY3Qodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0M6OlZNJik7Cit9OworU1RBVElDX0FTU0VSVF9JU09fU1VCU1BBQ0VfU0hBUkFCTEUo
SlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlwZSwgSlNXb3JrZXJHbG9iYWxTY29wZVByb3RvdHlw
ZTo6QmFzZSk7CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxXb3JrZXJHbG9iYWxTY29wZT4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTV29ya2Vy
R2xvYmFsU2NvcGU7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFdvcmtlckdsb2Jh
bFNjb3BlKjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlQ29u
c3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzc4ZDhkNzNi
MWJmZTczMjU4Y2E0ZTZlMGJlMmM0N2M3ZTQ3ZGRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJh
dGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5oIGFuZAorICAgIEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3Bw
IGFyZSBjcmVhdGVkIGZvciBXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwsIGFuZCB0
aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0
ZSBKU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNXb3JrZXJHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5v
dCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxT
Y29wZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjNzhkOGQ3M2IxYmZlNzMyNThjYTRlNmUw
YmUyYzQ3YzdlNDdkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oCkBAIC0w
LDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBi
dWlsZCBzY3JpcHRzIHRoYXQgSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGFuZAor
ICAgIEpTV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZvciBX
b3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0
aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0byBnZW5lcmF0ZSBKU1dvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9y
cy5jcHAgYXQgZXZlcnkgYnVpbGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21w
aWxlLgorKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyZWI4
YzliZmU5NTZmNGRiYzczMjAyYTFmNDI4Y2I1ZWZiZjg2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2Nv
cGUuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgb3BlbiBzb3VyY2UgcHJvamVjdC4KKyAgICBUaGlzIGZpbGUgaGFzIGJlZW4gZ2Vu
ZXJhdGVkIGJ5IGdlbmVyYXRlLWJpbmRpbmdzLnBsLiBETyBOT1QgTU9ESUZZIQorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dvcmtsZXRHbG9iYWxTY29wZS5oIgorCisjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiRE9NSXNvU3Vic3BhY2VzLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5j
bHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5oIgorI2luY2x1ZGUgIldvcmts
ZXRHbG9iYWxTY29wZS5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hlYXBBbmFseXplci5o
PgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZS5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1N1YnNwYWNlSW5saW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlclByZXBhcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9V
UkwuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCisv
LyBBdHRyaWJ1dGVzCisKK0pTQzo6RW5jb2RlZEpTVmFsdWUganNXb3JrbGV0R2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcihKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOworYm9vbCBzZXRKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9y
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlKTsKKwordXNpbmcgSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvciA9IEpTRE9N
Q29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTV29ya2xldEdsb2JhbFNjb3BlPjsKKwordGVt
cGxhdGU8PiBKU1ZhbHVlIEpTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3I6OnByb3RvdHlw
ZUZvclN0cnVjdHVyZShKU0M6OlZNJiB2bSwgY29uc3QgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNFdmVudFRhcmdldDo6Z2V0Q29uc3RydWN0b3Iodm0s
ICZnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVDb25zdHJ1Y3Rvcjo6aW5pdGlhbGl6ZVByb3BlcnRpZXMoVk0mIHZtLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+cHJvdG90eXBlLCBKU1dvcmtsZXRHbG9iYWxTY29wZTo6cHJvdG90eXBlKHZtLCBnbG9iYWxP
YmplY3QpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgSlNDOjpQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7
CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBqc05vbnRyaXZpYWxT
dHJpbmcodm0sICJXb3JrbGV0R2xvYmFsU2NvcGUiX3MpLCBKU0M6OlByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIoMCksIEpTQzo6UHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0pOworfQorCit0ZW1wbGF0ZTw+IGNvbnN0IENsYXNzSW5mbyBKU1dvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXb3JrbGV0R2xvYmFsU2NvcGUiLCAmQmFzZTo6c19p
bmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV29ya2xldEdsb2Jh
bFNjb3BlQ29uc3RydWN0b3IpIH07CisKKy8qIEhhc2ggdGFibGUgZm9yIHByb3RvdHlwZSAqLwor
CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggSlNXb3JrbGV0R2xvYmFsU2Nv
cGVQcm90b3R5cGVUYWJsZUluZGV4WzJdID0geworICAgIHsgLTEsIC0xIH0sCisgICAgeyAwLCAt
MSB9LAorfTsKKworCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNXb3JrbGV0R2xvYmFs
U2NvcGVQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KK3sKKyAgICB7ICJjb25zdHJ1Y3RvciIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSksIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvciksIChpbnRwdHJfdCkgc3RhdGlj
X2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNldEpTV29ya2xldEdsb2JhbFNj
b3BlQ29uc3RydWN0b3IpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNXb3Jr
bGV0R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZSA9IHsgMSwgMSwgdHJ1ZSwgSlNXb3JrbGV0R2xv
YmFsU2NvcGU6OmluZm8oKSwgSlNXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZhbHVl
cywgSlNXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZUluZGV4IH07Citjb25zdCBDbGFz
c0luZm8gSlNXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGU6OnNfaW5mbyA9IHsgIldvcmtsZXRH
bG9iYWxTY29wZSIsICZCYXNlOjpzX2luZm8sICZKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlw
ZVRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV29ya2xldEdsb2JhbFNjb3Bl
UHJvdG90eXBlKSB9OworCit2b2lkIEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IHJlaWZ5U3RhdGljUHJvcGVydGllcyh2bSwgSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmluZm8oKSwg
SlNXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGVUYWJsZVZhbHVlcywgKnRoaXMpOworICAgIEpT
Q19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpOworfQorCitjb25zdCBDbGFzc0lu
Zm8gSlNXb3JrbGV0R2xvYmFsU2NvcGU6OnNfaW5mbyA9IHsgIldvcmtsZXRHbG9iYWxTY29wZSIs
ICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNX
b3JrbGV0R2xvYmFsU2NvcGUpIH07CisKK0pTV29ya2xldEdsb2JhbFNjb3BlOjpKU1dvcmtsZXRH
bG9iYWxTY29wZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V29ya2xldEdsb2Jh
bFNjb3BlPiYmIGltcGwpCisgICAgOiBKU0V2ZW50VGFyZ2V0KHZtLCBzdHJ1Y3R1cmUsIFdURk1v
dmUoaW1wbCkpCit7Cit9CisKK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNQcm94eSogcHJveHkpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0sIHByb3h5KTsKKworICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfYmFzZV9vZjxBY3RpdmVE
T01PYmplY3QsIFdvcmtsZXRHbG9iYWxTY29wZT46OnZhbHVlLCAiSW50ZXJmYWNlIGlzIG5vdCBt
YXJrZWQgYXMgW0FjdGl2ZURPTU9iamVjdF0gZXZlbiB0aG91Z2ggaW1wbGVtZW50YXRpb24gY2xh
c3Mgc3ViY2xhc3NlcyBBY3RpdmVET01PYmplY3QuIik7CisKK30KKworSlNPYmplY3QqIEpTV29y
a2xldEdsb2JhbFNjb3BlOjpjcmVhdGVQcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3Rv
dHlwZTo6Y3JlYXRlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBKU0V2ZW50VGFyZ2V0Ojpw
cm90b3R5cGUodm0sIGdsb2JhbE9iamVjdCkpKTsKK30KKworSlNPYmplY3QqIEpTV29ya2xldEds
b2JhbFNjb3BlOjpwcm90b3R5cGUoVk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5cGU8SlNXb3JrbGV0R2xvYmFsU2NvcGU+
KHZtLCBnbG9iYWxPYmplY3QpOworfQorCitKU1ZhbHVlIEpTV29ya2xldEdsb2JhbFNjb3BlOjpn
ZXRDb25zdHJ1Y3RvcihWTSYgdm0sIGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTV29ya2xldEdsb2JhbFNjb3BlQ29u
c3RydWN0b3I+KHZtLCAqanNDYXN0PGNvbnN0IEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2Jq
ZWN0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIGpzV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0
b3IoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAgIFZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CisgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byogcHJvdG90eXBlID0ganNEeW5hbWljQ2FzdDxKU1dvcmtsZXRHbG9i
YWxTY29wZVByb3RvdHlwZSo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
aWYgKFVOTElLRUxZKCFwcm90b3R5cGUpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTV29ya2xldEdsb2JhbFNjb3BlOjpnZXRDb25zdHJ1Y3RvcihKU0M6OmdldFZNKGxl
eGljYWxHbG9iYWxPYmplY3QpLCBwcm90b3R5cGUtPmdsb2JhbE9iamVjdCgpKSk7Cit9CisKK2Jv
b2wgc2V0SlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcihKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICBhdXRvKiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTV29ya2xldEdsb2JhbFNjb3Bl
UHJvdG90eXBlKj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBpZiAoVU5M
SUtFTFkoIXByb3RvdHlwZSkpIHsKKyAgICAgICAgdGhyb3dWTVR5cGVFcnJvcihsZXhpY2FsR2xv
YmFsT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBTaGFkb3dpbmcgYSBidWlsdC1pbiBjb25zdHJ1Y3RvcgorICAgIHJldHVybiBwcm90b3R5
cGUtPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKworSlNDOjpJc29TdWJzcGFjZSogSlNXb3JrbGV0
R2xvYmFsU2NvcGU6OnN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSkKK3sKKyAgICBhdXRvJiBj
bGllbnREYXRhID0gKnN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7
CisgICAgYXV0byYgc3BhY2VzID0gY2xpZW50RGF0YS5zdWJzcGFjZXMoKTsKKyAgICBpZiAoYXV0
byogc3BhY2UgPSBzcGFjZXMubV9zdWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKSkK
KyAgICAgICAgcmV0dXJuIHNwYWNlOworICAgIHNwYWNlcy5tX3N1YnNwYWNlRm9yV29ya2xldEds
b2JhbFNjb3BlID0gbWFrZVVuaXF1ZTxJc29TdWJzcGFjZT4gSVNPX1NVQlNQQUNFX0lOSVQodm0u
aGVhcCwgY2xpZW50RGF0YS5tX2hlYXBDZWxsVHlwZUZvckpTV29ya2xldEdsb2JhbFNjb3BlLmdl
dCgpLCBKU1dvcmtsZXRHbG9iYWxTY29wZSk7CisgICAgYXV0byogc3BhY2UgPSBzcGFjZXMubV9z
dWJzcGFjZUZvcldvcmtsZXRHbG9iYWxTY29wZS5nZXQoKTsKK0lHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5yZWFjaGFibGUtY29kZSIpCitJR05PUkVfV0FSTklOR1NfQkVHSU4oInRhdXRvbG9naWNh
bC1jb21wYXJlIikKKyAgICBpZiAoJkpTV29ya2xldEdsb2JhbFNjb3BlOjp2aXNpdE91dHB1dENv
bnN0cmFpbnRzICE9ICZKU0M6OkpTQ2VsbDo6dmlzaXRPdXRwdXRDb25zdHJhaW50cykKKyAgICAg
ICAgY2xpZW50RGF0YS5vdXRwdXRDb25zdHJhaW50U3BhY2VzKCkuYXBwZW5kKHNwYWNlKTsKK0lH
Tk9SRV9XQVJOSU5HU19FTkQKK0lHTk9SRV9XQVJOSU5HU19FTkQKKyAgICByZXR1cm4gc3BhY2U7
Cit9CisKK3ZvaWQgSlNXb3JrbGV0R2xvYmFsU2NvcGU6OmFuYWx5emVIZWFwKEpTQ2VsbCogY2Vs
bCwgSGVhcEFuYWx5emVyJiBhbmFseXplcikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTV29ya2xldEdsb2JhbFNjb3BlKj4oY2VsbCk7CisgICAgYW5hbHl6ZXIuc2V0V3JhcHBl
ZE9iamVjdEZvckNlbGwoY2VsbCwgJnRoaXNPYmplY3QtPndyYXBwZWQoKSk7CisgICAgaWYgKHRo
aXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAgICAgYW5hbHl6ZXIuc2V0
TGFiZWxGb3JDZWxsKGNlbGwsICJ1cmwgIiArIHRoaXNPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIEJhc2U6OmFuYWx5emVIZWFwKGNlbGwsIGFu
YWx5emVyKTsKK30KKworI2lmIEVOQUJMRShCSU5ESU5HX0lOVEVHUklUWSkKKyNpZiBQTEFURk9S
TShXSU4pCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDQ4MykKK2V4dGVybiAiQyIgeyBleHRl
cm4gdm9pZCAoKmNvbnN0IF9faWRlbnRpZmllcigiPz9fN1dvcmtsZXRHbG9iYWxTY29wZUBXZWJD
b3JlQEA2QkAiKVtdKSgpOyB9CisjZWxzZQorZXh0ZXJuICJDIiB7IGV4dGVybiB2b2lkKiBfWlRW
TjdXZWJDb3JlMThXb3JrbGV0R2xvYmFsU2NvcGVFW107IH0KKyNlbmRpZgorI2VuZGlmCisKK0pT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8V29ya2xldEdsb2JhbFNjb3BlPiYmIGltcGwp
Cit7CisKKyNpZiBFTkFCTEUoQklORElOR19JTlRFR1JJVFkpCisgICAgY29uc3Qgdm9pZCogYWN0
dWFsVlRhYmxlUG9pbnRlciA9IGdldFZUYWJsZVBvaW50ZXIoaW1wbC5wdHIoKSk7CisjaWYgUExB
VEZPUk0oV0lOKQorICAgIHZvaWQqIGV4cGVjdGVkVlRhYmxlUG9pbnRlciA9IF9faWRlbnRpZmll
cigiPz9fN1dvcmtsZXRHbG9iYWxTY29wZUBXZWJDb3JlQEA2QkAiKTsKKyNlbHNlCisgICAgdm9p
ZCogZXhwZWN0ZWRWVGFibGVQb2ludGVyID0gJl9aVFZON1dlYkNvcmUxOFdvcmtsZXRHbG9iYWxT
Y29wZUVbMl07CisjZW5kaWYKKworICAgIC8vIElmIHRoaXMgZmFpbHMgV29ya2xldEdsb2JhbFNj
b3BlIGRvZXMgbm90IGhhdmUgYSB2dGFibGUsIHNvIHlvdSBuZWVkIHRvIGFkZCB0aGUKKyAgICAv
LyBJbXBsZW1lbnRhdGlvbkxhY2tzVlRhYmxlIGF0dHJpYnV0ZSB0byB0aGUgaW50ZXJmYWNlIGRl
ZmluaXRpb24KKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcG9seW1vcnBoaWM8V29ya2xldEds
b2JhbFNjb3BlPjo6dmFsdWUsICJXb3JrbGV0R2xvYmFsU2NvcGUgaXMgbm90IHBvbHltb3JwaGlj
Iik7CisKKyAgICAvLyBJZiB5b3UgaGl0IHRoaXMgYXNzZXJ0aW9uIHlvdSBlaXRoZXIgaGF2ZSBh
IHVzZSBhZnRlciBmcmVlIGJ1Zywgb3IKKyAgICAvLyBXb3JrbGV0R2xvYmFsU2NvcGUgaGFzIHN1
YmNsYXNzZXMuIElmIFdvcmtsZXRHbG9iYWxTY29wZSBoYXMgc3ViY2xhc3NlcyB0aGF0IGdldCBw
YXNzZWQKKyAgICAvLyB0byB0b0pTKCkgd2UgY3VycmVudGx5IHJlcXVpcmUgV29ya2xldEdsb2Jh
bFNjb3BlIHlvdSB0byBvcHQgb3V0IG9mIGJpbmRpbmcgaGFyZGVuaW5nCisgICAgLy8gYnkgYWRk
aW5nIHRoZSBTa2lwVlRhYmxlVmFsaWRhdGlvbiBhdHRyaWJ1dGUgdG8gdGhlIGludGVyZmFjZSBJ
REwgZGVmaW5pdGlvbgorICAgIFJFTEVBU0VfQVNTRVJUKGFjdHVhbFZUYWJsZVBvaW50ZXIgPT0g
ZXhwZWN0ZWRWVGFibGVQb2ludGVyKTsKKyNlbmRpZgorICAgIHJldHVybiBjcmVhdGVXcmFwcGVy
PFdvcmtsZXRHbG9iYWxTY29wZT4oZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGltcGwpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV29ya2xldEdsb2JhbFNjb3BlJiBp
bXBsKQoreworICAgIHJldHVybiB3cmFwKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dCwgaW1wbCk7Cit9CisKK1dvcmtsZXRHbG9iYWxTY29wZSogSlNXb3JrbGV0R2xvYmFsU2NvcGU6
OnRvV3JhcHBlZChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmIChh
dXRvKiB3cmFwcGVyID0ganNEeW5hbWljQ2FzdDxKU1dvcmtsZXRHbG9iYWxTY29wZSo+KHZtLCB2
YWx1ZSkpCisgICAgICAgIHJldHVybiAmd3JhcHBlci0+d3JhcHBlZCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFsU2NvcGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxTY29wZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRi
ZjhmYWM5YjEyOGI1MDg3ZTkzYzM3MjI2OGU3OGMxNGZlYjRmZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0R2xvYmFs
U2NvcGUuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgV2ViS2l0IG9wZW4gc291cmNlIHByb2plY3QuCisgICAgVGhpcyBmaWxlIGhhcyBiZWVuIGdl
bmVyYXRlZCBieSBnZW5lcmF0ZS1iaW5kaW5ncy5wbC4gRE8gTk9UIE1PRElGWSEKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTRXZlbnRU
YXJnZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXb3JrbGV0R2xvYmFsU2Nv
cGU7CisKK2NsYXNzIEpTV29ya2xldEdsb2JhbFNjb3BlIDogcHVibGljIEpTRXZlbnRUYXJnZXQg
eworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0V2ZW50VGFyZ2V0OworICAgIHVzaW5nIERP
TVdyYXBwZWQgPSBXb3JrbGV0R2xvYmFsU2NvcGU7CisgICAgc3RhdGljIEpTV29ya2xldEdsb2Jh
bFNjb3BlKiBjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFJl
ZjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYgaW1wbCwgSlNDOjpKU1Byb3h5KiBwcm94eSkKKyAgICB7
CisgICAgICAgIEpTV29ya2xldEdsb2JhbFNjb3BlKiBwdHIgPSBuZXcgKE5vdE51bGwsIEpTQzo6
YWxsb2NhdGVDZWxsPEpTV29ya2xldEdsb2JhbFNjb3BlPih2bS5oZWFwKSkgSlNXb3JrbGV0R2xv
YmFsU2NvcGUodm0sIHN0cnVjdHVyZSwgV1RGTW92ZShpbXBsKSk7CisgICAgICAgIHB0ci0+Zmlu
aXNoQ3JlYXRpb24odm0sIHByb3h5KTsKKyAgICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOworICAgIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBwcm90b3R5cGUoSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIFdvcmtsZXRHbG9iYWxTY29wZSog
dG9XcmFwcGVkKEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCisgICAgREVDTEFSRV9JTkZPOwor
CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0s
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Okdsb2JhbE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpLCBKU0M6Ok5vbkFycmF5KTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGdldENvbnN0cnVjdG9yKEpTQzo6Vk0mLCBjb25zdCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIEpTQzo6U3Vic3BhY2VBY2Nl
c3MgbW9kZT4gc3RhdGljIEpTQzo6SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKEpTQzo6Vk0mIHZt
KQorICAgIHsKKyAgICAgICAgaWYgY29uc3RleHByIChtb2RlID09IEpTQzo6U3Vic3BhY2VBY2Nl
c3M6OkNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3Vic3BhY2VGb3JJbXBsKHZtKTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6SXNvU3Vi
c3BhY2UqIHN1YnNwYWNlRm9ySW1wbChKU0M6OlZNJiB2bSk7CisgICAgc3RhdGljIHZvaWQgYW5h
bHl6ZUhlYXAoSlNDZWxsKiwgSlNDOjpIZWFwQW5hbHl6ZXImKTsKKyAgICBXb3JrbGV0R2xvYmFs
U2NvcGUmIHdyYXBwZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdvcmtsZXRHbG9iYWxTY29wZSY+KEJhc2U6OndyYXBwZWQoKSk7CisgICAgfQorcHJvdGVjdGVk
OgorICAgIEpTV29ya2xldEdsb2JhbFNjb3BlKEpTQzo6Vk0mLCBKU0M6OlN0cnVjdHVyZSosIFJl
ZjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNDOjpW
TSYsIEpTQzo6SlNQcm94eSopOworfTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiwgV29ya2xldEdsb2JhbFNjb3BlJik7Citpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV29ya2xldEdsb2JhbFNjb3Bl
KiBpbXBsKSB7IHJldHVybiBpbXBsID8gdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsICppbXBsKSA6IEpTQzo6anNOdWxsKCk7IH0KK0pTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxXb3Jr
bGV0R2xvYmFsU2NvcGU+JiYpOworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxXb3JrbGV0R2xvYmFsU2NvcGU+JiYgaW1wbCkgeyBy
ZXR1cm4gaW1wbCA/IHRvSlNOZXdseUNyZWF0ZWQobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBpbXBsLnJlbGVhc2VOb25OdWxsKCkpIDogSlNDOjpqc051bGwoKTsgfQorCitjbGFz
cyBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSBmaW5hbCA6IHB1YmxpYyBKU0M6OkpTTm9u
RmluYWxPYmplY3QgeworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0M6OkpTTm9uRmluYWxP
YmplY3Q7CisgICAgc3RhdGljIEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBlKiBjcmVhdGUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBKU1dvcmtsZXRHbG9iYWxTY29wZVByb3Rv
dHlwZSogcHRyID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxKU1dvcmtsZXRHbG9i
YWxTY29wZVByb3RvdHlwZT4odm0uaGVhcCkpIEpTV29ya2xldEdsb2JhbFNjb3BlUHJvdG90eXBl
KHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7CisgICAgICAgIHB0ci0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgSlNDOjpTdWJzcGFjZUFjY2Vzcz4KKyAg
ICBzdGF0aWMgSlNDOjpJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoSlNDOjpWTSYgdm0pCisgICAg
eworICAgICAgICBTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9TSEFSQUJMRShKU1dvcmtsZXRH
bG9iYWxTY29wZVByb3RvdHlwZSwgQmFzZSk7CisgICAgICAgIHJldHVybiAmdm0ucGxhaW5PYmpl
Y3RTcGFjZTsKKyAgICB9CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNXb3JrbGV0R2xvYmFsU2NvcGVQcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEpTQzo6SlNO
b25GaW5hbE9iamVjdCh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKEpTQzo6Vk0mKTsKK307CitTVEFUSUNfQVNTRVJUX0lTT19TVUJTUEFDRV9T
SEFSQUJMRShKU1dvcmtsZXRHbG9iYWxTY29wZVByb3RvdHlwZSwgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVQcm90b3R5cGU6OkJhc2UpOworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8V29ya2xldEdsb2JhbFNjb3BlPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNXb3JrbGV0R2xvYmFsU2NvcGU7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFdvcmtsZXRHbG9iYWxTY29wZSo7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNXb3JrbGV0
R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hYjYwNGRhNWI4YTc2NDViMjA0N2E4OGZhNWFkYjIxZGY2ZjdhZWI1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTV29ya2xl
dEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcApAQCAtMCwwICsxLDYgQEAKKy8qCisgICAgVGhp
cyBmaWxlIGlzIGdlbmVyYXRlZCBqdXN0IHRvIHRlbGwgYnVpbGQgc2NyaXB0cyB0aGF0IEpTV29y
a2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmggYW5kCisgICAgSlNXb3JrbGV0R2xvYmFsU2Nv
cGVDb25zdHJ1Y3RvcnMuY3BwIGFyZSBjcmVhdGVkIGZvciBXb3JrbGV0R2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaWRsLCBhbmQgdGh1cworICAgIHByZXZlbnQgdGhlIGJ1aWxkIHNjcmlwdHMgZnJv
bSB0cnlpbmcgdG8gZ2VuZXJhdGUgSlNXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaCBh
bmQKKyAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5jcHAgYXQgZXZlcnkgYnVp
bGQuIFRoaXMgZmlsZSBtdXN0IG5vdCBiZSB0cmllZCB0byBjb21waWxlLgorKi8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9i
YWxTY29wZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI2
MDRkYTViOGE3NjQ1YjIwNDdhODhmYTVhZGIyMWRmNmY3YWViNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1dvcmtsZXRHbG9iYWxT
Y29wZUNvbnN0cnVjdG9ycy5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAgICBUaGlzIGZpbGUgaXMg
Z2VuZXJhdGVkIGp1c3QgdG8gdGVsbCBidWlsZCBzY3JpcHRzIHRoYXQgSlNXb3JrbGV0R2xvYmFs
U2NvcGVDb25zdHJ1Y3RvcnMuaCBhbmQKKyAgICBKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVj
dG9ycy5jcHAgYXJlIGNyZWF0ZWQgZm9yIFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5p
ZGwsIGFuZCB0aHVzCisgICAgcHJldmVudCB0aGUgYnVpbGQgc2NyaXB0cyBmcm9tIHRyeWluZyB0
byBnZW5lcmF0ZSBKU1dvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5oIGFuZAorICAgIEpT
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmNwcCBhdCBldmVyeSBidWlsZC4gVGhpcyBm
aWxlIG11c3Qgbm90IGJlIHRyaWVkIHRvIGNvbXBpbGUuCisqLwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdvcmtsZXRHbG9i
YWxTY29wZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2FkOTBmMGZmMDhkNjUwMTE0MjY0MjdlMjkyM2FiMDgw
NGY5MDdhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9QYWludFdvcmtsZXRHbG9iYWxTY29wZS5pZGwKQEAgLTAsMCArMSwyIEBACitpbnRl
cmZhY2UgUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgOiBXb3JrbGV0R2xvYmFsU2NvcGUgeworfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9QYWludFdv
cmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU5Nzk4NTFkZTUzZGE1YjA2YjkxYWNkYmM2MDdlMGQ1NDgyMzM3ODIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvUGFpbnRX
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCkBAIC0wLDAgKzEsMiBAQAorcGFydGlh
bCBpbnRlcmZhY2UgUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUgeworfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1NlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjgwOTczZmY5NGM3YzRjMjk0NWJhMjNiYTg0
ZTYwOWRjMTgwNjM5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRsCkBAIC0wLDAgKzEsMiBA
QAoraW50ZXJmYWNlIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSA6IFdvcmtlckdsb2JhbFNjb3Bl
IHsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
U2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3Rv
cnMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQ5ODg1NDZlZDExNDlhZjAzZjVjMDE4ZjQ1ZDNkZGFiZjRiNDkw
NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbApAQCAtMCwwICsxLDIg
QEAKK3BhcnRpYWwgaW50ZXJmYWNlIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSB7Cit9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1N1cHBsZW1lbnRh
bERlcGVuZGVuY2llcy5kZXAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
U3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAppbmRleCAwYTZhNTQzNjg1ZWEzNDU0NDMwYjU5
ZGI1NTQ2ZjA4ZTg2MzViZWVhLi40MmJmYmIwODdhMWNjODdiMDNkMjYwNTAxNTczNzA1YWFkMTZj
ZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvU3Vw
cGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvU3VwcGxlbWVudGFsRGVwZW5kZW5jaWVzLmRlcApAQCAtMSw0ICsxLDIzIEBA
CiAjIFN1cHBsZW1lbnRhbCBkZXBlbmRlbmNpZXMKK0pTRE9NV2luZG93Lmg6IERPTVdpbmRvd0Nv
bnN0cnVjdG9ycy5pZGwKK0RPTURPTVdpbmRvdy5oOiBET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRs
CitXZWJET01ET01XaW5kb3cuaDogRE9NV2luZG93Q29uc3RydWN0b3JzLmlkbAorRE9NV2luZG93
Q29uc3RydWN0b3JzLmlkbDoKK0pTRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuaDogRGVkaWNh
dGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitET01EZWRpY2F0ZWRXb3JrZXJH
bG9iYWxTY29wZS5oOiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwK
K1dlYkRPTURlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmg6IERlZGljYXRlZFdvcmtlckdsb2Jh
bFNjb3BlQ29uc3RydWN0b3JzLmlkbAorRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1
Y3RvcnMuaWRsOgorSlNFeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaDogCitET01FeHBvc2VkVG9X
b3JrZXJBbmRXaW5kb3cuaDogCitXZWJET01FeHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3cuaDogCitK
U1BhaW50V29ya2xldEdsb2JhbFNjb3BlLmg6IFBhaW50V29ya2xldEdsb2JhbFNjb3BlQ29uc3Ry
dWN0b3JzLmlkbAorRE9NUGFpbnRXb3JrbGV0R2xvYmFsU2NvcGUuaDogUGFpbnRXb3JrbGV0R2xv
YmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitXZWJET01QYWludFdvcmtsZXRHbG9iYWxTY29wZS5o
OiBQYWludFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKK1BhaW50V29ya2xldEds
b2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbDoKK0pTU2VydmljZVdvcmtlckdsb2JhbFNjb3BlLmg6
IFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKK0RPTVNlcnZpY2VXb3Jr
ZXJHbG9iYWxTY29wZS5oOiBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRs
CitXZWJET01TZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaDogU2VydmljZVdvcmtlckdsb2JhbFNj
b3BlQ29uc3RydWN0b3JzLmlkbAorU2VydmljZVdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmlkbDoKIEpTVGVzdENFUmVhY3Rpb25zLmg6IAogRE9NVGVzdENFUmVhY3Rpb25zLmg6IAogV2Vi
RE9NVGVzdENFUmVhY3Rpb25zLmg6IApAQCAtMTYxLDkgKzE4MCw2IEBAIEpTVGVzdE9wZXJhdGlv
bkNvbmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbAogRE9NVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbAogV2ViRE9NVGVzdE9wZXJhdGlvbkNv
bmRpdGlvbmFsLmg6IFRlc3RPcGVyYXRpb25CYXNlLmlkbAogVGVzdE9wZXJhdGlvbkJhc2UuaWRs
OgotSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oOiAKLURPTVRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzLmg6IAotV2ViRE9NVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDogCiBKU1Rl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmg6IAogRE9NVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuaDogCiBXZWJET01UZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9yc1dpdGhTZXF1ZW5jZS5oOiAKQEAgLTIzNyw2ICsyNTMsMTQgQEAgV2ViRE9NVGVzdFR5
cGVkZWZzLmg6CiBKU1Rlc3RWb2lkQ2FsbGJhY2tGdW5jdGlvbi5oOiAKIERPTVRlc3RWb2lkQ2Fs
bGJhY2tGdW5jdGlvbi5oOiAKIFdlYkRPTVRlc3RWb2lkQ2FsbGJhY2tGdW5jdGlvbi5oOiAKK0pT
V29ya2VyR2xvYmFsU2NvcGUuaDogV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitE
T01Xb3JrZXJHbG9iYWxTY29wZS5oOiBXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwK
K1dlYkRPTVdvcmtlckdsb2JhbFNjb3BlLmg6IFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3Jz
LmlkbAorV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsOgorSlNXb3JrbGV0R2xvYmFs
U2NvcGUuaDogV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbAorRE9NV29ya2xldEds
b2JhbFNjb3BlLmg6IFdvcmtsZXRHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwKK1dlYkRPTVdv
cmtsZXRHbG9iYWxTY29wZS5oOiBXb3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCitX
b3JrbGV0R2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsOgogIyBEaWN0aW9uYXJpZXMgZGVwZW5k
ZW5jaWVzCiBKU1Rlc3REZXJpdmVkRGljdGlvbmFyeS5jcHA6IFRlc3RJbmhlcml0ZWREaWN0aW9u
YXJ5LmlkbAogSlNUZXN0RGVyaXZlZERpY3Rpb25hcnkyLmNwcDogVGVzdEluaGVyaXRlZERpY3Rp
b25hcnkuaWRsIFRlc3RJbmhlcml0ZWREaWN0aW9uYXJ5Mi5pZGwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrZXJHbG9iYWxTY29wZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvV29ya2VyR2xvYmFsU2NvcGUuaWRs
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmJmMzg3ZTk3NjQzNTkxYzMzYzM2MzIzMWJjYjVmNzYwMGRmMWRiYzkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvV29y
a2VyR2xvYmFsU2NvcGUuaWRsCkBAIC0wLDAgKzEsMiBAQAoraW50ZXJmYWNlIFdvcmtlckdsb2Jh
bFNjb3BlIDogRXZlbnRUYXJnZXQgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9Xb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvV29ya2VyR2xvYmFsU2NvcGVDb25z
dHJ1Y3RvcnMuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2OGNhOWRiYzZmMTBiYjUzMGYyMjY3MzA0ZTFlNjdl
OTIwOGE5NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsCkBAIC0wLDAgKzEsNiBA
QAorcGFydGlhbCBpbnRlcmZhY2UgV29ya2VyR2xvYmFsU2NvcGUgeworICAgIGF0dHJpYnV0ZSBF
eHBvc2VkVG9Xb3JrZXJBbmRXaW5kb3dDb25zdHJ1Y3RvciBFeHBvc2VkVG9Xb3JrZXJBbmRXaW5k
b3c7CisgICAgYXR0cmlidXRlIFRlc3ROb2RlQ29uc3RydWN0b3IgVGVzdE5vZGU7CisgICAgYXR0
cmlidXRlIFRlc3RPYmpDb25zdHJ1Y3RvciBUZXN0T2JqZWN0OworICAgIGF0dHJpYnV0ZSBUZXN0
UHJvbWlzZVJlamVjdGlvbkV2ZW50Q29uc3RydWN0b3IgVGVzdFByb21pc2VSZWplY3Rpb25FdmVu
dDsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
V29ya2xldEdsb2JhbFNjb3BlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9Xb3JrbGV0R2xvYmFsU2NvcGUuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0NTNmZTg0MGFmNTJjZDUw
NmJiYjY2MjZhMmE2ZTgwYzNjNzVhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvV29ya2xldEdsb2JhbFNjb3BlLmlkbApAQCAtMCwwICsx
LDIgQEAKK2ludGVyZmFjZSBXb3JrbGV0R2xvYmFsU2NvcGUgOiBFdmVudFRhcmdldCB7Cit9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
OWFjNzBhOWRjYjcyNGQ2YTQxZTlhODRmMWM5NDg2ZWVlMzFiOTExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1dvcmtsZXRHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5pZGwKQEAgLTAsMCArMSwyIEBACitwYXJ0aWFsIGludGVyZmFjZSBXb3Jr
bGV0R2xvYmFsU2NvcGUgeworfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UZXh0
RW5jb2Rlci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVGV4dEVuY29kZXIuaWRsCmluZGV4IGVi
MmRmNzFjMzU0MTY4OTk2OTY5NGI2ZDFhYTJkYTU0Nzg4MTkyY2EuLjkzNmZmNDkxMjMyZTk4OTMz
MTJjMjczN2Y4MTlmNWUzMjA2MWZlZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9U
ZXh0RW5jb2Rlci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1RleHRFbmNvZGVyLmlkbApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyAr
MjQsNiBAQAogKi8KIAogWwotICAgIEV4cG9zZWQ9KFdpbmRvdyxXb3JrZXIpLAogICAgIEpTR2Vu
ZXJhdGVUb0pTT2JqZWN0CiBdIGRpY3Rpb25hcnkgVGV4dEVuY29kZXJFbmNvZGVJbnRvUmVzdWx0
IHsKICAgdW5zaWduZWQgbG9uZyBsb25nIHJlYWQ7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjUyMmU0OTVmOGExOTcxZTk1MzgzMzVkNDgyZmI2
ZDgyYjVmZjc4ZC4uNDU2Nzc2MjhjMDk0MDZhYzU4M2I5ZjNkOWM4MjY1NGMwYzA0OWM3NyAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE3IEBACisyMDIwLTA5LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBCaW5kaW5nIGdlbmVyYXRvciBpcyBub3QgYWx3YXlzIGNvbXB1dGluZyB0aGUgcmln
aHQgaW50ZXJmYWNlIGF0dHJpYnV0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNjE3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IHRvIHZhbGlkYXRlIGdsb2JhbCBjb25zdHJ1Y3Rv
ciBpZGwgZmlsZSBnZW5lcmF0b3IuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2JpbmRp
bmdzL21haW4ucHk6CisgICAgICAgIChCaW5kaW5nc1Rlc3RzLmdlbmVyYXRlX2Zyb21faWRsKToK
KyAgICAgICAgKEJpbmRpbmdzVGVzdHMuZ2VuZXJhdGVfc3VwcGxlbWVudGFsX2RlcGVuZGVuY3kp
OgorICAgICAgICAoQmluZGluZ3NUZXN0cy5tYWluKToKKwogMjAyMC0wOS0wMyAgSmFtZXMgRGFy
cGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRlIEphbWVz
IERhcnBpbmlhbidzIHN0YXR1cyB0byBjb21taXR0ZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvYmluZGluZ3MvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvYmlu
ZGluZ3MvbWFpbi5weQppbmRleCBhMDc4YjhjOTYxYWVjODE3NjAyM2EwZTIwMWVhN2ZkMzZmYmRh
YjBlLi5iZWYzMmM3Mjk4MDJkYjYzYzdjMzhjZWMxZDJlNWJlMGI1MTQyOGM2IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2JpbmRpbmdzL21haW4ucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9iaW5kaW5ncy9tYWluLnB5CkBAIC03OCw2ICs3OCw4IEBAIGNsYXNzIEJp
bmRpbmdzVGVzdHM6CiAgICAgICAgICAgICAobmFtZSwgZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3Bs
aXRleHQoaW5wdXRfZmlsZSkKICAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAnLmlkbCc6CiAg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ0Nv
bnN0cnVjdG9ycycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBvcy53
cml0ZShpZGxfZmlsZXNfbGlzdFswXSwgc3RyaW5nX3V0aWxzLmVuY29kZShvcy5wYXRoLmpvaW4o
aW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSArICJcbiIpKQogICAgICAgICBvcy5jbG9zZShp
ZGxfZmlsZXNfbGlzdFswXSkKIApAQCAtMTkxLDE4ICsxOTMsMjUgQEAgY2xhc3MgQmluZGluZ3NU
ZXN0czoKIAogICAgICAgICBzdXBwbGVtZW50YWxfZGVwZW5kZW5jeV9maWxlbmFtZSA9ICdTdXBw
bGVtZW50YWxEZXBlbmRlbmNpZXMudHh0JwogICAgICAgICBzdXBwbGVtZW50YWxfbWFrZWZpbGVf
ZGVwZW5kZW5jeV9maWxlbmFtZSA9ICdTdXBwbGVtZW50YWxEZXBlbmRlbmNpZXMuZGVwJworICAg
ICAgICBkb21fd2luZG93X2NvbnN0cnVjdG9yc19maWxlbmFtZSA9ICdET01XaW5kb3dDb25zdHJ1
Y3RvcnMuaWRsJworICAgICAgICB3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5h
bWUgPSAnV29ya2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsJworICAgICAgICBkZWRpY2F0
ZWR3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUgPSAnRGVkaWNhdGVkV29y
a2VyR2xvYmFsU2NvcGVDb25zdHJ1Y3RvcnMuaWRsJworICAgICAgICBzZXJ2aWNld29ya2VyZ2xv
YmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lID0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29w
ZUNvbnN0cnVjdG9ycy5pZGwnCisgICAgICAgIHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3Rv
cnNfZmlsZW5hbWUgPSAnV29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCcKKyAgICAg
ICAgcGFpbnR3b3JrbGV0Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lID0gJ1BhaW50
V29ya2xldEdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlkbCcKKyAgICAgICAgdGVzdGdsb2JhbHNj
b3BlX2NvbnN0cnVjdG9yc19maWxlbmFtZSA9ICdCaW5kaW5nVGVzdEdsb2JhbENvbnN0cnVjdG9y
cy5pZGwnCiAKICAgICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAg
ICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdXZWJDb3JlJywgJ2JpbmRpbmdz
JywgJ3NjcmlwdHMnLCAndGVzdCcpCiAgICAgICAgIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5X2Zp
bGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5
X2ZpbGVuYW1lKQogICAgICAgICBzdXBwbGVtZW50YWxfbWFrZWZpbGVfZGVwZW5kZW5jeV9maWxl
ID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHMg
ZWxzZSBpbnB1dF9kaXJlY3RvcnksIHN1cHBsZW1lbnRhbF9tYWtlZmlsZV9kZXBlbmRlbmN5X2Zp
bGVuYW1lKQotICAgICAgICB3aW5kb3dfY29uc3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4o
d29ya19kaXJlY3RvcnksICdET01XaW5kb3dDb25zdHJ1Y3RvcnMuaWRsJykKLSAgICAgICAgd29y
a2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJl
Y3RvcnksICdXb3JrZXJHbG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwnKQotICAgICAgICBkZWRp
Y2F0ZWR3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9IG9zLnBhdGguam9pbih3
b3JrX2RpcmVjdG9yeSwgJ0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlQ29uc3RydWN0b3JzLmlk
bCcpCi0gICAgICAgIHNlcnZpY2V3b3JrZXJnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSA9
IG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZUNv
bnN0cnVjdG9ycy5pZGwnKQotICAgICAgICB3b3JrbGV0Z2xvYmFsc2NvcGVfY29uc3RydWN0b3Jz
X2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksICdXb3JrbGV0R2xvYmFsU2NvcGVD
b25zdHJ1Y3RvcnMuaWRsJykKLSAgICAgICAgcGFpbnR3b3JrbGV0Z2xvYmFsc2NvcGVfY29uc3Ry
dWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksICdQYWludFdvcmtsZXRH
bG9iYWxTY29wZUNvbnN0cnVjdG9ycy5pZGwnKQotICAgICAgICB0ZXN0Z2xvYmFsc2NvcGVfY29u
c3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksICdCaW5kaW5nVGVz
dEdsb2JhbENvbnN0cnVjdG9ycy5pZGwnKQorICAgICAgICB3aW5kb3dfY29uc3RydWN0b3JzX2Zp
bGUgPSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0
cyBlbHNlIGlucHV0X2RpcmVjdG9yeSwgZG9tX3dpbmRvd19jb25zdHJ1Y3RvcnNfZmlsZW5hbWUp
CisgICAgICAgIHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlID0gb3MucGF0aC5q
b2luKHdvcmtfZGlyZWN0b3J5IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHMgZWxzZSBpbnB1dF9k
aXJlY3RvcnksIHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlbmFtZSkKKyAgICAg
ICAgZGVkaWNhdGVkd29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUgPSBvcy5wYXRo
LmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0cyBlbHNlIGlucHV0
X2RpcmVjdG9yeSwgZGVkaWNhdGVkd29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGVu
YW1lKQorICAgICAgICBzZXJ2aWNld29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUg
PSBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnkgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0cyBl
bHNlIGlucHV0X2RpcmVjdG9yeSwgc2VydmljZXdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9y
c19maWxlbmFtZSkKKyAgICAgICAgd29ya2xldGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxl
ID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHMg
ZWxzZSBpbnB1dF9kaXJlY3RvcnksIHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmls
ZW5hbWUpCisgICAgICAgIHBhaW50d29ya2xldGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxl
ID0gb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHMg
ZWxzZSBpbnB1dF9kaXJlY3RvcnksIHBhaW50d29ya2xldGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9y
c19maWxlbmFtZSkKKyAgICAgICAgdGVzdGdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxlID0g
b3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5IGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHMgZWxz
ZSBpbnB1dF9kaXJlY3RvcnksIHRlc3RnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUp
CiAKICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9zdXBwbGVtZW50YWxfZGVwZW5kZW5jeShpbnB1
dF9kaXJlY3RvcnksIHN1cHBsZW1lbnRhbF9kZXBlbmRlbmN5X2ZpbGUsIHN1cHBsZW1lbnRhbF9t
YWtlZmlsZV9kZXBlbmRlbmN5X2ZpbGUsIHdpbmRvd19jb25zdHJ1Y3RvcnNfZmlsZSwgd29ya2Vy
Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUsIGRlZGljYXRlZHdvcmtlcmdsb2JhbHNjb3Bl
X2NvbnN0cnVjdG9yc19maWxlLCBzZXJ2aWNld29ya2VyZ2xvYmFsc2NvcGVfY29uc3RydWN0b3Jz
X2ZpbGUsIHdvcmtsZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZSwgcGFpbnR3b3JrbGV0
Z2xvYmFsc2NvcGVfY29uc3RydWN0b3JzX2ZpbGUsIHRlc3RnbG9iYWxzY29wZV9jb25zdHJ1Y3Rv
cnNfZmlsZSk6CiAgICAgICAgICAgICBwcmludCgnRmFpbGVkIHRvIGdlbmVyYXRlIGEgc3VwcGxl
bWVudGFsIGRlcGVuZGVuY3kgZmlsZS4nKQpAQCAtMjEyLDYgKzIyMSwyMCBAQCBjbGFzcyBCaW5k
aW5nc1Rlc3RzOgogICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRzOgogICAgICAgICAg
ICAgaWYgc2VsZi5kZXRlY3RfZmlsZV9jaGFuZ2VzKCdkZXBlbmRlbmNpZXMnLCB3b3JrX2RpcmVj
dG9yeSwgaW5wdXRfZGlyZWN0b3J5LCBzdXBwbGVtZW50YWxfbWFrZWZpbGVfZGVwZW5kZW5jeV9m
aWxlbmFtZSk6CiAgICAgICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisgICAg
ICAgICAgICBpZiBzZWxmLmRldGVjdF9maWxlX2NoYW5nZXMoJ2dsb2JhbHNjb3BlJywgd29ya19k
aXJlY3RvcnksIGlucHV0X2RpcmVjdG9yeSwgZG9tX3dpbmRvd19jb25zdHJ1Y3RvcnNfZmlsZW5h
bWUpOgorICAgICAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAg
ICAgaWYgc2VsZi5kZXRlY3RfZmlsZV9jaGFuZ2VzKCdnbG9iYWxzY29wZScsIHdvcmtfZGlyZWN0
b3J5LCBpbnB1dF9kaXJlY3RvcnksIHdvcmtlcmdsb2JhbHNjb3BlX2NvbnN0cnVjdG9yc19maWxl
bmFtZSk6CisgICAgICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisgICAgICAg
ICAgICBpZiBzZWxmLmRldGVjdF9maWxlX2NoYW5nZXMoJ2dsb2JhbHNjb3BlJywgd29ya19kaXJl
Y3RvcnksIGlucHV0X2RpcmVjdG9yeSwgZGVkaWNhdGVkd29ya2VyZ2xvYmFsc2NvcGVfY29uc3Ry
dWN0b3JzX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFs
c2UKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2ZpbGVfY2hhbmdlcygnZ2xvYmFsc2NvcGUn
LCB3b3JrX2RpcmVjdG9yeSwgaW5wdXRfZGlyZWN0b3J5LCBzZXJ2aWNld29ya2VyZ2xvYmFsc2Nv
cGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBhbGxfdGVzdHNfcGFz
c2VkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2ZpbGVfY2hhbmdlcygnZ2xv
YmFsc2NvcGUnLCB3b3JrX2RpcmVjdG9yeSwgaW5wdXRfZGlyZWN0b3J5LCB3b3JrbGV0Z2xvYmFs
c2NvcGVfY29uc3RydWN0b3JzX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBhbGxfdGVzdHNf
cGFzc2VkID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2ZpbGVfY2hhbmdlcygn
Z2xvYmFsc2NvcGUnLCB3b3JrX2RpcmVjdG9yeSwgaW5wdXRfZGlyZWN0b3J5LCBwYWludHdvcmts
ZXRnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIGFs
bF90ZXN0c19wYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfZmlsZV9j
aGFuZ2VzKCdnbG9iYWxzY29wZScsIHdvcmtfZGlyZWN0b3J5LCBpbnB1dF9kaXJlY3RvcnksIHRl
c3RnbG9iYWxzY29wZV9jb25zdHJ1Y3RvcnNfZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIGFs
bF90ZXN0c19wYXNzZWQgPSBGYWxzZQogCiAgICAgICAgIGZvciBnZW5lcmF0b3IgaW4gc2VsZi5n
ZW5lcmF0b3JzOgogICAgICAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdX
ZWJDb3JlJywgJ2JpbmRpbmdzJywgJ3NjcmlwdHMnLCAndGVzdCcpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>