<?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>237472</bug_id>
          
          <creation_ts>2022-03-04 06:23:01 -0800</creation_ts>
          <short_desc>Split SourceBufferParserWebM and have platform agnostic WebMParser</short_desc>
          <delta_ts>2022-03-08 18:26:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</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>
          <dependson>237078</dependson>
    
    <dependson>237473</dependson>
          <blocked>236754</blocked>
    
    <blocked>237594</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jean-Yves Avenard [:jya]">jean-yves.avenard</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>annulen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1848270</commentid>
    <comment_count>0</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-04 06:23:01 -0800</bug_when>
    <thetext>Sub-task of bug 236754.

Currently, the SourceBufferParserWebM demux a webm and returned CMSampleBuffer, this is okay when used with MSE; however when used with the MediaFormatReader to play plain webm: it means we always read the entire file into memory, put each demuxed sample in a MediaSampleAVFObjC object and return the entire content to the MediaFormatReader.

The aim is for the MediaFormatReader to construct a sample table, and for this it only needs to know the offset and length of each sample within the original stream.
As such, demuxing the whole lot is less than efficient in both speed and memory usage.

By using a more specialised webm demuxer we could build exactly what the MFR needs.

In this task, we will also introduce a new type of MediaSample and Track Information that is fully platform agnostic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848271</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-04 06:23:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/89810969&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848477</commentid>
    <comment_count>2</comment_count>
      <attachid>453889</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-04 20:05:44 -0800</bug_when>
    <thetext>Created attachment 453889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848478</commentid>
    <comment_count>3</comment_count>
      <attachid>453890</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-04 20:07:29 -0800</bug_when>
    <thetext>Created attachment 453890
Combined patch for EWS tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848479</commentid>
    <comment_count>4</comment_count>
      <attachid>453891</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-04 20:18:35 -0800</bug_when>
    <thetext>Created attachment 453891
Combined patch for EWS tests

fix compilation TV and Watch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848496</commentid>
    <comment_count>5</comment_count>
      <attachid>453899</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-04 21:39:46 -0800</bug_when>
    <thetext>Created attachment 453899
Combined patch for EWS tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848577</commentid>
    <comment_count>6</comment_count>
      <attachid>453927</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-05 19:45:25 -0800</bug_when>
    <thetext>Created attachment 453927
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848578</commentid>
    <comment_count>7</comment_count>
      <attachid>453928</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-05 19:46:17 -0800</bug_when>
    <thetext>Created attachment 453928
Combined Patch for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848597</commentid>
    <comment_count>8</comment_count>
      <attachid>453927</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2022-03-06 09:02:08 -0800</bug_when>
    <thetext>Comment on attachment 453927
Patch for review

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

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:217
&gt; +    if (!format)
&gt; +        return nullptr;

It is probably worth logging an error to help when this, presumably rare, failure happens.

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:225
&gt; +        if (err != kCMBlockBufferNoErr || !rawBlockBuffer)
&gt; +            return nullptr;

Ditto

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:239
&gt; +        if (!blockBuffer)
&gt; +            return nullptr;

Ditto

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:246
&gt; +            if (err != kCMBlockBufferNoErr)
&gt; +                return nullptr;

Ditto

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:254
&gt; +    if (auto err = PAL::CMSampleBufferCreateReady(kCFAllocatorDefault, completeBlockBuffers.get(), format.get(), packetSizes.size(), packetTimings.size(), packetTimings.data(), packetSizes.size(), packetSizes.data(), &amp;rawSampleBuffer))
&gt; +        return nullptr;

Ditto

&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:258
&gt; +        ASSERT(attachmentsArray);

Is this failure more serious than those above? If not, should those assert too?

&gt; Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:566
&gt; +    if (!m_parser)
&gt; +        return -1;

Yuck. Maybe have this return an ExceptionOr&lt;int&gt; instead?

&gt; Tools/ChangeLog:26
&gt; +        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp: Update following base class definition change.

Looks like this is in the wrong place?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848625</commentid>
    <comment_count>9</comment_count>
      <attachid>453927</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-06 21:59:22 -0800</bug_when>
    <thetext>Comment on attachment 453927
Patch for review

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

&gt;&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:217
&gt;&gt; +        return nullptr;
&gt; 
&gt; It is probably worth logging an error to help when this, presumably rare, failure happens.

This is a utility method. AFAIK, there’s no logging possible here. The error is logged on return

&gt;&gt; Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:258
&gt;&gt; +        ASSERT(attachmentsArray);
&gt; 
&gt; Is this failure more serious than those above? If not, should those assert too?

This is carrying on the old code. It can’t happen unless there’s a change in behaviour in the CM method. 

We create the CM Sample and give it an array of timings etc. So there will always be an arrray there. 

The other errors indicates an OOM

&gt;&gt; Source/WebCore/platform/graphics/cocoa/SourceBufferParserWebM.cpp:566
&gt;&gt; +        return -1;
&gt; 
&gt; Yuck. Maybe have this return an ExceptionOr&lt;int&gt; instead?

Could return a new error code. 

Otherwise , crap in, crap out. This indicates the demuxer was called after being torn down. Which can’t happen currently</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848650</commentid>
    <comment_count>10</comment_count>
      <attachid>453927</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-07 02:21:29 -0800</bug_when>
    <thetext>Comment on attachment 453927
Patch for review

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

&gt;&gt; Tools/ChangeLog:26
&gt;&gt; +        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp: Update following base class definition change.
&gt; 
&gt; Looks like this is in the wrong place?

what do you mean? this method is modified and that template was generated by webkit-patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848651</commentid>
    <comment_count>11</comment_count>
      <attachid>453950</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-07 02:22:41 -0800</bug_when>
    <thetext>Created attachment 453950
Patch for review

Propage error detail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848652</commentid>
    <comment_count>12</comment_count>
      <attachid>453951</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2022-03-07 02:30:42 -0800</bug_when>
    <thetext>Created attachment 453951
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849277</commentid>
    <comment_count>13</comment_count>
      <attachid>453927</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2022-03-08 08:31:41 -0800</bug_when>
    <thetext>Comment on attachment 453927
Patch for review

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

&gt;&gt;&gt; Tools/ChangeLog:26
&gt;&gt;&gt; +        * TestWebKitAPI/Tests/WebCore/SampleMap.cpp: Update following base class definition change.
&gt;&gt; 
&gt;&gt; Looks like this is in the wrong place?
&gt; 
&gt; what do you mean? this method is modified and that template was generated by webkit-patch

I meant it is in the wrong comment block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849512</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-08 18:26:37 -0800</bug_when>
    <thetext>Committed r291025 (248199@main): &lt;https://commits.webkit.org/248199@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453951.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453889</attachid>
            <date>2022-03-04 20:05:44 -0800</date>
            <delta_ts>2022-03-05 19:45:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237472-20220305150543.patch</filename>
            <type>text/plain</type>
            <size>135712</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY4Yzk4NzMyNzRiODNm
MTEzZmNkNmFjOWJmMGVhMWEzMWIyNzQwOC4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggOTkxOTdlMjQ1YjBhYzg4MDU1Y2Y0OWI3N2U5YTBkYTU4NDdk
NDZlZC4uNzM4M2ZlZTAxYTMxODc5ZmZiNDYxMWRiOTQ5OTY2MTNhNDc4OWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJk
ICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
IGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJv
YmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcDoKKyAgICAgICAgKiBwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaDogTWV0aG9kIENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgd2Fz
bid0IHNvZnQtbGlua2VkLgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzQ3MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZWM1Y2MyOTA0YWY0N2YzODc3NmZjMTJhYTE3YWYxOWI5
NzM0Zjk2Li4zODVhZmY2NjYyYjBkYmJiMjI5MDBiNzQ5NzA4ZTA0OWYyZDQwNWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2
ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4
MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2UpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuaDogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorICAgICAgICBkaWRuJ3QgbmVlZCB0
byBpbmhlcml0IGZyb20gTWVkaWFTYW1wbGVBVkZPYmpDLiAKKwogMjAyMi0wMy0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTGliV2ViUlRDQ29kZWNzOjpz
ZXRFbmNvZGVSYXRlcyBzaG91bGQgc2VuZCBMaWJXZWJSVENDb2RlY3NQcm94eTo6U2V0RW5jb2Rl
UmF0ZXMgb25seSB3aGVuIHRoZSBlbmNvZGVyIGlzIGxpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5
OWIzNmY1NWYyZGY2ZjhjOTlkNTc2Yi4uZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2Rh
MmIyNjUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5jcHAKQEAgLTE2OSw2ICsxNjksNyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENN
VGltZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENN
VGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRp
bWUgZmlyZVRpbWUsIHVpbnQzMl90IGZsYWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmly
ZVRpbWUsIGZsYWdzKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNF
X1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNv
dXJjZVRvRmlyZUltbWVkaWF0ZWx5LCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2Us
IGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSks
IFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
LCBQQUxfRVhQT1JUKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQo
UEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBp
bnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMs
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxs
b2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2Ny
aXB0aW9uT3V0KSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJ
VEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1h
Z2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0
RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywg
KENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFM
X0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwg
Q29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNp
b25zLCBDR1NpemUsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29s
ZWFuIHVzZVBpeGVsQXNwZWN0UmF0aW8sIEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRl
b0Rlc2MsIHVzZVBpeGVsQXNwZWN0UmF0aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4
IDU3MGE2YTk4NTNjNDQ4MTY4Yjk5MDIyMDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdl
NTkyNWEyNWI2YWNmYmQxNThhNDMyZTdhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKQEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0
Y2hTb3VyY2VUbwogI2RlZmluZSBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmly
ZUltbWVkaWF0ZWx5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRj
aFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
KQogI2RlZmluZSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRp
bWVDb3B5QXNEaWN0aW9uYXJ5CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciwgQ01WaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qg
d2lkdGgsIGludDMyX3QgaGVpZ2h0LCBDRkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3Is
IGNvZGVjVHlwZSwgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25P
dXQpKQorI2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29y
ZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZUZvckltYWdlQnVmZmVyLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJ
bWFnZUJ1ZmZlclJlZiBpbWFnZUJ1ZmZlciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBv
dXREZXNjKSwgKGFsbG9jYXRvciwgaW1hZ2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVk
aWFfQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggOThiMDM1NzkxYTZlYmIwZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTMxMiw2ICszMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvQ01VdGlsaXRpZXMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9h
dFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3Bw
CkBAIC02NDksNiArNjUwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Nv
bG9yQ29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0
MjNmMjdiZmMyNGQ3MTdlYmFjZmEuLmY5ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdi
N2Y4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5p
ZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhYTIyN2Q1OThlNDI5ZDg1NWJiM2RlZWRhOWIxZDQ3Mjgw
ZDYyNDNiLi4xODE5NzQ0OWVlZDY0OTM3OWZmMWY0MjcxNjhkYWI1ZGY4N2Q5ZmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTc5LDYgKzE1NzksOCBAQAogCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NjYwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCAqLzsgfTsKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MTUwQjVERDI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYy
RTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxp
dGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYw
N0UyNjE1NDM1QTAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRC
MkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0
eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVy
LmggKi87IH07CiAJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThC
MUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3Nyw2ICs5Nzc5LDggQEAKIAkJNTE0
Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRD
NzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENNVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTUxRjA3QjI2MTUzNjNGMDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdD
NjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5Mjg5LDYgKzI5MjkzLDggQEAK
IAkJCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICov
LAogCQkJCUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
Y3BwICovLAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uaCAqLywKKwkJCQk1MTUwQjVEQzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
aCAqLywKKwkJCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8s
CiAJCQkJRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlG
NDhEMkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0
QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICsz
MzkwMyw3IEBACiAJCQkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1Q
YXN0ZWJvYXJkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEw
OUQ1MDA3NDU3QUUgLyogQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQy
N0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMw
NTRDQjExMThDOEU0MDBDRTI2MzYgLyogQ29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUVCNURGMEU4MUI5QUIwMEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25J
bmRleENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlD
REY0QjcxNTFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
QjcwNDVCMUY3NDY1QTEwMDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDREMyMjQyODFGNzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RG
NDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBG
QjFBQTUxRTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkM2OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NT
UHJvcGVydHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRp
YVNhbXBsZS5oCmluZGV4IDBhNmYyOGEyMDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMu
LjcxNDQyYTdiM2U3OTE2YjJhMjQ3ZmRlNjI3OWI3NGRhMGM2MGZjNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMjYsNiArMjYsOSBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb3VyQ0MuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CkBAIC00MCw4ICs0MywxMCBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5
OworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVu
dW0gVHlwZSB7CkBAIC0xMTksNyArMTI0LDExIEBAIHB1YmxpYzoKICAgICBib29sIGhhc0FscGhh
KCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc0FscGhhOyB9CiAgICAgYm9vbCBoYXNTeW5j
SW5mbygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNTeW5jSW5mbzsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIG91dC5wcmludCgi
e1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwg
ZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHBy
ZXNlbnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2Vu
dGF0aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKKyAgICB9CisKICAgICBTdHJpbmcgdG9KU09O
U3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gb2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKQEAgLTEzNCw4ICsxNDMsMTI4IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCitz
dHJ1Y3QgQXVkaW9JbmZvOworc3RydWN0IFZpZGVvSW5mbzsKKworc3RydWN0IFRyYWNrSW5mbyA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUcmFja0luZm8+IHsKKyAgICBlbnVtIGNsYXNz
IFRyYWNrVHlwZSB7IFVua25vd24sIEF1ZGlvLCBWaWRlbyB9OworCisgICAgYm9vbCBpc0F1ZGlv
KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6QXVkaW87IH0KKyAgICBib29s
IGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpWaWRlbzsgfQor
CisgICAgVHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkgfHwgY29kZWNOYW1lICE9IG90aGVyLmNvZGVj
TmFtZSB8fCB0cmFja0lEICE9IG90aGVyLnRyYWNrSUQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiBlcXVhbFRvKG90aGVyKTsKKyAgICB9CisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOyB9CisKKyAgICBGb3VyQ0MgY29kZWNOYW1lOworICAgIHVpbnQ2NF90IHRyYWNrSUQg
eyAwIH07CisKKyAgICB2aXJ0dWFsIH5UcmFja0luZm8oKSA9IGRlZmF1bHQ7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25z
dCA9IDA7CisgICAgVHJhY2tJbmZvKFRyYWNrVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0
eXBlKSB7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUcmFja1R5cGUgbV90eXBlIHsgVHJhY2tU
eXBlOjpVbmtub3duIH07Cit9OworCitzdHJ1Y3QgVmlkZW9JbmZvIDogcHVibGljIFRyYWNrSW5m
byB7CisgICAgc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgVmlkZW9JbmZvKCkpOyB9CisKKyAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICAvLyBTaXpl
IGluIHBpeGVscyBhdCB3aGljaCB0aGUgdmlkZW8gaXMgcmVuZGVyZWQuIFRoaXMgaXMgYWZ0ZXIg
aXQgaGFzCisgICAgLy8gYmVlbiBzY2FsZWQgYnkgaXRzIGFzcGVjdCByYXRpby4KKyAgICBGbG9h
dFNpemUgZGlzcGxheVNpemU7CisgICAgdWludDhfdCBiaXREZXB0aCB7IDggfTsKKyAgICBQbGF0
Zm9ybVZpZGVvQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgIE1lZGlhU2FtcGxlOjpWaWRlb1Jv
dGF0aW9uIHJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb246Ok5vbmUgfTsKKwor
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGF0b21EYXRhOworCitwcml2YXRlOgorICAgIFZpZGVv
SW5mbygpCisgICAgICAgIDogVHJhY2tJbmZvKFRyYWNrVHlwZTo6VmlkZW8pIHsgfQorICAgIGJv
b2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyVmlkZW9JbmZvKSBjb25zdCBmaW5hbAor
ICAgIHsKKyAgICAgICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBWaWRlb0luZm8+KG90
aGVyVmlkZW9JbmZvKTsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gb3RoZXIuc2l6ZSAmJiBkaXNw
bGF5U2l6ZSA9PSBvdGhlci5kaXNwbGF5U2l6ZSAmJiBiaXREZXB0aCA9PSBvdGhlci5iaXREZXB0
aCAmJiBjb2xvclNwYWNlID09IG90aGVyLmNvbG9yU3BhY2UgJiYgcm90YXRpb24gPT0gb3RoZXIu
cm90YXRpb24gJiYgKCghYXRvbURhdGEgJiYgIW90aGVyLmF0b21EYXRhKSB8fCAoYXRvbURhdGEg
JiYgb3RoZXIuYXRvbURhdGEgJiYgKmF0b21EYXRhID09ICpvdGhlci5hdG9tRGF0YSkpOworICAg
IH0KK307CisKK3N0cnVjdCBBdWRpb0luZm8gOiBwdWJsaWMgVHJhY2tJbmZvIHsKKyAgICBzdGF0
aWMgUmVmPEF1ZGlvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRpb0lu
Zm8oKSk7IH0KKworICAgIHVpbnQzMl90IHJhdGUgeyAwIH07CisgICAgdWludDMyX3QgY2hhbm5l
bHMgeyAwIH07CisgICAgdWludDMyX3QgZnJhbWVzUGVyUGFja2V0IHsgMCB9OworICAgIHVpbnQz
Ml90IGJpdERlcHRoIHsgMTYgfTsKKyAgICBpbnQ4X3QgcHJvZmlsZSB7IDAgfTsKKyAgICBpbnQ4
X3QgZXh0ZW5kZWRQcm9maWxlIHsgMCB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29v
a2llRGF0YTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0luZm8oKQorICAgICAgICA6IFRyYWNrSW5m
byhUcmFja1R5cGU6OkF1ZGlvKSB7IH0KKyAgICBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZv
JiBvdGhlckF1ZGlvSW5mbykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8mIG90aGVy
ID0gZG93bmNhc3Q8Y29uc3QgQXVkaW9JbmZvPihvdGhlckF1ZGlvSW5mbyk7CisgICAgICAgIHJl
dHVybiByYXRlID09IG90aGVyLnJhdGUgJiYgY2hhbm5lbHMgPT0gb3RoZXIuY2hhbm5lbHMgJiYg
Yml0RGVwdGggPT0gb3RoZXIuYml0RGVwdGggJiYgZnJhbWVzUGVyUGFja2V0ID09IG90aGVyLmZy
YW1lc1BlclBhY2tldCAmJiBwcm9maWxlID09IG90aGVyLnByb2ZpbGUgJiYgZXh0ZW5kZWRQcm9m
aWxlID09IG90aGVyLmV4dGVuZGVkUHJvZmlsZSAmJiAoKCFjb29raWVEYXRhICYmICFvdGhlci5j
b29raWVEYXRhKSB8fCAoY29va2llRGF0YSAmJiBvdGhlci5jb29raWVEYXRhICYmICpjb29raWVE
YXRhID09ICpvdGhlci5jb29raWVEYXRhKSk7CisgICAgfQorfTsKKworY2xhc3MgTWVkaWFTYW1w
bGVzQmxvY2sgeworcHVibGljOgorICAgIHN0cnVjdCBNZWRpYVNhbXBsZUl0ZW0geworICAgICAg
ICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGRlY29kZVRp
bWU7CisgICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbjsKKyAgICAgICAgc3RkOjp2YXJpYW50PE1l
ZGlhU2FtcGxlOjpCeXRlUmFuZ2UsIFJlZjxjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4g
ZGF0YTsKKyAgICAgICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIGZsYWdzOworICAgIH07CisK
KyAgICB2b2lkIHNldEluZm8oUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4mJiBpbmZvKSB7IG1faW5m
byA9IFdURk1vdmUoaW5mbyk7IH0KKyAgICBjb25zdCBUcmFja0luZm8qIGluZm8oKSBjb25zdCB7
IHJldHVybiBtX2luZm8uZ2V0KCk7IH0KKyAgICBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVy
biBtX2luZm8gJiYgbV9pbmZvLT5pc1ZpZGVvKCk7IH0KKyAgICBib29sIGlzQXVkaW8oKSBjb25z
dCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc0F1ZGlvKCk7IH0KKyAgICBUcmFja0luZm86
OlRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvID8gbV9pbmZvLT50eXBlKCkg
OiBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93bjsgfQorICAgIHZvaWQgYXBwZW5kKE1lZGlh
U2FtcGxlSXRlbSYmIGl0ZW0pIHsgbV9zYW1wbGVzLmFwcGVuZChXVEZNb3ZlKGl0ZW0pKTsgfQor
ICAgIHZvaWQgYXBwZW5kKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2spIHsgbV9zYW1wbGVzLmFw
cGVuZFZlY3RvcihzdGQ6OmV4Y2hhbmdlKGJsb2NrLm1fc2FtcGxlcywgeyB9KSk7IH0KKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXplKCk7IH07CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmlzRW1wdHkoKTsgfQorICAgIHZv
aWQgY2xlYXIoKSB7IG1fc2FtcGxlcy5jbGVhcigpOyB9CisgICAgdXNpbmcgU2FtcGxlc1ZlY3Rv
ciA9IFZlY3RvcjxNZWRpYVNhbXBsZUl0ZW0+OworICAgIFNhbXBsZXNWZWN0b3IgdGFrZVNhbXBs
ZXMoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlcywgeyB9KTsgfQorCisgICAgY29u
c3QgTWVkaWFTYW1wbGVJdGVtJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVzW2luZGV4XTsgfQorICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgZmlyc3Qo
KSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZmlyc3QoKTsgfQorICAgIGNvbnN0IE1lZGlhU2Ft
cGxlSXRlbSYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5sYXN0KCk7IH0KKyAgICBT
YW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlcy5iZWdpbigpOyB9CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmVuZCgpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PGNvbnN0IFRyYWNrSW5mbz4gbV9pbmZvOworICAgIFNhbXBsZXNWZWN0b3IgbV9zYW1wbGVzOwor
fTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OlZpZGVvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzVmlkZW8oKTsgfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkF1ZGlvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzQXVkaW8oKTsgfQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbj4gewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVy
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxl
UmVhZGVyQ29jb2EuY3BwCmluZGV4IGI3MDNjZmVjZDMxNmM2MjdjNjk0ZTY0YjhlNjk3NjIwNjg2
N2Y3YWIuLmJkODdlNDY4ZjhmMGRmZjBiMzRjNjhhNWY0OWI0NmUzZGIwMGM1NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNv
Y29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Zp
bGVSZWFkZXJDb2NvYS5jcHAKQEAgLTIxOSw3ICsyMTksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8QXVk
aW9GaWxlUmVhZGVyV2ViTURhdGE+IEF1ZGlvRmlsZVJlYWRlcjo6ZGVtdXhXZWJNRGF0YShjb25z
dCB1aQogICAgIHBhcnNlci0+YXBwZW5kRGF0YShXVEZNb3ZlKHNlZ21lbnQpKTsKICAgICBpZiAo
IXRyYWNrKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBwYXJzZXItPmZsdXNoUGVuZGlu
Z0F1ZGlvQnVmZmVycygpOworICAgIHBhcnNlci0+Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7
CiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QXVkaW9GaWxlUmVhZGVyV2ViTURhdGE+KEF1ZGlvRmls
ZVJlYWRlcldlYk1EYXRhIHsgV1RGTW92ZShidWZmZXIpLCB0cmFjay5yZWxlYXNlTm9uTnVsbCgp
LCBXVEZNb3ZlKGR1cmF0aW9uKSwgV1RGTW92ZShzYW1wbGVzKSB9KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXMuaAppbmRleCAwODQ0YjFlOGRjYWNmY2E2MDZkMDFhZmRjOWM2ZjcyMGUz
Mzk0NDVjLi5hZmMzMTI1NGViNTRmYWRmM2YxMjE5OTY1ZTgyNWVkMzI2M2Q0YmIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvQ29sb3JQ
cmltYXJpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXMuaApAQCAtMzMsNiArMzMsMTUgQEAgZW51bSBjbGFzcyBQbGF0
Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMgOiB1aW50OF90IHsKICAgICBCdDcwOSwKICAgICBCdDQ3
MGJnLAogICAgIFNtcHRlMTcwbSwKKyAgICBCdDQ3MG0sCisgICAgU21wdGUyNDBtLAorICAgIEZp
bG0sCisgICAgQnQyMDIwLAorICAgIFNtcHRlU3Q0MjgxLAorICAgIFNtcHRlUnA0MzEsCisgICAg
U21wdGVFZzQzMiwKKyAgICBKZWRlY1AyMlBob3NwaG9ycywKKyAgICBVbnNwZWNpZmllZCwKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcgKzUzLDE2IEBAIHRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzPiB7
CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcywKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDcwOSwKICAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDQ3MGJnLAotICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcwbQorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDQ3MG0sCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUyNDBtLAorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkZpbG0sCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzEsCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVFZzQzMiwKKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpKZWRlY1AyMlBob3NwaG9ycywKKyAg
ICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZAog
ICAgID47CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKaW5kZXggZTkw
NzM1Yzg4ZDdmZTUxZjM3NzU1YmQ4YzA3NDRmYTZiNTNjNmZlOS4uMzkxYWRlY2FkMjJjYTZkOTEx
ZWIwMDhiNzU2YzhkZWE3NzRmMjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHMuaApAQCAtMzQsNiArMzQsMTIgQEAgZW51bSBjbGFzcyBQbGF0Zm9ybVZpZGVvTWF0cml4Q29l
ZmZpY2llbnRzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBTbXB0
ZTE3MG0sCisgICAgU21wdGUyNDBtLAorICAgIEZjYywKKyAgICBZQ2dDbywKKyAgICBCdDIwMjBO
b25jb25zdGFudEx1bWluYW5jZSwKKyAgICBCdDIwMjBDb25zdGFudEx1bWluYW5jZSwKKyAgICBV
bnNwZWNpZmllZCwKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ2LDcgKzUyLDEz
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cz4gewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpSZ2IsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhD
b2VmZmljaWVudHM6OkJ0NzA5LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDQ3MGJnLAotICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b01hdHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkZjYywKKyAgICAgICAgV2ViQ29yZTo6UGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6WUNnQ28sCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50THVtaW5hbmNl
LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIw
MjBDb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZp
ZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuaAppbmRleCBjYzdmMWVhMjE0ZTRhOWFiNWVjMWU2
MmFiMjQ0NjI4OGE4NDBkNGViLi5iYjE4M2MwMzA2MzAxYjM3MDc4ZmRjZDU0MDIzZmZlNzQzYmMy
YWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuaApAQCAt
MzMsNiArMzMsMjAgQEAgZW51bSBjbGFzcyBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MgOiB1aW50OF90IHsKICAgICBCdDcwOSwKICAgICBTbXB0ZTE3MG0sCiAgICAgSWVjNjE5
NjYyMSwKKyAgICBHYW1tYTIyY3VydmUsCisgICAgR2FtbWEyOGN1cnZlLAorICAgIFNtcHRlMjQw
bSwKKyAgICBMaW5lYXIsCisgICAgTG9nLAorICAgIExvZ1NxcnQsCisgICAgSWVjNjE5NjYyNCwK
KyAgICBCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0LAorICAgIEJ0MjAyMF8xMGJpdCwKKyAgICBC
dDIwMjBfMTJiaXQsCisgICAgU21wdGVTdDIwODQsCisgICAgU21wdGVTdDQyODEsCisgICAgQXJp
YlN0ZEI2N0hsZywKKyAgICBVbnNwZWNpZmllZAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpAQCAtNDQsNyArNTgsMjEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M+IHsKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLAogICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5LAogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMTcwbSwK
LSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJ
ZWM2MTk2NjIxCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6SWVjNjE5NjYyMSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTIyY3VydmUsCisgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyOGN1cnZlLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMjQwbSwK
KyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpM
aW5lYXIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6TG9nLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkxvZ1NxcnQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyNCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0LAor
ICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0
MjAyMF8xMGJpdCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCdDIwMjBfMTJiaXQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDIwODQsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDQyODEsCisgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2
N0hsZywKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpVbnNwZWNpZmllZAogICAgID47CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01l
ZGlhU2FtcGxlQVZGT2JqQy5oCmluZGV4IDZjY2ZmYjBkNmE5MmVmMDZhZTc2Zjg4YTBiMjg1Njk3
NWRhM2IyZjcuLjAyNWQwZDM0NGYzYWVhNDI4YTZlZDg3Njg2ODhjY2FiZmQzN2EzMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpj
L01lZGlhU2FtcGxlQVZGT2JqQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5oCkBAIC02NSw3ICs2NSw2
IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFBsYXRmb3JtU2FtcGxlOjpUeXBlIHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtU2FtcGxlOjpDTVNhbXBsZUJ1ZmZlclR5cGU7
IH0KICAgICBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1l
ZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNEaXZpc2FibGUo
KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZG
T2JqQy5tbQppbmRleCBlODM4ZWNlMzE3ZTkwNDRiYmFjOWVjNzcwYjg5MWZjOWFkMzFjZGYwLi45
Y2FkODlkMWM3NmM5Y2MxMThiNDcxMjJhNTZjYmQ1N2ExMzEyZDRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCkBAIC0yNDUsMTEgKzI0NSw2IEBAIEZs
b2F0U2l6ZSBNZWRpYVNhbXBsZUFWRk9iakM6OnByZXNlbnRhdGlvblNpemUoKSBjb25zdAogICAg
IHJldHVybiBGbG9hdFNpemUoUEFMOjpDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50
YXRpb25EaW1lbnNpb25zKGZvcm1hdERlc2NyaXB0aW9uLCB0cnVlLCB0cnVlKSk7CiB9CiAKLXZv
aWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0g
ICAgb3V0LnByaW50KCJ7UFRTKCIsIHByZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNv
ZGVUaW1lKCksICIpLCBkdXJhdGlvbigiLCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClm
bGFncygpLCAiKSwgcHJlc2VudGF0aW9uU2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCkud2lkdGgo
KSwgIngiLCBwcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksICIpfSIpOwotfQotCiB2b2lkIE1l
ZGlhU2FtcGxlQVZGT2JqQzo6b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYgb2Zm
c2V0KQogewogICAgIENNSXRlbUNvdW50IGl0ZW1Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kZTliNmIwNzVkMjY4NGM1MDJkMjNjZTU0ZGJkMmQ0NzQwYWJjY2I4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKwordHlwZWRlZiBjb25z
dCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJl
ZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVHJhY2tJbmZvOworCitSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJh
Y2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYpOworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xYzNkOGFmYjc0ZmMxNTgyMjZjY2NlMjczZTRhYzMxNDNmMzQ0YTczCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRp
ZXMubW0KQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiQ01VdGlsaXRpZXMuaCIKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisj
aW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIK
KyNpbXBvcnQgIk1lZGlhU2FtcGxlLmgiCisjaW1wb3J0ICJNZWRpYVV0aWxpdGllcy5oIgorI2lt
cG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5o
IgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24uaD4KKyNpbXBvcnQgIkNv
cmVWaWRlb1NvZnRMaW5rLmgiCisjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgorI2lt
cG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9BdWRpb1Rvb2xib3hTb2Z0TGlu
ay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb0lu
Zm8mIGluZm8pCit7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGFzYmQgeyB9Owor
ICAgIGFzYmQubUZvcm1hdElEID0gaW5mby5jb2RlY05hbWUudmFsdWU7CisgICAgdWludDMyX3Qg
c2l6ZSA9IHNpemVvZihhc2JkKTsKKyAgICBhdXRvIGVycm9yID0gUEFMOjpBdWRpb0Zvcm1hdEdl
dFByb3BlcnR5KGtBdWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIGluZm8uY29va2llRGF0
YS0+c2l6ZSgpLCBpbmZvLmNvb2tpZURhdGEtPmRhdGEoKSwgJnNpemUsICZhc2JkKTsKKyAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0IGZhaWxlZCB3aXRoIGVycm9yICVkICglLjRzKSIs
IGVycm9yLCAoY2hhciAqKSZlcnJvcik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihhc2JkKSwgaW5mby5jb29raWVEYXRhLT5zaXplKCksIGluZm8uY29va2llRGF0
YS0+ZGF0YSgpKTsKK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQcmlt
YXJpZXMoUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIHByaW1hcmllcykKK3sKKyAgICBzd2l0
Y2ggKHByaW1hcmllcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpC
dDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1Jf
NzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhv
c3Bob3JzOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVf
MzIxMzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtOgor
ICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG06CisgICAgICAg
IHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2FzZSBQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzE6CisgICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOgorICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwOgorICAgICAgICByZXR1cm4gUEFM
OjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisKK3N0YXRpYyBDRlN0
cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJhY3Rl
cmlzdGljcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9J
VFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFXzI0ME1fMTk5NTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U21wdGVTdDIwODQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgIGNhc2UgUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ6CisgICAgY2Fz
ZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDoKKyAg
ICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lU
VV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlNtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGc6CisgICAgICAgIHJldHVybiBQQUw6
OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMToK
KyAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRp
b25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXRE
ZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICByZXR1
cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RhdGljIENG
U3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoUGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50cyBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50
THVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNy
TWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzOjpCdDQ3MGJnOgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUxNzBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5
OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbToKKyAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1Owor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRy
YWNrSW5mbyhjb25zdCBUcmFja0luZm8mIGluZm8pCit7CisgICAgaWYgKGluZm8uaXNBdWRpbygp
KSB7CisgICAgICAgIGF1dG8mIGF1ZGlvSW5mbyA9IGRvd25jYXN0PGNvbnN0IEF1ZGlvSW5mbz4o
aW5mbyk7CisgICAgICAgIGlmICghYXVkaW9JbmZvLmNvb2tpZURhdGEgfHwgIWF1ZGlvSW5mby5j
b29raWVEYXRhLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBzd2l0Y2ggKGF1ZGlvSW5mby5jb2RlY05hbWUudmFsdWUpIHsKKyNpZiBFTkFCTEUoT1BVUykK
KyAgICAgICAgY2FzZSAnb3B1cyc6CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFp
bGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGF1ZGlvSW5mbyk7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBjYXNlICd2b3JiJzoKKyAgICAgICAgICAgIGlmICgh
aXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihhdWRp
b0luZm8pOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaW5mby5pc1ZpZGVvKCkpIHsKKyAgICAg
ICAgYXV0byYgdmlkZW9JbmZvID0gZG93bmNhc3Q8Y29uc3QgVmlkZW9JbmZvPihpbmZvKTsKKwor
ICAgICAgICBhdXRvIGRhdGEgPSB2aWRlb0luZm8uYXRvbURhdGEtPmNyZWF0ZUNGRGF0YSgpOwor
ICAgICAgICBBU1NFUlQodmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAwOScgfHwgdmlkZW9JbmZv
LmNvZGVjTmFtZSA9PSAndnAwOCcpOworICAgICAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvbktl
eXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OworICAgICAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlv
blZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07CisgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbkRp
Y3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25m
aWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25m
aWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgICAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBl
eHRlbnNpb25zS2V5cyB7IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxl
RGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9OworICAgICAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBl
eHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9OworCisgICAgICAg
IGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2UgJiYgKnZpZGVvSW5mby5jb2xvclNw
YWNlLmZ1bGxSYW5nZSkgeworICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOworICAgICAgICAg
ICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLnByaW1hcmllcykgeworICAgICAgICAg
ICAgaWYgKGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMo
KnZpZGVvSW5mby5jb2xvclNwYWNlLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgICAgICBleHRl
bnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7CisgICAg
ICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNl
LnRyYW5zZmVyKSB7CisgICAgICAgICAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBj
b252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oKnZpZGVvSW5mby5jb2xvclNwYWNlLnRyYW5zZmVy
KSkgeworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZl
clRyYW5zZmVyRnVuY3Rpb25LZXkpOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMu
YXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UubWF0cml4KSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoKnZpZGVvSW5mby5jb2xv
clNwYWNlLm1hdHJpeCkpIHsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQo
a0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9u
c1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRh
dGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAgICAgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAg
ICAgQ01WaWRlb0NvZGVjVHlwZSBjb2RlYyA9IHZpZGVvSW5mby5jb2RlY05hbWUgPT0gInZwMDki
ID8ga0NNVmlkZW9Db2RlY1R5cGVfVlA5IDogJ3ZwMDgnOworICAgICAgICBpZiAobm9FcnIgIT0g
UEFMOjpDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29kZWMsIHZpZGVvSW5mby5zaXplLndpZHRoKCksIHZpZGVvSW5mby5zaXplLmhlaWdodCgpLCBl
eHRlbnNpb25zLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBhMTVm
NzFhNGM4NmRkYmVmMjcyNzI3MDczOWZlNjJlZDQ5OTI3YzM3Li5iNTI4OWRjYzg0MmY4NDljMDUw
YmFjZmRkOWMzZTliMDA5MTc3NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRl
ICJBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJDTVV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTIzNCwyNSArMjM1LDYgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgTG9nQXJndW1lbnQ8d2VibTo6SWQ+IHsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0
cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4g
ewotICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgdG9TdHJpbmcoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6U3RhdGUgc3RhdGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6Ok5v
bmU6IHJldHVybiAiTm9uZSJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0VibWw6IHJldHVybiAiUmVhZGluZ0VibWwiX3M7Ci0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRF
Ym1sOiByZXR1cm4gIlJlYWRFYm1sIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nU2VnbWVudDogcmV0dXJuICJSZWFkaW5nU2Vn
bWVudCJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpT
dGF0ZTo6UmVhZGluZ0luZm86IHJldHVybiAiUmVhZGluZ0luZm8iX3M7Ci0gICAgICAgIGNhc2Ug
V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRJbmZvOiByZXR1cm4g
IlJlYWRJbmZvIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlN0YXRlOjpSZWFkaW5nVHJhY2tzOiByZXR1cm4gIlJlYWRpbmdUcmFja3MiX3M7Ci0gICAg
ICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdU
cmFjazogcmV0dXJuICJSZWFkaW5nVHJhY2siX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRUcmFjazogcmV0dXJuICJSZWFkVHJhY2si
X3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6
OlJlYWRpbmdDbHVzdGVyOiByZXR1cm4gIlJlYWRpbmdDbHVzdGVyIl9zOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiAiVW5rbm93biJfczsKLSAgICB9Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjc2LDE0ICsyNTgsMTQgQEAgc3RhdGljIFN0
YXR1cyBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3RhdHVzKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2Vn
bWVudDo6UmVhZEVycm8KIHsKICAgICBzd2l0Y2ggKGVycm9yKSB7CiAgICAgY2FzZSBTb3VyY2VC
dWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6RW5kT2ZGaWxlOiByZXR1cm4gU3RhdHVz
KFN0YXR1czo6a0VuZE9mRmlsZSk7Ci0gICAgY2FzZSBTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21l
bnQ6OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6RXJyb3JDb2RlOjpSZWFkZXJGYWlsZWQpKTsKKyAgICBjYXNl
IFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm9yOjpGYXRhbEVycm9yOiByZXR1
cm4gU3RhdHVzKFN0YXR1czo6Q29kZShXZWJNUGFyc2VyOjpFcnJvckNvZGU6OlJlYWRlckZhaWxl
ZCkpOwogICAgIH0KIH0KIAotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJl
YWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJtOjpSZWFkZXIgeworY2xhc3MgV2ViTVBhcnNlcjo6U2Vn
bWVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJtOjpSZWFkZXIgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgYXBwZW5kU2VnbWVudChTZWdtZW50JiYg
c2VnbWVudCkKKyAgICB2b2lkIGFwcGVuZFNlZ21lbnQoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdt
ZW50JiYgc2VnbWVudCkKICAgICB7CiAgICAgICAgIG1fZGF0YS5wdXNoX2JhY2soV1RGTW92ZShz
ZWdtZW50KSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRTZWdtZW50ID09IG1fZGF0YS5lbmQoKSkK
QEAgLTQ2MCw4ICs0NDIsOCBAQCBwcml2YXRlOgogICAgICAgICBtX3Bvc2l0aW9uV2l0aGluU2Vn
bWVudCA9IDA7CiAgICAgfQogCi0gICAgU3RkTGlzdDxTZWdtZW50PiBtX2RhdGE7Ci0gICAgU3Rk
TGlzdDxTZWdtZW50Pjo6aXRlcmF0b3IgbV9jdXJyZW50U2VnbWVudCB7IG1fZGF0YS5lbmQoKSB9
OworICAgIFN0ZExpc3Q8U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50PiBtX2RhdGE7CisgICAg
U3RkTGlzdDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+OjppdGVyYXRvciBtX2N1cnJlbnRT
ZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CiAgICAgc2l6ZV90IG1fcG9zaXRpb24geyAwIH07CiAg
ICAgc2l6ZV90IG1fcG9zaXRpb25XaXRoaW5TZWdtZW50IHsgMCB9OwogfTsKQEAgLTU1MywxMzkg
KzUzNSw0OCBAQCBzdGF0aWMgYm9vbCBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkKICNlbmRpZiAvLyAh
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
Ojppc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQorV2ViTVBhcnNlcjo6V2ViTVBhcnNlcihD
YWxsYmFjayYgY2FsbGJhY2spCisgICAgOiBtX3BhcnNlcihtYWtlVW5pcXVlV2l0aG91dEZhc3RN
YWxsb2NDaGVjazxXZWJtUGFyc2VyPigpKQorICAgICwgbV9yZWFkZXIobWFrZVVuaXF1ZVJlZjxT
ZWdtZW50UmVhZGVyPigpKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKLSAgICByZXR1
cm4gUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9ybWF0UmVhZGVyRW5hYmxlZCgp
ICYmIGNhbkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJzZXJBdmFpbGFibGUoKTsKLX0K
LQotTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCi17Ci0jaWYg
RU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCi0gICAgaWYgKCFp
c1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICBhdXRvIGNvbnRhaW5lclR5cGUg
PSB0eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBib29sIGlzQXVkaW9Db250YWluZXJUeXBlID0g
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAiYXVkaW8vd2VibSIpOwotICAg
IGJvb2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRh
aW5lclR5cGUsICJ2aWRlby93ZWJtIik7Ci0gICAgaWYgKCFpc0F1ZGlvQ29udGFpbmVyVHlwZSAm
JiAhaXNWaWRlb0NvbnRhaW5lclR5cGUpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotICAgIAotICAgIGJvb2wgaXNBbnlBdWRp
b0NvZGVjQXZhaWxhYmxlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFZPUkJJUykKLSAgICBpc0FueUF1
ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7Ci0jZW5kaWYK
LSNpZiBFTkFCTEUoT1BVUykKLSAgICBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNPcHVz
RGVjb2RlckF2YWlsYWJsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAoaXNBdWRpb0NvbnRhaW5lclR5
cGUgJiYgIWlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICBib29sIGlzQW55
Q29kZWNBdmFpbGFibGUgPSBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGU7Ci0jaWYgRU5BQkxFKFZQ
OSkKLSAgICBpc0FueUNvZGVjQXZhaWxhYmxlIHw9IGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpOwot
I2VuZGlmCi0KLSAgICBpZiAoIWlzQW55Q29kZWNBdmFpbGFibGUpCi0gICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgYXV0
byBjb2RlY3MgPSB0eXBlLmNvZGVjcygpOwotICAgIGlmIChjb2RlY3MuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpNYXlCZVN1cHBvcnRl
ZDsKLQotICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKLSNpZiBFTkFCTEUoVlA5KQot
ICAgICAgICBpZiAoY29kZWMuc3RhcnRzV2l0aCgidnAwOSIpIHx8IGNvZGVjLnN0YXJ0c1dpdGgo
InZwMDgiKSB8fCBlcXVhbChjb2RlYywgInZwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA5IikpIHsK
LQotICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRl
ZDsKLQotICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJh
bWV0ZXJzKGNvZGVjKTsKLSAgICAgICAgICAgIGlmICghY29kZWNQYXJhbWV0ZXJzKQotICAgICAg
ICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3Vw
cG9ydGVkOwotCi0gICAgICAgICAgICBpZiAoIWlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRT
dXBwb3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKLQotI2lmIEVOQUJM
RShWT1JCSVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAidm9yYmlzIikgewotICAgICAgICAgICAg
aWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
TWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKQotCi0j
aWYgRU5BQkxFKE9QVVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAib3B1cyIpIHsKLSAgICAgICAg
ICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShPUFVTKQotCi0g
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOwotICAgIH0KLQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
OklzU3VwcG9ydGVkOwotCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLQotICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotI2Vu
ZGlmIC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQogfQog
Ci1SZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQorV2ViTVBhcnNlcjo6fldlYk1QYXJzZXIo
KQogewotICAgIGlmIChpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKHR5cGUpICE9IE1lZGlhUGxheWVy
RW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQpCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAotU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCi0g
ICAgOiBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+KCkpCit2b2lkIFdlYk1Q
YXJzZXI6OnJlc2V0U3RhdGUoKQogewotICAgIGlmIChpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkK
LSAgICAgICAgbV9wYXJzZXIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxXZWJt
UGFyc2VyPigpOworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAg
IGlmIChtX3BhcnNlcikKKyAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKKyAgICBtX3JlYWRl
ci0+cmVzZXQoKTsKKyAgICBtX3N0YXRlID0gbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9jZXNz
ZWQgPyBTdGF0ZTo6UmVhZGluZ1NlZ21lbnQgOiBTdGF0ZTo6Tm9uZTsKKyAgICBtX2luaXRpYWxp
emF0aW9uU2VnbWVudCA9IG51bGxwdHI7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNv
dW50ZXJlZCA9IGZhbHNlOworICAgIG1fY3VycmVudEJsb2NrLnJlc2V0KCk7CisgICAgZm9yIChh
dXRvJiB0cmFjayA6IG1fdHJhY2tzKQorICAgICAgICB0cmFjay0+cmVzZXQoKTsKIH0KIAotU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6flNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQordm9pZCBXZWJN
UGFyc2VyOjpyZXNldCgpCiB7CisgICAgbV9yZWFkZXItPnJlc2V0KCk7CisgICAgbV9wYXJzZXIt
PkRpZFNlZWsoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRh
KFNlZ21lbnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIsIEFwcGVuZEZsYWdzIGFwcGVuZEZsYWdzKQoraW50IFdlYk1QYXJzZXI6OnBhcnNl
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKCFtX3Bh
cnNlcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIs
IGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVp
dHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIpOwotCi0gICAgaWYgKGFw
cGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7Ci0gICAgICAgIG1fcmVh
ZGVyLT5yZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwotICAgIH0KKyAgICBp
ZiAoIW1fcGFyc2VyKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbV9yZWFkZXItPmFwcGVuZFNl
Z21lbnQoV1RGTW92ZShzZWdtZW50KSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBt
X3N0YXR1cyA9IG1fcGFyc2VyLT5GZWVkKHRoaXMsICZtX3JlYWRlcik7CiAgICAgICAgIGlmICht
X3N0YXR1cy5vaygpIHx8IG1fc3RhdHVzLmNvZGUgPT0gU3RhdHVzOjprRW5kT2ZGaWxlIHx8IG1f
c3RhdHVzLmNvZGUgPT0gU3RhdHVzOjprV291bGRCbG9jaykgewogICAgICAgICAgICAgbV9yZWFk
ZXItPnJlY2xhaW1TZWdtZW50cygpOwotCi0gICAgICAgICAgICAvLyBBdWRpbyB0cmFja3MgYXJl
IGdyb3VwZWQgaW50byBtZXRhLXNhbXBsZXMgb2YgYSBkdXJhdGlvbiBubyBtb3JlIHRoYW4gbV9t
aW5pbXVtU2FtcGxlRHVyYXRpb24uCi0gICAgICAgICAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBh
IGZpbGUsIG5vIG1vcmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBl
bWl0IGFueSBwZW5kaW5nCi0gICAgICAgICAgICAvLyBhdWRpbyBidWZmZXJzLgotICAgICAgICAg
ICAgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0KLSAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChtX3N0YXR1cy5jb2RlICE9IHN0YXRpY19jYXN0PGludDMy
X3Q+KEVycm9yQ29kZTo6UmVjZWl2ZWRFYm1sSW5zaWRlU2VnbWVudCkpCkBAIC03MTAsNjEgKzYw
MSwyNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYm
IHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICBjb250aW51ZTsKICAgICB9
CiAKLSAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgInN0YXR1cy5jb2Rl
KCIsIG1fc3RhdHVzLmNvZGUsICIpIik7Ci0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFj
ayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNvZGUgPSBtX3N0YXR1cy5j
b2RlXSB7Ci0gICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxi
YWNrKQotICAgICAgICAgICAgbV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFj
ayhjb2RlKTsKLSAgICB9KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgcmV0dXJu
IG1fc3RhdHVzLmNvZGU7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQ
ZW5kaW5nTWVkaWFEYXRhKCkKK3ZvaWQgV2ViTVBhcnNlcjo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKQogeworICAgIG1fbG9nZ2VyID0g
JmxvZ2dlcjsKKyAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJZGVudGlmaWVyOwogfQogCi12b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFj
a0lEKGJvb2wsIHVpbnQ2NF90KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQo
dWludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmVzZXRQYXJzZXJTdGF0ZSgpCi17Ci0g
ICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0gICAgaWYgKG1fcGFyc2Vy
KQotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwotICAgIG1fcmVhZGVyLT5yZXNldCgpOwot
ICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/IFN0YXRlOjpS
ZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOwotICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50
ID0gbnVsbHB0cjsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFs
c2U7Ci0gICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpCi0gICAgICAgIHRyYWNrLT5yZXNldCgpOwotfQotCi12b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmludmFsaWRhdGUoKQordm9pZCBXZWJNUGFyc2VyOjppbnZhbGlkYXRlKCkK
IHsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKLQogICAgIG1fcGFy
c2VyID0gbnVsbHB0cjsKICAgICBtX3RyYWNrcy5jbGVhcigpOwogICAgIG1faW5pdGlhbGl6YXRp
b25TZWdtZW50ID0gbnVsbHB0cjsKICAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwogfQogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dl
ciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKLXsKLSAgICBtX2xvZ2dlciA9ICZsb2dnZXI7
Ci0gICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKLX0KLQotYXV0byBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051
bWJlcikgLT4gVHJhY2tEYXRhKgorYXV0byBXZWJNUGFyc2VyOjp0cmFja0RhdGFGb3JUcmFja051
bWJlcih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRhKgogewogICAgIGZvciAoYXV0
byYgdHJhY2sgOiBtX3RyYWNrcykgewogICAgICAgICBpZiAodHJhY2stPnRyYWNrKCkudHJhY2tf
bnVtYmVyLmlzX3ByZXNlbnQoKSAmJiB0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIudmFsdWUo
KSA9PSB0cmFja051bWJlcikKQEAgLTc3Myw3ICs2MjcsNyBAQCBhdXRvIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAt
PiBUcgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25FbGVtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQWN0
aW9uKiBhY3Rpb24pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4oY29uc3QgRWxl
bWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgQVNTRVJUKGFj
dGlvbik7CiAgICAgaWYgKCFhY3Rpb24pCkBAIC04NDUsNyArNjk5LDcgQEAgU3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYg
bWV0YWRhdGEsIEEKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0K
IAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVt
ZW50TWV0YWRhdGEmIG1ldGFkYXRhKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWxlbWVudEVuZChj
b25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJ
QkxFKExPR0lERU5USUZJRVIpOwogCkBAIC04NjEsMjQgKzcxNSwyMCBAQCBTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0
YWRhdGEpCiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgInN0YXRlKCIs
IG9sZFN0YXRlLCAiLT4iLCBtX3N0YXRlLCAiKSwgaWQoIiwgbWV0YWRhdGEuaWQsICIpLCBzaXpl
KCIsIG1ldGFkYXRhLnNpemUsICIpIik7CiAKICAgICBpZiAobWV0YWRhdGEuaWQgPT0gSWQ6OmtU
cmFja3MpIHsKLSAgICAgICAgaWYgKCFtX2tleUlkcy5pc0VtcHR5KCkgJiYgIW1fZGlkUHJvdmlk
ZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrKSB7
CisgICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFtX2NhbGxiYWNrLmNhbkRlY3J5
cHQoKSkgewogICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIs
ICJFbmNvdW50ZXJlZCBlbmNyeXB0ZWQgY29udGVudCB3aXRob3V0IGFuIGtleSByZXF1ZXN0IGNh
bGxiYWNrIik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShFcnJvckNv
ZGU6OkNvbnRlbnRFbmNyeXB0ZWQpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2luaXRp
YWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkKSB7Ci0gICAgICAgICAgICBtX2NhbGxPbkNsaWVu
dFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5p
dGlhbGl6YXRpb25TZWdtZW50ID0gV1RGTW92ZSgqbV9pbml0aWFsaXphdGlvblNlZ21lbnQpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25E
YXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIG1fZGlkUGFyc2VJbml0aWFsaXphdGlv
bkRhdGFDYWxsYmFjayhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCkpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5j
b3VudGVyZWQpCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBhcnNlZEluaXRpYWxpemF0aW9uRGF0
YShXVEZNb3ZlKCptX2luaXRpYWxpemF0aW9uU2VnbWVudCkpOwogICAgICAgICBtX2luaXRpYWxp
emF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFsc2U7CiAgICAgICAgIG1faW5pdGlhbGl6YXRp
b25TZWdtZW50ID0gbnVsbHB0cjsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9j
ZXNzZWQgPSB0cnVlOwogCiAgICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIGtleUlkUGFpciA6IG1fa2V5SWRzKQotICAgICAgICAgICAgICAg
IG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RENhbGxiYWNrKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlkUGFpci5maXJzdCk7Cisg
ICAgICAgICAgICAgICAgbV9jYWxsYmFjay5jb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9u
RGF0YUZvclRyYWNrSUQoV1RGTW92ZShrZXlJZFBhaXIuc2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0
KTsKICAgICAgICAgfQogICAgICAgICBtX2tleUlkcy5jbGVhcigpOwogICAgIH0KQEAgLTg4Niw3
ICs3MzYsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNv
bnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVi
bWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKK1N0YXR1cyBXZWJN
UGFyc2VyOjpPbkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkK
IHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtODk0LDcg
Kzc0NCw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwoY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICAgICAgcmV0dXJuIFN0YXR1cyhT
dGF0dXM6OkNvZGUoRXJyb3JDb2RlOjpJbnZhbGlkRG9jVHlwZSkpOwogCiAgICAgbV9pbml0aWFs
aXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IHRydWU7Ci0gICAgbV9pbml0aWFsaXphdGlvblNl
Z21lbnQgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxJbml0aWFsaXphdGlvblNl
Z21lbnQ+KCk7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBtYWtlVW5pcXVlV2l0aG91
dEZhc3RNYWxsb2NDaGVjazxTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVu
dD4oKTsKICAgICAvLyBUT0RPOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2UgaGVyZSwgd2lsbCBwcmV2
ZW50IGFkZGluZyBhIG5ldyBtZWRpYSBzZWdtZW50IHNob3VsZCBhCiAgICAgLy8gcGFydGlhbCBp
bml0IHNlZ21lbnQgYmUgZW5jb3VudGVyZWQgYWZ0ZXIgYSBjYWxsIHRvIHNvdXJjZUJ1ZmZlci5h
Ym9ydCgpLgogICAgIC8vIEl0J3MgcHJvYmFibHkgZmluZSBhcyBuby1vbmUgaW4gdGhlaXIgcmln
aHQgbWluZCBzaG91bGQgc2VuZCBwYXJ0aWFsIGluaXQgc2VnbWVudCBvbmx5CkBAIC05MDUsNyAr
NzU1LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVt
ZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25T
ZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9uKiBhY3Rpb24pCitTdGF0
dXMgV2ViTVBhcnNlcjo6T25TZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0
aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7
CiAKQEAgLTkyMiw3ICs3NzIsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25T
ZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9uKiBhYwogICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEluZm8mIGlu
Zm8pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IEluZm8mIGluZm8pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
Uik7CiAKQEAgLTkzOCw3ICs3ODgsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEluZm8mIGluZm8pCiAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25z
dCBDbHVzdGVyJiBjbHVzdGVyLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpP
bkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBDbHVzdGVyJiBjbHVz
dGVyLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSKTsKIApAQCAtOTU0LDcgKzgwNCw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBDbHVzCiAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwg
Y29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPblRyYWNr
RW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRy
eSkKIHsKICAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tfdHlwZS5pc19wcmVzZW50KCkgfHwgIXRy
YWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKQEAgLTEwMTksMTQgKzg2OSwxNCBAQCBTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IFRyYWNrRQogCiAjaWYgRU5BQkxFKFZPUkJJUykKICAgICBpZiAoY29kZWNTdHJpbmcgPT0g
IkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3Ry
YWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJh
Y2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAg
bV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMs
IHRyYWNrRW50cnksICp0aGlzKSk7CiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tD
b21wbGV0ZWQpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QVVMpCiAgICAgaWYgKGNv
ZGVjU3RyaW5nID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkgewotICAg
ICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9w
dXMsIHRyYWNrRW50cnksICp0aGlzLCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKSk7Cisg
ICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6
T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtPa0NvbXBsZXRlZCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDM1LDcgKzg4NSw3IEBAIFN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFk
YXRhJiwgY29uc3QgVHJhY2tFCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrQmVn
aW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFj
dGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVu
dE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJ
TkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA1MCw3ICs5MDAsNyBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0JlZ2luKGNvbnN0
IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJs
b2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJikKK3dlYm06OlN0YXR1
cyBXZWJNUGFyc2VyOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJs
b2NrJikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAt
MTA1OSw3ICs5MDksNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25C
bG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbAogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2Vi
TVBhcnNlcjo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0
IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZf
UE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwNzQsNyArOTI0LDcgQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVt
ZW50TWV0YWRhdGEmLAogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwog
fQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0Vu
ZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYpCit3ZWJtOjpTdGF0
dXMgV2ViTVBhcnNlcjo6T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBTaW1wbGVCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJ
RklFUik7CiAKQEAgLTEwODMsNyArOTMzLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY28KICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVs
ZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1Q
YXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdl
Ym06OkFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIpOwogCkBAIC0xMDk1LDcgKzk0NSw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhCiAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxl
bWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkKK3dlYm06
OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1l
dGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkKIHsKICAgICBJTkZP
X0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKICAgICBpZiAoYmxvY2tHcm91cC5ibG9j
ay5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcuaXNfcHJlc2VudCgp
KSB7CkBAIC0xMTA1LDE3ICs5NTUsMTMgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEKICAgICAg
ICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiSWdub3JpbmcgdW5r
bm93biB0cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOwogICAgICAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRyYWNr
RGF0YS0+dHJhY2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAuZGlzY2Fy
ZF9wYWRkaW5nLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgICAgICBtX2NhbGxPbkNsaWVudFRocmVh
ZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9
IHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQudmFsdWUoKSwgcGFkZGluZyA9IE1lZGlhVGlt
ZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29uZHMpXSgp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKQot
ICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sodHJhY2tJ
RCwgcGFkZGluZyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHJh
Y2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNj
YXJkX3BhZGRpbmcudmFsdWUoKSA+IDApCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBhcnNlZFRy
aW1taW5nRGF0YSh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCksIE1lZGlhVGlt
ZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29uZHMpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0
YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5n
KQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCiB7CiAg
ICAgQVNTRVJUKHJlYWRlcik7CiAgICAgaWYgKCFyZWFkZXIpCkBAIC0xMTUyLDMyICs5OTgsMjAg
QEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUoY29uc3QgRnJh
bWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWQKICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZy
YW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIFBBTDo6Q01UaW1lTWFr
ZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9j
ay0+bnVtX2ZyYW1lcyk7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgq
cmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIE1lZGlhVGltZShibG9jay0+dGltZWNv
ZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVtX2ZyYW1lcyk7
CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YShSZXRh
aW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJhY2tJRCwg
c3RkOjpvcHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9mZnNldCkKLXsKLSAgICBtX2NhbGxPbkNs
aWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwg
c2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBieXRlUmFuZ2VP
ZmZzZXRdICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNh
bGxiYWNrKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8gbWVkaWFTYW1wbGUg
PSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQp
OwotICAgICAgICBpZiAoYnl0ZVJhbmdlT2Zmc2V0KQotICAgICAgICAgICAgbWVkaWFTYW1wbGUt
PnNldEJ5dGVSYW5nZU9mZnNldCgqYnl0ZVJhbmdlT2Zmc2V0KTsKLSAgICAgICAgbV9kaWRQcm92
aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5
U3RyaW5nKCkpOwotICAgIH0pOwotfQogCiAjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigp
LT5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NO
YW1lKCksIF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJZGVudGlmaWVyKCkpLCBfX1ZBX0FSR1NfXykK
IAotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRh
Ojpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVu
Z3RoKSBjb25zdAorUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpj
b250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3Ro
KSBjb25zdAogewotICAgIGlmIChvZmZzZXQgKyBsZW5ndGggPiBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXJzLnNpemUoKSkKKyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBtX2NvbXBs
ZXRlQmxvY2tCdWZmZXJzLmdldCgpLT5nZXRDb250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7
CisgICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEob2Zm
c2V0LCBsZW5ndGgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJt
OjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQord2Vi
bTo6U3RhdHVzIFdlYk1QYXJzZXI6OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFk
ZXImIHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90
KiBieXRlc1JlbWFpbmluZykKIHsKICAgICBpZiAobV9jb21wbGV0ZVBhY2tldFNpemUgJiYgKm1f
Y29tcGxldGVQYWNrZXRTaXplICE9IG1ldGFkYXRhLnNpemUpIHsKICAgICAgICAgLy8gVGhlIHBh
Y2tldCdzIG1ldGFkYXRhIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnRseSBwZW5kaW5nIGNvbXBs
ZXRlIHBhY2tldDsgcmVzdGFydC4KQEAgLTExOTAsNyArMTAyNCw3IEBAIHdlYm06OlN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVh
ZGVyJiByZWFkCiAKICAgICB3aGlsZSAoKmJ5dGVzUmVtYWluaW5nKSB7CiAgICAgICAgIHVpbnQ2
NF90IGJ5dGVzUmVhZDsKLSAgICAgICAgYXV0byBzdGF0dXMgPSBzdGF0aWNfY2FzdDxTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpTZWdtZW50UmVhZGVyJj4ocmVhZGVyKS5SZWFkSW50bygqYnl0ZXNS
ZW1haW5pbmcsIG1fY3VycmVudEJsb2NrQnVmZmVyLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYXV0
byBzdGF0dXMgPSBzdGF0aWNfY2FzdDxXZWJNUGFyc2VyOjpTZWdtZW50UmVhZGVyJj4ocmVhZGVy
KS5SZWFkSW50bygqYnl0ZXNSZW1haW5pbmcsIG1fY3VycmVudEJsb2NrQnVmZmVyLCAmYnl0ZXNS
ZWFkKTsKICAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKICAgICAgICAgbV9w
YXJ0aWFsQnl0ZXNSZWFkICs9IGJ5dGVzUmVhZDsKIApAQCAtMTIwMiw5OCArMTAzNiw2NiBAQCB3
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVE
YXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmIChtX3BhcnRpYWxCeXRlc1JlYWQgPCAqbV9j
b21wbGV0ZVBhY2tldFNpemUpCiAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3Rh
dHVzOjprT2tQYXJ0aWFsKTsKIAotICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuYXBwZW5kKG1f
Y3VycmVudEJsb2NrQnVmZmVyLnRha2UoKSk7CisgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0g
bV9jdXJyZW50QmxvY2tCdWZmZXIudGFrZSgpOworICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0g
c3RkOjpudWxsb3B0OwogICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1cm4g
d2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9w
dGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KQotewotICAgIGlmIChtX3BhY2tl
dFNpemVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb21wbGV0ZUNN
QmxvY2tCdWZmZXJzID0gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy50YWtlKCktPmNyZWF0ZUNNQmxv
Y2tCdWZmZXIoKTsKLSAgICBpZiAoIWNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7
Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgY29tcGxldGVDTUJsb2NrQnVmZmVycy5nZXQoKSwgZm9ybWF0RGVzY3JpcHRp
b24oKS5nZXQoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5zaXplKCks
IG1fcGFja2V0VGltaW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNp
emVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZh
aWxlZCB3aXRoICVkIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RQ
cm9jZXNzKHJhd1NhbXBsZUJ1ZmZlcik7Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjaygpLnRy
YWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEoYWRvcHRDRihy
YXdTYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwotfQotCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRl
ZEZyYW1lc1N0YXRlKCkKK3ZvaWQgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29t
cGxldGVkRnJhbWVzU3RhdGUoKQogewogICAgIG1fa2V5RnJhbWVzLmNsZWFyKCk7CiAgICAgVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiB9CiAKLXdlYm06OlN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQp
Cit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGlt
ZSwgaW50KQogewogI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzdGF0dXMgPSByZWFkRnJhbWVE
YXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKICAgICBpZiAoIXN0YXR1cy5j
b21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAorICAgIG1fbGFzdFBvc2l0
aW9uID0gbWV0YWRhdGEucG9zaXRpb247CisKICAgICBjb25zdGV4cHIgc2l6ZV90IG1heEhlYWRl
clNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVuY29tcHJlc3NlZCBo
ZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5kIGhpZ2guCi0gICAg
c2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCAqbV9j
b21wbGV0ZVBhY2tldFNpemUpOwotICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3Vv
dXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQsIHNlZ21lbnRI
ZWFkZXJMZW5ndGgpOworICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVuZ3RoID0gc3RkOjptaW4o
bWF4SGVhZGVyU2l6ZSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5zaXplKCkpOworICAgIGF1dG8g
Y29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIHNlZ21l
bnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewotICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxl
QnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CisgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAg
IHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CiAgICAgY29uc3Qg
dWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwogCiAg
ICAgYm9vbCBpc0tleSA9IGZhbHNlOwotICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZQ
OSkgewogICAgICAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVy
KGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVudEhlYWRlckxlbmd0aCkpCiAgICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAKICAgICAgICAgaWYgKG1faGVhZGVy
UGFyc2VyLmtleSgpKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7Ci0gICAgICAgICAgICBh
dXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVh
ZGVyUGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsK
LSAgICAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNj
cmlwdGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRG
b3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7CisgICAgICAgICAg
ICBzZXRGb3JtYXREZXNjcmlwdGlvbihjcmVhdGVWaWRlb0luZm9Gcm9tVlA5SGVhZGVyUGFyc2Vy
KG1faGVhZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKSk7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDgpIHsKICAgICAgICAg
YXV0byBoZWFkZXIgPSBwYXJzZVZQOEZyYW1lSGVhZGVyKGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVu
dEhlYWRlckxlbmd0aCk7CiAgICAgICAgIGlmIChoZWFkZXIgJiYgaGVhZGVyLT5rZXlmcmFtZSkg
ewogICAgICAgICAgICAgaXNLZXkgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBmb3JtYXREZXNj
cmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0
cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKLSAgICAgICAgICAgIGlmICghZm9ybWF0RGVz
Y3JpcHRpb24pIHsKLSAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQWCBoZWFkZXIiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
cm1hdERlc2NyaXB0aW9uKSk7CisgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihjcmVh
dGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5j
b2xvdXIpKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlcy5pbmZvKCkpCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuc2V0SW5mbyhmb3Jt
YXREZXNjcmlwdGlvbigpKTsKKyAgICBlbHNlIGlmIChmb3JtYXREZXNjcmlwdGlvbigpICYmICpm
b3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAg
ICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOworCiAgICAgYXV0byB0cmFjayA9IHRoaXMtPnRy
YWNrKCk7Ci0gICAgLy8gRklYTUU6IEEgYmxvY2sgbWlnaHQgY29udGFpbiBtb3JlIHRoYW4gb25l
IGZyYW1lLCBidXQgb25seSB0aGlzIGZyYW1lIGhhcyBiZWVuIHJlYWQgaW50byBgY29tcGxldGVC
bG9ja0J1ZmZlcmAuCi0gICAgLy8gQmVsb3cgd2UgY3JlYXRlIHNhbXBsZSBidWZmZXJzIGZvciBl
YWNoIGZyYW1lLCBlYWNoIHdpdGggdGhlIGJsb2NrJ3MgdGltZWNvZGUgYW5kIGBudW1fZnJhbWVz
YCB2YWx1ZS4KLSAgICAvLyBTaG91bGRuJ3Qgd2UgY3JlYXRlIGp1c3Qgb25lIHNhbXBsZSBidWZm
ZXIgb25jZSBhbGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhhdmUgYmVlbiByZWFkIGludG8gYGN1cnJl
bnRCbG9ja0J1ZmZlcmA/CiAKICAgICB1aW50NjRfdCBkdXJhdGlvbiA9IDA7CiAgICAgaWYgKHRy
YWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQotICAgICAgICBkdXJhdGlvbiA9IHRy
YWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxl
IC8ga191c19pbl9zZWNvbmRzOworICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVy
YXRpb24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkgLyBrX3VzX2luX3Nl
Y29uZHM7CiAKLSAgICBtX2tleUZyYW1lcy5hcHBlbmQoaXNLZXkpOwotICAgIG1fcGFja2V0U2l6
ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmFw
cGVuZCh7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lc2Nh
bGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH0pOwotICAgIG1fY3VycmVu
dFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNrZXRTaXplOwotICAgIG1fY29tcGxl
dGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OworICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMu
YXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1
cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpKSwgbV9jb21wbGV0ZUJsb2NrQnVm
ZmVyLnJlbGVhc2VOb25OdWxsKCksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJ
c1N5bmMgOiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CiAKQEAgLTEzMDcsNDUgKzExMDksMTkgQEAgd2VibTo6U3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdl
Ym06OlJlYWQKICNlbmRpZgogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVv
VHJhY2tEYXRhOjpwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIp
Ci17Ci0gICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNh
bXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKLSAgICBBU1NFUlQo
YXR0YWNobWVudHNBcnJheSk7Ci0gICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7Ci0gICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0
YWNobWVudHNBcnJheSByZXR1cm5lZCBOVUxMIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoc2l6ZV90KENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KSkgPT0g
bV9rZXlGcmFtZXMuc2l6ZSgpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAg
ICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENG
TXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNB
cnJheSwgaSkpOwotICAgICAgICBpZiAoIW1fa2V5RnJhbWVzW2ldKQotICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtl
eV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkK
K3ZvaWQgV2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3Rh
dGUoKQogewogICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgPSAwOwogICAgIFRyYWNrRGF0
YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6
UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCog
Ynl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBs
ZUNvdW50KQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1l
RnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRh
ZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRh
dGlvblRpbWUsIGludCkKIHsKLSAgICBpZiAobV9wYWNrZXRUaW1pbmdzLnNpemUoKSkgewotICAg
ICAgICBhdXRvJiBsYXN0VGltaW5nID0gbV9wYWNrZXRUaW1pbmdzLmxhc3QoKTsKLSAgICAgICAg
aWYgKFBBTDo6Q01UaW1lQ29tcGFyZShQQUw6OkNNVGltZUFkZChsYXN0VGltaW5nLmR1cmF0aW9u
LCBsYXN0VGltaW5nLnByZXNlbnRhdGlvblRpbWVTdGFtcCksIHByZXNlbnRhdGlvblRpbWUpKSB7
Ci0gICAgICAgICAgICAvLyBEaXNjb250aW51aXR5IGVuY291bnRlcmVkLCBlbWl0IHRoZSBwcmV2
aW91c2x5IGRlbXV4ZWQgc2FtcGxlcy4KLSAgICAgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMo
KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShy
ZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxl
dGVkX29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICBpZiAobV9wYWNrZXRTaXpl
cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRh
dGlvblRpbWU7CisgICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKIAogICAg
IGlmICghZm9ybWF0RGVzY3JpcHRpb24oKSkgewogICAgICAgICBpZiAoIXRyYWNrKCkuY29kZWNf
cHJpdmF0ZS5pc19wcmVzZW50KCkpIHsKQEAgLTEzNTMsMTkgKzExMjksMTggQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKICAgICAgICAgfQogCi0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgUmVmUHRyPEF1ZGlvSW5mbz4gZm9y
bWF0RGVzY3JpcHRpb247CiAgICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2Rl
Y19wcml2YXRlLnZhbHVlKCk7CiAgICAgICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6Vm9y
YmlzKQotICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHBy
aXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKICAgICAgICAgZWxzZSBpZiAo
Y29kZWMoKSA9PSBDb2RlY1R5cGU6Ok9wdXMpIHsKLSAgICAgICAgICAgIGF1dG8gY29udGlndW91
c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5
dGVPZmZzZXQsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgICAgICAgICBhdXRvIGNvbnRp
Z3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmlt
dW1GcmFtZURhdGFTaXplKTsKICAgICAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewog
ICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tE
YXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBi
bG9jayIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWlu
aW5nKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJsb2NrQnVm
ZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKICAgICAgICAgICAgIE9wdXNDb29r
aWVDb250ZW50cyBjb29raWVDb250ZW50czsKLSAgICAgICAgICAgIGlmICghcGFyc2VPcHVzUHJp
dmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBs
ZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50cykpIHsKKyAgICAg
ICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2
YXRlRGF0YS5kYXRhKCksIGNvbnRpZ3VvdXNCdWZmZXItPnNpemUoKSwgY29udGlndW91c0J1ZmZl
ci0+ZGF0YSgpLCBjb29raWVDb250ZW50cykpIHsKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gcGFyc2UgT3B1cyBwcml2YXRlIGRhdGEiKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAg
ICAgICAgICAgICB9CkBAIC0xMzc1LDM1ICsxMTUwLDI5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpS
ZWFkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZyYW1lc1BlclBhY2tldCA9IGNvb2tp
ZUNvbnRlbnRzLmZyYW1lc1BlclBhY2tldDsKICAgICAgICAgICAgIG1fZnJhbWVEdXJhdGlvbiA9
IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVyYXRpb247Ci0gICAgICAgICAgICBmb3JtYXREZXNjcmlw
dGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvb2tpZUNvbnRlbnRzKTsK
KyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb29r
aWVDb250ZW50cyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9u
KSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8g
Y3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIGF1ZGlvIHRyYWNrIGhlYWRlciIpOworICAg
ICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIGNyZWF0ZSBB
dWRpb0luZm8gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIiKTsKICAgICAgICAgICAgIHJldHVybiBT
a2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
c3RyZWFtRGVzY3JpcHRpb24gPSBQQUw6OkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVh
bUJhc2ljRGVzY3JpcHRpb24oZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOwotICAgICAgICBpZiAo
IXN0cmVhbURlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
IGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fcGFja2V0RHVyYXRpb24gPSBQQUw6OkNNVGltZU1h
a2Uoc3RyZWFtRGVzY3JpcHRpb24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0aW9u
LT5tU2FtcGxlUmF0ZSk7CisgICAgICAgIG1fcGFja2V0RHVyYXRpb24gPSBNZWRpYVRpbWUoZm9y
bWF0RGVzY3JpcHRpb24tPmZyYW1lc1BlclBhY2tldCwgZm9ybWF0RGVzY3JpcHRpb24tPnJhdGUp
OwogCi0gICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKKyAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oZm9ybWF0RGVzY3JpcHRpb24ucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgfSBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1
cykgewogICAgICAgICAvLyBPcHVzIHRlY2huaWNhbGx5IGFsbG93cyB0aGUgZnJhbWUgZHVyYXRp
b24gYW5kIGZyYW1lcy1wZXItcGFja2V0IHZhbHVlcyB0byBjaGFuZ2UgZnJvbSBwYWNrZXQgdG8g
cGFja2V0LgogICAgICAgICAvLyBDb3JlQXVkaW8gZG9lc24ndCBzdXBwb3J0IEFTQkQgdmFsdWVz
IGxpa2UgdGhlc2UgdG8gY2hhbmdlIG9uIGEgcGVyLXBhY2tldCBiYXNpcywgc28gdGhyb3cgYW4g
ZXJyb3Igd2hlbgogICAgICAgICAvLyB0aGF0IGtpbmQgb2YgdmFyaWFiaWxpdHkgaXMgZW5jb3Vu
dGVyZWQuCiAgICAgICAgIE9wdXNDb29raWVDb250ZW50cyBjb29raWVDb250ZW50czsKICAgICAg
ICAgYXV0byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKLSAg
ICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZm
ZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAg
ICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZm
ZXIoMCwga09wdXNNaW5pbXVtRnJhbWVEYXRhU2l6ZSk7CiAgICAgICAgIGlmICghY29udGlndW91
c0J1ZmZlcikgewogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVk
aW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJsZSB0byBjcmVhdGUgY29udGlndW91
cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1Jl
bWFpbmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJE
YXRhID0gY29udGlndW91c0J1ZmZlci0+ZGF0YSgpOwotICAgICAgICBpZiAoIXBhcnNlT3B1c1By
aXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21w
bGV0ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpCisgICAgICAg
IGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0
YS5kYXRhKCksIGNvbnRpZ3VvdXNCdWZmZXItPnNpemUoKSwgY29udGlndW91c0J1ZmZlci0+ZGF0
YSgpLCBjb29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1l
c1BlclBhY2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAgICAgfHwgY29va2llQ29u
dGVudHMuZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsKICAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIk9wdXMgZnJhbWVzLXBlci1wYWNrZXQgY2hhbmdl
ZCB3aXRoaW4gYSB0cmFjazsgZXJyb3IiKTsKQEAgLTE0MTEsNDEgKzExODAsMzMyIEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3BhY2tldFNpemVz
LmFwcGVuZCgqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIG1fcGFja2V0VGltaW5ncy5hcHBl
bmQoeyBtX3BhY2tldER1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLCBQQUw6OmtDTVRpbWVJbnZh
bGlkIH0pOwotICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNr
ZXRTaXplOwotICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OworICAgIGlm
ICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIG1fY29tcGxldGVNZWRp
YVNhbXBsZXMuc2V0SW5mbyhmb3JtYXREZXNjcmlwdGlvbigpKTsKKyAgICBlbHNlIGlmIChmb3Jt
YXREZXNjcmlwdGlvbigpICYmICpmb3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAg
YXV0byBzYW1wbGVEdXJhdGlvbiA9IFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhQQUw6OkNNVGltZVN1
YnRyYWN0KHByZXNlbnRhdGlvblRpbWUsIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSkpICsgUEFM
OjpDTVRpbWVHZXRTZWNvbmRzKG1fcGFja2V0RHVyYXRpb24pICogc2FtcGxlQ291bnQ7CisgICAg
bV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCksIG1fcGFja2V0RHVyYXRpb24sIG1fY29tcGxldGVCbG9ja0J1ZmZl
ci5yZWxlYXNlTm9uTnVsbCgpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsK
IAotICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikKLSAg
ICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOworICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsK
IAogICAgIEFTU0VSVCghKmJ5dGVzUmVtYWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6U3RhdHVz
KHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKQorCitib29sIFdlYk1QYXJzZXI6Omlz
U3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCiB7Ci0gICAgZm9yIChhdXRvJiB0
cmFjayA6IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykKLSAgICAgICAgICAg
IHRyYWNrLT5kcmFpblBlbmRpbmdTYW1wbGVzKCk7CisgICAgcmV0dXJuIG5hbWUgPT0gIlZfVlA4
IiB8fCBuYW1lID09ICJWX1ZQOSI7Cit9CisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRB
dWRpb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK3sKKyAgICByZXR1cm4gbmFtZSA9PSAiQV9WT1JC
SVMiIHx8IG5hbWUgPT0gIkFfT1BVUyI7Cit9CisKK1NvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0oKQorICAgIDogbV9wYXJzZXIoKnRoaXMpCit7Cit9CisKK2Jv
b2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCkK
K3sKKyAgICByZXR1cm4gUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9ybWF0UmVh
ZGVyRW5hYmxlZCgpICYmIGNhbkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJzZXJBdmFp
bGFibGUoKTsKK30KKworTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmIHR5
cGUpCit7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMp
CisgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBhdXRvIGNv
bnRhaW5lclR5cGUgPSB0eXBlLmNvbnRhaW5lclR5cGUoKTsKKyAgICBib29sIGlzQXVkaW9Db250
YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAiYXVkaW8v
d2VibSIpOworICAgIGJvb2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGNvbnRhaW5lclR5cGUsICJ2aWRlby93ZWJtIik7CisgICAgaWYgKCFpc0F1ZGlvQ29u
dGFpbmVyVHlwZSAmJiAhaXNWaWRlb0NvbnRhaW5lclR5cGUpCisgICAgICAgIHJldHVybiBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYm9vbCBp
c0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoVk9SQklTKQorICAg
IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsK
KyNlbmRpZgorI2lmIEVOQUJMRShPUFVTKQorICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8
PSBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7CisjZW5kaWYKKworICAgIGlmIChpc0F1ZGlvQ29u
dGFpbmVyVHlwZSAmJiAhaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4g
TWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGJv
b2wgaXNBbnlDb2RlY0F2YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsKKyNpZiBF
TkFCTEUoVlA5KQorICAgIGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVyQXZhaWxh
YmxlKCk7CisjZW5kaWYKKworICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisK
KyAgICBhdXRvIGNvZGVjcyA9IHR5cGUuY29kZWNzKCk7CisgICAgaWYgKGNvZGVjcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Ok1heUJl
U3VwcG9ydGVkOworCisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgeworI2lmIEVOQUJM
RShWUDkpCisgICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29kZWMuc3Rh
cnRzV2l0aCgidnAwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29kZWMsICJ2
cDkiKSkgeworCisgICAgICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOworCisgICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBhcnNlVlBD
b2RlY1BhcmFtZXRlcnMoY29kZWMpOworICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFtZXRlcnMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmlndXJhdGlv
blJlY29yZFN1cHBvcnRlZCgqY29kZWNQYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQorCisj
aWYgRU5BQkxFKFZPUkJJUykKKyAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7CisgICAg
ICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwor
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWT1JC
SVMpCisKKyNpZiBFTkFCTEUoT1BVUykKKyAgICAgICAgaWYgKGNvZGVjID09ICJvcHVzIikgewor
ICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE9Q
VVMpCisKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNO
b3RTdXBwb3J0ZWQ7CiAgICAgfQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNTdXBwb3J0ZWQ7CisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwor
CisgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0
ZWQ7CisjZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9Q
VVMpCiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2Ft
cGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCitSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2Vi
TT4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBl
KQogewotICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBp
ZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBw
b3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNTdXBwb3J0ZWRWaWRlb0NvZGVjKFN0cmluZ1ZpZXcg
bmFtZSkKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9j
ayYmIHNhbXBsZXMsIHVpbnQ2NF90IHBvc2l0aW9uKQogewotICAgIHJldHVybiBuYW1lID09ICJW
X1ZQOCIgfHwgbmFtZSA9PSAiVl9WUDkiOworICAgIG1fY2FsbGJhY2sucGFyc2VkTWVkaWFEYXRh
KFdURk1vdmUoc2FtcGxlcyksIHBvc2l0aW9uKTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRp
b25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQogewotICAgIHJldHVybiBuYW1lID09
ICJBX1ZPUkJJUyIgfHwgbmFtZSA9PSAiQV9PUFVTIjsKKyAgICBtX2NhbGxPbkNsaWVudFRocmVh
ZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5pdGlhbGl6
YXRpb25TZWdtZW50ID0gV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpXSgpIG11dGFibGUg
eworICAgICAgICBpZiAobV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKQorICAg
ICAgICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFdURk1vdmUoaW5p
dGlhbGl6YXRpb25TZWdtZW50KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlc0Jsb2Nr
LCB1aW50NjRfdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIXNhbXBsZXNCbG9jay5pbmZvKCkpIHsK
KyAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJObyBUcmFja0lu
Zm8gc2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CisgICAgaWYgKHNhbXBsZXNCbG9j
ay5pc1ZpZGVvKCkpIHsKKyAgICAgICAgaWYgKG1fdmlkZW9JbmZvICE9IHNhbXBsZXNCbG9jay5p
bmZvKCkpIHsKKyAgICAgICAgICAgIG1fdmlkZW9JbmZvID0gc2FtcGxlc0Jsb2NrLmluZm8oKTsK
KyAgICAgICAgICAgIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVRyYWNrSW5mbygqc2FtcGxlc0Jsb2NrLmluZm8oKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYXVkaW9JbmZvICE9IHNhbXBsZXNCbG9jay5pbmZvKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOworICAgICAgICAgICAg
bV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJh
Y2tJbmZvKCpzYW1wbGVzQmxvY2suaW5mbygpKTsKKyAgICAgICAgICAgIG1fYXVkaW9JbmZvID0g
c2FtcGxlc0Jsb2NrLmluZm8oKTsKKyAgICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlv
biA9IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2FtcGxlc0Js
b2NrLmlzVmlkZW8oKSkgeworICAgICAgICByZXR1cm5TYW1wbGVzKG1fdmlkZW9JbmZvLmdldCgp
LCBzYW1wbGVzQmxvY2sudGFrZVNhbXBsZXMoKSwgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uLmdl
dCgpLCBwb3NpdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBQYWNrIGF1
ZGlvIGlmIG5lZWRlZC4KKyAgICBpZiAobV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2l6ZSgpKSB7Cisg
ICAgICAgIGF1dG8mIGxhc3RTYW1wbGUgPSBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5sYXN0KCk7Cisg
ICAgICAgIGlmIChsYXN0U2FtcGxlLmR1cmF0aW9uICsgbGFzdFNhbXBsZS5wcmVzZW50YXRpb25U
aW1lICE9IHNhbXBsZXNCbG9jay5maXJzdCgpLnByZXNlbnRhdGlvblRpbWUpCisgICAgICAgICAg
ICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMocG9zaXRpb24pOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIHNhbXBsZSA6IHNhbXBsZXNCbG9jaykKKyAgICAgICAgbV9xdWV1ZWRBdWRpb0R1cmF0aW9u
ICs9IHNhbXBsZS5kdXJhdGlvbjsKKyAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5hcHBlbmQoV1RG
TW92ZShzYW1wbGVzQmxvY2spKTsKKyAgICBpZiAobV9xdWV1ZWRBdWRpb0R1cmF0aW9uIDwgbV9t
aW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIGZsdXNoUGVu
ZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6cmV0dXJuU2FtcGxlcyhjb25zdCBUcmFja0luZm8qIGluZm8sIE1lZGlhU2FtcGxlc0Js
b2NrOjpTYW1wbGVzVmVjdG9yJiYgc2FtcGxlcywgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3Jt
YXREZXNjcmlwdGlvbiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zaXRpb24pCit7CisgICAg
aWYgKCFzYW1wbGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDTUJs
b2NrQnVmZmVyUmVmPiBjb21wbGV0ZUJsb2NrQnVmZmVyczsKKyAgICBpZiAoc2FtcGxlcy5zaXpl
KCkgPiAxKSB7CisgICAgICAgIC8vIE9wdGltaXNhdGlvbiBzbyB0aGF0IHdlIGFsbG9jYXRlIHRo
ZSBlbnRpcmUgQ01CbG9ja0J1ZmZlciBhdCBvbmNlIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB0
byByZXR1cm4uCisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxs
cHRyOworICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtD
RkFsbG9jYXRvckRlZmF1bHQsIHNhbXBsZXMuc2l6ZSgpLCAwLCAmcmF3QmxvY2tCdWZmZXIpOwor
ICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVy
KSB7CisgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVh
dGVFbXB0eSBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSByYXdCbG9ja0J1ZmZlcjsK
KyAgICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gcGFja2V0VGltaW5nczsKKyAg
ICBWZWN0b3I8c2l6ZV90PiBwYWNrZXRTaXplczsKKyAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNh
bXBsZXMpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBG
cmFnbWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxlLmRhdGEpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBhdXRvJiBkYXRhID0gc3RkOjpnZXQ8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXI+PihzYW1wbGUuZGF0YSk7CisgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBkYXRh
LT5jcmVhdGVDTUJsb2NrQnVmZmVyKCk7CisgICAgICAgIGlmICghYmxvY2tCdWZmZXIpIHsKKyAg
ICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiY3JlYXRlQ01C
bG9ja0J1ZmZlcjogZmFpbGVkIHRvIGNyZWF0ZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFjb21wbGV0ZUJsb2NrQnVmZmVycykKKyAgICAgICAgICAg
IGNvbXBsZXRlQmxvY2tCdWZmZXJzID0gV1RGTW92ZShibG9ja0J1ZmZlcik7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZm
ZXJSZWZlcmVuY2UoY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCksIGJsb2NrQnVmZmVyLmdldCgp
LCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vycikg
eworICAgICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAi
Q01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZTogbm90IGVub3VnaCBtZW1vcnkiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OnRvQ01UaW1lKHNhbXBsZS5kdXJhdGlvbiks
IFBBTDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUpLCBQQUw6OnRvQ01UaW1lKHNh
bXBsZS5kZWNvZGVUaW1lKSB9KTsKKyAgICAgICAgcGFja2V0U2l6ZXMuYXBwZW5kKGRhdGEtPnNp
emUoKSk7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0g
bnVsbHB0cjsKKyAgICBpZiAoYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVh
ZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1h
dERlc2NyaXB0aW9uLCBwYWNrZXRTaXplcy5zaXplKCksIHBhY2tldFRpbWluZ3Muc2l6ZSgpLCBw
YWNrZXRUaW1pbmdzLmRhdGEoKSwgcGFja2V0U2l6ZXMuc2l6ZSgpLCBwYWNrZXRTaXplcy5kYXRh
KCksICZyYXdTYW1wbGVCdWZmZXIpKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShM
T0dJREVOVElGSUVSLCAiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeTogZmFpbGVkIHRvIGNyZWF0
ZSBzYW1wbGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmZvLT5pc1Zp
ZGVvKCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAg
ICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOworICAgICAgICBpZiAoIWF0dGFjaG1lbnRz
QXJyYXkpIHsKKyAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
LCAiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5OiBmYWlsZWQgdG8gcmV0
cmlldmUgYXR0YWNobWVudCBhcnJheSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkp
KSA9PSBzYW1wbGVzLnNpemUoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQg
PSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Cisg
ICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9j
Zl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0
YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgaWYgKCEoc2FtcGxlc1tpXS5mbGFncyAm
IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jKSkKKyAgICAgICAgICAgICAgICBDRkRp
Y3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5
X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2Fs
bE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhp
cyB9LCB0cmFja0lEID0gaW5mby0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdT
YW1wbGVCdWZmZXIpLCBwb3NpdGlvbl0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQ
cm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
YXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZl
ci5nZXQoKSwgdHJhY2tJRCk7CisgICAgICAgIGlmIChwb3NpdGlvbikKKyAgICAgICAgICAgIG1l
ZGlhU2FtcGxlLT5zZXRCeXRlUmFuZ2VPZmZzZXQoKnBvc2l0aW9uKTsKKworICAgICAgICBtX2Rp
ZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwg
ZW1wdHlTdHJpbmcoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6cGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYg
cGFkZGluZykKK3sKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCwgcGFkZGluZ10gKCkgeworICAgICAg
ICBpZiAobV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAgbV9kaWRQ
YXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKHRyYWNrSUQsIHBhZGRpbmcpOworICAgIH0pOworfQor
Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmIGtleUlELCB1aW50NjRfdCB0
cmFja0lEKQoreworICAgIGlmIChtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxp
emF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjaykKKyAgICAgICAgbV9kaWRQcm92aWRlQ29udGVu
dEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShr
ZXlJRCksIHRyYWNrSUQpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNo
UGVuZGluZ0F1ZGlvU2FtcGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikKK3sK
KyAgICBpZiAoIW1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IEFTU0VSVChtX2F1ZGlvSW5mbyk7CisgICAgcmV0dXJuU2FtcGxlcyhtX2F1ZGlvSW5mby5nZXQo
KSwgbV9xdWV1ZWRBdWRpb1NhbXBsZXMudGFrZVNhbXBsZXMoKSwgbV9hdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uLmdldCgpLCBwb3NpdGlvbik7CisgICAgbV9xdWV1ZWRBdWRpb0R1cmF0aW9uID0geyB9
OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYm
IHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciwg
QXBwZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCit7CisgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUiwgImZsYWdzKCIsIGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250
aW51aXR5ID8gIkRpc2NvbnRpbnVpdHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgp
LCAiKSIpOworCisgICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51
aXR5KQorICAgICAgICBtX3BhcnNlci5yZXNldCgpOworCisgICAgaWYgKGludCBjb2RlID0gbV9w
YXJzZXIucGFyc2UoV1RGTW92ZShzZWdtZW50KSkgPCAwKSB7CisgICAgICAgIEVSUk9SX0xPR19J
Rl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwgY29kZSwgIikiKTsKKyAg
ICAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IFJlZiB7ICp0aGlzIH0sIGNvZGVdIHsKKyAgICAgICAgICAgIGlmIChtX2RpZEVuY291bnRlckVy
cm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKQorICAgICAgICAgICAgICAgIG1fZGlkRW5jb3VudGVy
RXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soY29kZSk7CisgICAgICAgIH0pOworICAgIH0KKyAg
ICAvLyBBdWRpbyB0cmFja3MgYXJlIGdyb3VwZWQgaW50byBtZXRhLXNhbXBsZXMgb2YgYSBkdXJh
dGlvbiBubyBtb3JlIHRoYW4gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24uCisgICAgLy8gQnV0IGF0
IHRoZSBlbmQgb2YgYSBmaWxlLCBubyBtb3JlIGF1ZGlvIGRhdGEgbWF5IGJlIGluY29taW5nLCBz
byBmbHVzaCBhbmQgZW1pdCBhbnkgcGVuZGluZworICAgIC8vIGF1ZGlvIGJ1ZmZlcnMuCisgICAg
Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSgp
Cit7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1l
ZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFk
YXRhRm9yVHJhY2tJRCh1aW50NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRl
KCkKK3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKKyAgICBtX3Bh
cnNlci5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0
TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKQor
eworICAgIG1fcGFyc2VyLnNldExvZ2dlcihsb2dnZXIsIGxvZ0lkZW50aWZpZXIpOworfQorCit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0IGR1cmF0aW9uKQoreworICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBN
ZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdChkdXJhdGlvbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uaAppbmRleCBhZmRiZjQ5YjJmNDY5MjE2ZTFiOWRmN2VkMTgyMWIzYWEy
Mjc3ZjlhLi44MTA3YjcwNmUzNTEwN2QyNDQ0ZTcxMWM4ZmQzNTcwMGM3NDNlZTJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKICNpbmNsdWRl
IDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1l
Lmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZi9Db3JlTWVkaWFTUEkuaD4KICNpbmNsdWRlIDx2YXJp
YW50PgogI2luY2x1ZGUgPHdlYm0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJtL3N0YXR1cy5o
PgogI2luY2x1ZGUgPHdlYm0vdnA5X2hlYWRlcl9wYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWVk
aWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNDcsNDIgKzQ3LDM2IEBAIGNsYXNzIFdlYm1QYXJzZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3Vy
Y2VCdWZmZXJQYXJzZXIsIHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgeworY2xhc3MgV2ViTVBhcnNl
ciA6IHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7Ci0KLSAgICBzdGF0aWMgYm9vbCBp
c1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlIGlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUm
KTsKLSAgICBzdGF0aWMgU3Bhbjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1JTUVUeXBl
cygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2Vy
V2ViTT4gY3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJik7CisgICAgY2xhc3MgQ2FsbGJhY2sgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYp
IHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKKyAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCkg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0
aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIHsgfQorICAg
ICAgICB2aXJ0dWFsIH5DYWxsYmFjaygpID0gZGVmYXVsdDsKKyAgICB9OwogCi0gICAgU291cmNl
QnVmZmVyUGFyc2VyV2ViTSgpOwotICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CisgICAg
V2ViTVBhcnNlcihDYWxsYmFjayYpOworICAgIH5XZWJNUGFyc2VyKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBpc0F2YWlsYWJsZSgpOworICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7CiAKKyAgICBpbnQg
cGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOworICAgIHZvaWQgcmVzZXRTdGF0
ZSgpOworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICBjb25z
dCB3ZWJtOjpTdGF0dXMmIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKLSAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOjpXZWJNOyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhcHBlbmREYXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmID0gW10geyB9LCBBcHBlbmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKLSAg
ICB2b2lkIGZsdXNoUGVuZGluZ01lZGlhRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc2V0U2hvdWxk
UHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOwotICAgIGJv
b2wgc2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFsOwotICAg
IHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZp
bmFsOworICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50
NjRfdCk7CiAKLSAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwotICAgIHZvaWQg
c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOwotICAgIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZp
ZXIpIGZpbmFsOwotCi0gICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBs
ZUJ1ZmZlclJlZj4sIHVpbnQ2NF90LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJhbmdlT2Zm
c2V0KTsKLSAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVuY3Rpb248
dm9pZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRkaW5nKT47
Ci0gICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNlVHJpbW1p
bmdEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIG1fZGlkUGFyc2VUcmlt
bWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICB2b2lkIHNl
dExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKTsKKyAgICBjb25z
dCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9Cisg
ICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRp
ZmllcjsgfQogCiAgICAgZW51bSBjbGFzcyBFcnJvckNvZGUgOiBpbnQzMl90IHsKICAgICAgICAg
U291cmNlQnVmZmVyUGFyc2VyV2ViTUVycm9yQ29kZVN0YXJ0ID0gMjAwMCwKQEAgLTEyMCwxOCAr
MTE0LDEyIEBAIHB1YmxpYzoKICAgICBjbGFzcyBUcmFja0RhdGEgewogICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0
ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+
CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3
ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+IFVuaXF1
ZVJlZjxUcmFja0RhdGE+CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPFRyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJz
ZXIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihjb2RlY1R5
cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duLCBwYXJzZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIFVua25v
d24sCi0gICAgICAgICAgICBBdWRpbywKLSAgICAgICAgICAgIFZpZGVvLAotICAgICAgICB9Owot
Ci0gICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFj
a0VudHJ5JiB0cmFja0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TSYgcGFyc2VyKQorICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tU
eXBlLCBXZWJNUGFyc2VyJiBwYXJzZXIpCiAgICAgICAgICAgICA6IG1fY29kZWMgeyBjb2RlY1R5
cGUgfQogICAgICAgICAgICAgLCBtX3RyYWNrIHsgd2VibTo6VHJhY2tFbnRyeSB7IHRyYWNrRW50
cnkgfSB9CiAgICAgICAgICAgICAsIG1fdHJhY2tUeXBlIHsgdHJhY2tUeXBlIH0KQEAgLTE0Miwx
NCArMTMwLDE4IEBAIHB1YmxpYzoKIAogICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVjOyB9CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyBy
ZXR1cm4gbV90cmFjazsgfQotICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhY2tUeXBlOyB9CisgICAgICAgIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBlOyB9CiAKLSAgICAgICAgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXRE
ZXNjcmlwdGlvbjsgfQotICAgICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiYmIGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3Jp
cHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsgfQorICAgICAgICBSZWZQdHI8VHJhY2tJbmZv
PiBmb3JtYXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb24u
Y29weVJlZigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRyYWNr
SW5mbz4mJiBkZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbV9mb3JtYXREZXNj
cmlwdGlvbiA9IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9mb3JtYXREZXNj
cmlwdGlvbi0+dHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgICAgIH0K
IAotICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVy
biBtX3BhcnNlcjsgfQorICAgICAgICBXZWJNUGFyc2VyJiBwYXJzZXIoKSBjb25zdCB7IHJldHVy
biBtX3BhcnNlcjsgfQogCi0gICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90
KiwgY29uc3QgQ01UaW1lJiwgaW50KQorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1
aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkKICAgICAgICAgewogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdl
Ym06OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwpAQCAtMTU3LDExICsxNDksMTAgQEAgcHVi
bGljOgogCiAgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkK
ICAgICAgICAgewotICAgICAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5yZXNldCgpOwot
ICAgICAgICAgICAgbV9wYWNrZXRTaXplcy5jbGVhcigpOwotICAgICAgICAgICAgbV9wYWNrZXRU
aW1pbmdzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0g
MDsKKyAgICAgICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAg
ICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzID0geyB9OwogICAgICAgICB9CisKICAgICAgICAg
dm9pZCByZXNldCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVz
U3RhdGUoKTsKQEAgLTE3MCw1MSArMTYxLDUwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrQnVmZmVyLnJlc2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgZHJhaW5QZW5kaW5nU2FtcGxlcyhzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJh
bmdlT2Zmc2V0ID0gc3RkOjpudWxsb3B0KQorICAgICAgICB2b2lkIGRyYWluUGVuZGluZ1NhbXBs
ZXMoKQogICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobGF0ZXN0Qnl0
ZVJhbmdlT2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5z
aXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wYXJzZXIucHJv
dmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpLCBtX2xhc3RQb3Np
dGlvbik7CiAgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3Rk
OjpvcHRpb25hbDxzaXplX3Q+KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9jZXNzKENN
U2FtcGxlQnVmZmVyUmVmKSB7IH07CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNv
bnN0OwogICAgICAgICB3ZWJtOjpTdGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBj
b25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICAgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzOwotICAgICAg
ICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgICAgIHNp
emVfdCBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0IHsgMCB9OwotICAgICAgICBWZWN0b3I8c2l6
ZV90PiBtX3BhY2tldFNpemVzOwotICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBt
X3BhY2tldFRpbWluZ3M7CisgICAgICAgIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBt
X2NvbXBsZXRlQmxvY2tCdWZmZXI7CisgICAgICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fY29tcGxl
dGVNZWRpYVNhbXBsZXM7CisgICAgICAgIHVpbnQ2NF90IG1fbGFzdFBvc2l0aW9uIHsgMCB9Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CiAgICAgICAgIHdlYm06
OlRyYWNrRW50cnkgbV90cmFjazsKLSAgICAgICAgVHlwZSBtX3RyYWNrVHlwZTsKLSAgICAgICAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Cisg
ICAgICAgIGNvbnN0IFRyYWNrSW5mbzo6VHJhY2tUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBS
ZWZQdHI8VHJhY2tJbmZvPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwogICAgICAgICBTaGFyZWRCdWZm
ZXJCdWlsZGVyIG1fY3VycmVudEJsb2NrQnVmZmVyOwotICAgICAgICBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNJiBtX3BhcnNlcjsKKyAgICAgICAgV2ViTVBhcnNlciYgbV9wYXJzZXI7CisgICAgICAg
IHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKICAgICAgICAgLy8g
U2l6ZSBvZiB0aGUgY3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAg
c2l6ZV90IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAgfTsKICAgICB9OwogCiAgICAgY2xhc3MgVmlk
ZW9UcmFja0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0
YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0Vu
dHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1
ZVJlZjxWaWRlb1RyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJz
ZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPgogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0
cmFja0VudHJ5LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgVmlkZW9UcmFja0RhdGEo
Q29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwg
U291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQotICAgICAgICAgICAgOiBUcmFja0RhdGEo
Y29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpWaWRlbywgcGFyc2VyKQorICAgICAgICBWaWRl
b1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShj
b2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpWaWRlbywgcGFyc2Vy
KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IGNo
YXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KLSAg
ICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qg
d2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5h
bDsKLSAgICAgICAgdm9pZCBwb3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZikgZmluYWw7Cisg
ICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0
IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkg
ZmluYWw7CiAgICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOwor
CiAjaWYgRU5BQkxFKFZQOSkKICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1f
aGVhZGVyUGFyc2VyOwogICAgICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFtZXM7CkBAIC0yMjMs
MzkgKzIxMywyOSBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBBdWRpb1RyYWNrRGF0YSA6IHB1Ymxp
YyBUcmFja0RhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENv
ZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9u
KSAtPiBVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0
ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNv
ZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwg
dHJhY2tFbnRyeSwgcGFyc2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIEF1ZGlvVHJhY2tEYXRh
KENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnks
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0
aW9uKQotICAgICAgICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5
cGU6OkF1ZGlvLCBwYXJzZXIgfQotICAgICAgICAgICAgLCBtX21pbmltdW1TYW1wbGVEdXJhdGlv
biB7IG1pbmltdW1TYW1wbGVEdXJhdGlvbiB9CisgICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVj
VHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1Q
YXJzZXImIHBhcnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhIHsgY29kZWNUeXBlLCB0cmFj
a0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZTo6QXVkaW8sIHBhcnNlciB9CiAgICAgICAgIHsK
ICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVG
cmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2
NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgd2VibTo6U3RhdHVzIGNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYs
IHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKICAgICAgICAgdm9pZCBy
ZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxv
Z0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KIAotICAgICAg
ICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lOwotICAgICAgICBDTVRpbWUgbV9wYWNr
ZXREdXJhdGlvbjsKKyAgICAgICAgTWVkaWFUaW1lIG1fcGFja2V0RHVyYXRpb247CiAgICAgICAg
IHVpbnQ4X3QgbV9mcmFtZXNQZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFt
ZUR1cmF0aW9uIHsgMF9zIH07CiAgICAgICAgIHNpemVfdCBtTnVtRnJhbWVzSW5Db21wbGV0ZUJs
b2NrIHsgMCB9OwotICAgICAgICAvLyBGSVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBiZXR0
ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0IGxl
YXN0IHRoZSBmaXJzdAotICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRpbCB3
ZSBmaXggTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBkZWFsIHdpdGgg
YGVuZEN1cnNvcmAuCi0gICAgICAgIGZsb2F0IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgMiB9
OwogICAgIH07CiAKLSAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9nZ2VyLmdldCgpOyB9Ci0gICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQotCiBwcml2YXRlOgotCiAgICAgVHJhY2tEYXRh
KiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7Ci0KICAgICBzdGF0aWMgYm9vbCBp
c1N1cHBvcnRlZFZpZGVvQ29kZWMoU3RyaW5nVmlldyk7CiAgICAgc3RhdGljIGJvb2wgaXNTdXBw
b3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcpOwogCkBAIC0yNzUsNyArMjU1LDcgQEAgcHJpdmF0
ZToKICAgICB3ZWJtOjpTdGF0dXMgT25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IHdlYm06OkJsb2NrR3JvdXAmKTsKICAgICB3ZWJtOjpTdGF0dXMgT25G
cmFtZShjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgd2VibTo6UmVhZGVyKiwgdWludDY0X3Qq
IGJ5dGVzUmVtYWluaW5nKSBmaW5hbDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbml0aWFsaXph
dGlvblNlZ21lbnQ+IG1faW5pdGlhbGl6YXRpb25TZWdtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudD4gbV9pbml0aWFsaXph
dGlvblNlZ21lbnQ7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgUmVmPFNoYXJlZEJ1
ZmZlcj4+PiBtX2tleUlkczsKICAgICB3ZWJtOjpTdGF0dXMgbV9zdGF0dXM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPHdlYm06OldlYm1QYXJzZXI+IG1fcGFyc2VyOwpAQCAtMjkyLDEyICsyNzIsNjgg
QEAgcHJpdmF0ZToKICAgICB1c2luZyBCbG9ja1ZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8d2VibTo6
QmxvY2ssIHdlYm06OlNpbXBsZUJsb2NrPjsKICAgICBzdGQ6Om9wdGlvbmFsPEJsb2NrVmFyaWFu
dD4gbV9jdXJyZW50QmxvY2s7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gbV9yZXdpbmRU
b1Bvc2l0aW9uOwotICAgIGZsb2F0IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyAyIH07
CiAKICAgICBSZWZQdHI8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBt
X2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07CiAgICAgdWludDY0X3QgbV9uZXh0Q2hpbGRJZGVu
dGlmaWVyIHsgMCB9OworICAgIENhbGxiYWNrJiBtX2NhbGxiYWNrOworfTsKKworY2xhc3MgU291
cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJzZXIsIFdlYk1QYXJz
ZXI6OkNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBpc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMg
TWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29u
c3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgU3Bhbjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1
cHBvcnRlZE1JTUVUeXBlcygpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U291
cmNlQnVmZmVyUGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJik7CisKKyAgICBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CisgICAgflNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSA9
IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCisgICAgVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtd
IHsgfSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6Tm9uZSkgZmluYWw7CisgICAgdm9pZCBm
bHVzaFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHNldFNob3VsZFByb3ZpZGVN
ZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICBib29sIHNob3Vs
ZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHJl
c2V0UGFyc2VyU3RhdGUoKSBmaW5hbCB7IG1fcGFyc2VyLnJlc2V0U3RhdGUoKTsgfQorICAgIHZv
aWQgaW52YWxpZGF0ZSgpIGZpbmFsOworCisgICAgdXNpbmcgRGlkUGFyc2VUcmltbWluZ0RhdGFD
YWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1l
JiBkaXNjYXJkUGFkZGluZyk+OworICAgIHZvaWQgc2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxs
YmFjayhEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgeworICAg
ICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsK
KyAgICB9CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhzdGQ6Om9wdGlvbmFs
PHVpbnQ2NF90PiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9TYW1w
bGVEdXJhdGlvbihmbG9hdCk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2dn
ZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7CisgICAgY29u
c3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQor
ICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50
aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjaworICAgIHZv
aWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6
YXRpb25TZWdtZW50JiYpIGZpbmFsOworICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2Ft
cGxlc0Jsb2NrJiYsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICBib29sIGNhbkRlY3J5cHQoKSBjb25z
dCBmaW5hbCB7IHJldHVybiAhIW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrOyB9CisgICAgdm9pZCBjb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0
X3QpIGZpbmFsOworICAgIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBN
ZWRpYVRpbWUmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJldHVyblNhbXBsZXMoY29uc3QgVHJh
Y2tJbmZvKiwgTWVkaWFTYW1wbGVzQmxvY2s6OlNhbXBsZXNWZWN0b3ImJiwgQ01Gb3JtYXREZXNj
cmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gPSBzdGQ6Om51bGxvcHQpOworCiAg
ICAgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2Fs
bGJhY2s7CisgICAgV2ViTVBhcnNlciBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxjb25z
dCBUcmFja0luZm8+IG1fYXVkaW9JbmZvOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFRyYWNr
SW5mbz4gbV92aWRlb0luZm87CisgICAgTWVkaWFUaW1lIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVy
YXRpb24geyA5NjAwMCwgNDgwMDAgfTsKKyAgICBNZWRpYVNhbXBsZXNCbG9jayBtX3F1ZXVlZEF1
ZGlvU2FtcGxlczsKKyAgICBNZWRpYVRpbWUgbV9xdWV1ZWRBdWRpb0R1cmF0aW9uOworICAgIFJl
ZlB0cjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRp
ZmllciB7IG51bGxwdHIgfTsKIH07CiAKIH0KQEAgLTMwNiwxMiArMzQyLDEyIEBAIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSkKICAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyJiBw
YXJzZXIpIHsgcmV0dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyOjpUeXBlOjpXZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VmlkZW9UcmFja0RhdGEpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFj
a0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJh
Y2tEYXRhOjpUeXBlOjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJu
IHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrVHlwZTo6
VmlkZW87IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YSkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFj
a1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5
cGU6OkF1ZGlvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OkF1ZGlvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRh
LnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbzsgfQog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NP
VVJDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCmluZGV4IDk1NDRkOWMyNTdmZTBiZDU1ODI4MDNhZTFh
ODA4NDUwMTczYzUwYjUuLmQwMDQxYmY4OWIzMGMyY2M2MTg3OTA4ZjRiZTc2YTNhYmZmNDI2NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0
aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVlA5VXRpbGl0aWVzQ29jb2EuaApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIlZQOVV0
aWxpdGllcy5oIgogI2luY2x1ZGUgPHdlYm0vZG9tX3R5cGVzLmg+CiAKLXR5cGVkZWYgY29uc3Qg
c3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7
Ci0KIG5hbWVzcGFjZSB2cDlfcGFyc2VyIHsKIGNsYXNzIFZwOUhlYWRlclBhcnNlcjsKIH0KQEAg
LTQwLDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgTWVkaWFDYXBhYmls
aXRpZXNJbmZvOwogc3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsKK3N0cnVjdCBWaWRlb0luZm87
CiAKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7CiBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2RlcigpOwpAQCAtNTAsNyArNDks
NyBAQCBib29sIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpOwogYm9vbCBpc1ZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJik7
CiBzdGQ6Om9wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVWUFBhcmFtZXRl
cnMoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmLCBjb25zdCBWaWRlb0NvbmZpZ3Vy
YXRpb24mKTsKIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFk
ZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKK1JlZjxWaWRl
b0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNl
cjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7
CiAKIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiAgICAgYm9vbCBrZXlmcmFtZSB7IGZhbHNlIH07
CkBAIC02Niw3ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiB9OwogCiBzdGQ6Om9w
dGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3Qq
IGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZy
YW1lSGVhZGVyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CitSZWY8Vmlk
ZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVy
JiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKIGNsYXNzIFdFQkNPUkVf
RVhQT1JUIFZQOVRlc3RpbmdPdmVycmlkZXMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5t
bQppbmRleCBkZDE3NzlmMjYzODkyNjk1OTQ0ZjQyMzc2ZmNkYWU1YjZkMzBiMjZjLi5jZjhjOWIy
MTI4YzAxNDhkNWE5MGQ5ZDUxNTZkZjY5ZjRhMGZiZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5t
bQpAQCAtMzEsMTEgKzMxLDEyIEBACiAjaW1wb3J0ICJGb3VyQ0MuaCIKICNpbXBvcnQgIkxpYldl
YlJUQ1Byb3ZpZGVyLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKKyNpbXBv
cnQgIk1lZGlhU2FtcGxlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAi
U2NyZWVuUHJvcGVydGllcy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJT
eXN0ZW1CYXR0ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRpb24uaCIKLSNpbXBvcnQg
PENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9EYXRhVmlldy5oPgogI2ltcG9ydCA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpAQCAtMzUwLDI1ICszNTEs
MzUgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFy
aWVzJiBjb2VmZmljaWVudHMpCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVy
dFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKK3N0YXRpYyBQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXMgY29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHVp
bnQ4X3QgcHJpbWFyaWVzKQogewogICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CiAgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBr
Q1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJu
IGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xv
clByaW1hcmllczo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpCVF82MDFfNzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmll
czo6U21wdGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNN
UFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNf
U01QVEVfQzsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21w
dGUyNDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG06Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkZpbG07CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1p
bmFuY2U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAy
MDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80Mjhf
MToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVTdDQy
ODE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMx
XzI6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJp
ZXNfRENJX1AzOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpT
bXB0ZVJwNDMxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRF
X0VHXzQzMl8xOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9y
UHJpbWFyaWVzX1AzX0Q2NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19JVFVfUl8yMDIwOworICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnM7CisgICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVj
aWZpZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90
IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzJiBjaGFyYWN0ZXJpc3RpY3MpCkBAIC00MTEsMjkgKzQyMiw0NSBAQCBzdGF0aWMgdWlu
dDhfdCBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcyYgYwogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NN
VHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3N0YXRpYyBQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY29udmVydFRvUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQogewogICAgIHN3aXRj
aCAoY2hhcmFjdGVyaXN0aWNzKSB7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjJjdXJ2ZTsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzoKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEy
OGN1cnZlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJUXzYwMV83OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJU
cmFuc2ZlckZ1bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgotICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9Q
UTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
U21wdGUyNDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6TGluZWFyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkxvZ3JpdGhtaWM6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ1NxcnQ7CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDoKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyNDsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYx
XzA6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJ0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMTsKICAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBf
MTBiaXQ7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QlRfMjAyMF8xMmJpdDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25U
cmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDsK
ICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9T
VF80MjhfMToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2Zl
ckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MTsKICAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJu
IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExH
OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182
MTk2Nl8yXzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3JlTWVkaWFf
a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxwdHI7Ci0g
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgot
ICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25f
TGluZWFyOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpBcmliU3RkQjY3SGxnOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwogICAgIH0K
LQotICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRy
aXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCkBA
IC00NjIsMjEgKzQ4OSwzMSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmlj
aWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudAogICAgIH0KIH0KIAot
c3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmlj
aWVudHMpCitzdGF0aWMgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyBjb252ZXJ0VG9Q
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzKHVpbnQ4X3QgY29lZmZpY2llbnRzKQogewog
ICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7Cisg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OklkZW50aXR5OgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6UmdiOworICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5OworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpGQ0M6CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2M7CiAgICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OworICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzoKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNv
bnN0YW50THVtaW5hbmNlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2ll
bnRzOjpCVF8yMDIwX0NvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5hbmNlOworICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDoKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
VW5zcGVjaWZpZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1
aW50OF90IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4
LCB1aW50NjRfdCB5KQpAQCAtNDkxLDcgKzUyOCw3IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRT
dWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQog
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdf
NDIwX0NvbG9jYXRlZDsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRo
LCBpbnQzMl90IGhlaWdodCkKK3N0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9G
cm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25S
ZWNvcmQmIHJlY29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiB7CiAgICAgLy8g
UmVmOiAiVlAgQ29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRpbmcsIHYxLjAsIDIwMTct
MDMtMzEiCiAgICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbXA0Lz4KQEAg
LTUyMCwxMiArNTU3LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAgICAgLy8gRklYTUU6
IENvbnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3Jp
dGluZyBjb2RlIGJlbG93CiAgICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCiAK
KyAgICBhdXRvIHZpZGVvSW5mbyA9IFZpZGVvSW5mbzo6Y3JlYXRlKCk7CisgICAgdmlkZW9JbmZv
LT5zaXplID0gdmlkZW9JbmZvLT5kaXNwbGF5U2l6ZSA9IHsgZmxvYXQod2lkdGgpLCBmbG9hdCho
ZWlnaHQpIH07CisKICAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29u
dGVudHNTaXplID0gMTI7CiAKICAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0
OwogICAgIHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0
RGVwdGgpIDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4
MSAmIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwogICAgIHVpbnQxNl90IGNvZGVjSW50aWFs
aXphdGlvbkRhdGFTaXplID0gMDsKLQogICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNy
ZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXpl
LCAxKSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwogICAgIHZpZXctPnNl
dCgwLCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnBy
b2ZpbGUsIGZhbHNlKTsKQEAgLTUzNSw0NiArNTc0LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0Nv
bmZpCiAgICAgdmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFs
c2UpOwogICAgIHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7
CiAgICAgdmlldy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOwot
Ci0gICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKLQot
ICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0g
ICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAg
IGF1dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywg
V1RGX0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIFZl
Y3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlv
bkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9y
PENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkg
fTsKLQotICAgIGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlv
blJhbmdlOjpGdWxsUmFuZ2UpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOwotICAgICAgICBl
eHRlbnNpb25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYg
KGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3Jk
LmNvbG9yUHJpbWFyaWVzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1h
Z2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBw
ZW5kKGNtQ29sb3JQcmltYXJpZXMpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJG
dW5jdGlvbiA9IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3MpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1
ZmZlclRyYW5zZmVyRnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVu
ZChjbVRyYW5zZmVyRnVuY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtTWF0cml4ID0g
Y29udmVydFRvQ01ZQ2JDUk1hdHJpeChyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKSkgewotICAg
ICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7
Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKLSAgICB9Ci0KLSAg
ICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgp
LCBleHRlbnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIENNVmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgQ01WaWRlb0Nv
ZGVjVHlwZSBjb2RlYyA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDkiID8ga0NNVmlkZW9Db2Rl
Y1R5cGVfVlA5IDogJ3ZwMDgnOwotICAgIGlmIChub0VyciAhPSBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGV4
dGVuc2lvbnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICB2aWRlb0lu
Zm8tPmF0b21EYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+
KHZpZXctPmRhdGEoKSksIHZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgdmlkZW9JbmZvLT5jb2xv
clNwYWNlLmZ1bGxSYW5nZSA9IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1
cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UucHJpbWFy
aWVzID0gY29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclBy
aW1hcmllcyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnRyYW5zZmVyID0gY29udmVydFRv
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKHJlY29yZC50cmFuc2ZlckNoYXJh
Y3RlcmlzdGljcyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLm1hdHJpeCA9IGNvbnZlcnRU
b1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50
cyk7CisgICAgdmlkZW9JbmZvLT5jb2RlY05hbWUgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5
IiA/ICd2cDA5JyA6ICd2cDA4JzsKKyAgICByZXR1cm4gdmlkZW9JbmZvOwogfQogCi1SZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5
SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBj
b25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRl
VmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQ
YXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAg
ICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAKQEAgLTYwNiw3ICs2MTUsNyBA
QCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbgogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFy
aWVzID0gY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29k
ZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWln
aHQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlv
blJlY29yZChyZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOwogfQogCiBz
dGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVp
bnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKQEAgLTY3MSw3ICs2ODAsNyBAQCBz
dGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVp
bnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAKLVJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhI
ZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxlbWVudDxD
b2xvdXI+JiBjb2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFk
ZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xv
dXI+JiBjb2xvcikKIHsKICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAg
ICAgcmVjb3JkLmNvZGVjTmFtZSA9ICJ2cDA4IjsKQEAgLTcwMSw3ICs3MTAsNyBAQCBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4
SGVhZGVyKGNvbnN0IFZQOAogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKKyAgICBy
ZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29y
ZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29j
b2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0
aWxpdGllc0NvY29hLmgKaW5kZXggODcxMDRkOGI3YjM1N2MxNjBiNmRjY2M0MWJmZTFmODllMGE2
YzI3MS4uYTk4MDk4YzVhMzlmY2I0NTBiMmZmOWM3NjEwZDk3NGU4MjQ2ZDRkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0
aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9X
ZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0yNywxNiArMjcsMTcgQEAKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLXR5cGVkZWYgY29uc3Qg
c3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEF1ZGlvSW5mbzsKKwogV0VCQ09SRV9F
WFBPUlQgYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKIFdFQkNPUkVfRVhQT1JUIGJv
b2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVkZWQoKTsKLVJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCwg
Y29uc3Qgdm9pZCopOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHNp
emVfdCwgY29uc3Qgdm9pZCopOwogCiBzdHJ1Y3QgT3B1c0Nvb2tpZUNvbnRlbnRzIHsKICAgICB1
aW50OF90IHZlcnNpb24geyAwIH07CkBAIC01NSw4ICs1NiwxMCBAQCBzdHJ1Y3QgT3B1c0Nvb2tp
ZUNvbnRlbnRzIHsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxl
KCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5lZWRlZCgpOwor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplID0gMjsKIGJvb2wgcGFyc2VP
cHVzUHJpdmF0ZURhdGEoc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0
ZURhdGEsIHNpemVfdCBmcmFtZURhdGFTaXplLCBjb25zdCB2b2lkKiBmcmFtZURhdGEsIE9wdXND
b29raWVDb250ZW50cyYpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYpOwor
UmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25zdCBPcHVzQ29va2llQ29u
dGVudHMmKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCmluZGV4IDdl
MGFmYjI5MGRkODVhNzdmOWJlZmZmNDk0N2E0N2I3NTM1ZWIyZjQuLjY2MDlmNGFlYjY3YTJkZjY0
MWYwNzJlNTgxNjBmOWFmNWQzNmRmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tCkBAIC0zMCwxMiArMzAsMTMgQEAKIAogI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZS5oIgogI2lt
cG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFu
YWdlci5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gv
QXVkaW9Db2RlYy5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29tcG9uZW50Lmg+CiAj
aW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Gb3JtYXQuaD4KLSNpbXBvcnQgPENvcmVNZWRpYS9D
TUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgogI2ltcG9ydCA8d3RmL0Zs
aXBCeXRlcy5oPgogI2ltcG9ydCA8d3RmL1NlY29uZHMuaD4KQEAgLTc2LDcgKzc3LDcgQEAgc3Rh
dGljIGJvb2wgcmVnaXN0ZXJEZWNvZGVyRmFjdG9yeShjb25zdCBjaGFyKiBkZWNvZGVyTmFtZSwg
T1NUeXBlIGRlY29kZXJUeXBlKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChP
U1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQorc3RhdGljIFJl
ZlB0cjxBdWRpb0luZm8+IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdChPU1R5cGUgZm9ybWF0SUQs
IFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQogewogICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBhc2JkIHsgfTsKICAgICBhc2JkLm1Gb3JtYXRJRCA9IGZvcm1hdElEOwpAQCAt
ODcsOCArODgsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE8KICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24o
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1hZ2lj
Q29va2llLmRhdGEoKSk7CisgICAgYXV0byBhdWRpb0luZm8gPSBBdWRpb0luZm86OmNyZWF0ZSgp
OworICAgIGF1ZGlvSW5mby0+Y29kZWNOYW1lID0gZm9ybWF0SUQ7CisgICAgYXVkaW9JbmZvLT5y
YXRlID0gYXNiZC5tU2FtcGxlUmF0ZTsKKyAgICBhdWRpb0luZm8tPmNoYW5uZWxzID0gYXNiZC5t
Q2hhbm5lbHNQZXJGcmFtZTsKKyAgICBhdWRpb0luZm8tPmZyYW1lc1BlclBhY2tldCA9IGFzYmQu
bUZyYW1lc1BlclBhY2tldDsKKyAgICBhdWRpb0luZm8tPmJpdERlcHRoID0gMTY7CisgICAgYXVk
aW9JbmZvLT5jb29raWVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShtYWdpY0Nv
b2tpZSkpOworICAgIHJldHVybiBhdWRpb0luZm87CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoVk9S
QklTKSB8fCBFTkFCTEUoT1BVUykKIAogI2lmIEVOQUJMRShPUFVTKQpAQCAtMjAwLDcgKzIwOSw3
IEBAIGJvb2wgcGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IGNvZGVjUHJpdmF0ZVNpemUsIGNv
bnN0IHZvaWQqIGNvZGVjUHJpdmF0ZURhdGEsCiAKICAgICBhdXRvKiBwcml2YXRlRGF0YVB0ciA9
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihjb2RlY1ByaXZhdGVEYXRhKTsKIAotICAgIGlm
IChjb2RlY1ByaXZhdGVTaXplIDwgMTkpCisgICAgaWYgKGNvZGVjUHJpdmF0ZVNpemUgPCBrT3B1
c0hlYWRlclNpemUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyAxLiBNYWdpYyBTaWdu
YXR1cmU6CkBAIC0zNjIsNyArMzcxLDcgQEAgYm9vbCByZWdpc3Rlck9wdXNEZWNvZGVySWZOZWVk
ZWQoKQogI2VuZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29udGVudHMmIGNv
b2tpZUNvbnRlbnRzKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25z
dCBPcHVzQ29va2llQ29udGVudHMmIGNvb2tpZUNvbnRlbnRzKQogewogI2lmIEVOQUJMRShPUFVT
KQogICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQpAQCAtMzcyLDcgKzM4MSw3IEBA
IFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBPcHVzQ29vCiAgICAgaWYgKCFjb29raWVEYXRhLnNpemUoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbkZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOworICAgIHJldHVy
biBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvb2tpZUNvbnRlbnRzKTsKICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTQ2NSw3ICs0NzQsNyBAQCBib29sIHJlZ2lzdGVyVm9yYmlzRGVjb2RlcklmTmVl
ZGVkKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBj
b25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZVZvcmJpc0F1
ZGlvSW5mbyhzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkK
IHsKICNpZiBFTkFCTEUoVk9SQklTKQogICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCkBAIC00NzUsNyArNDg0LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXYKICAgICBpZiAo
IWNvb2tpZURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3JiJywgV1RGTW92ZShj
b29raWVEYXRhKSk7CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCgndm9yYics
IFdURk1vdmUoY29va2llRGF0YSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURh
dGFTaXplKTsKICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJh
bmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMxMzRjZTZhN2EyMTRjZGM5ZGUwNWM0NzUz
NzJlMTdjOWEzZC4uODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJjNGU3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlh
U2FtcGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zNCw4ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIE1lZGlhU2FtcGxl
Qnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBs
dWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICA6IE1l
ZGlhU2FtcGxlQVZGT2JqQyhudWxscHRyKQotICAgICwgbV9wcmVzZW50YXRpb25UaW1lKHNhbXBs
ZS5wcmVzZW50YXRpb25UaW1lKCkpCisgICAgOiBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnBy
ZXNlbnRhdGlvblRpbWUoKSkKICAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgp
KQogICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKICAgICAsIG1fYnl0ZVJhbmdl
KCpzYW1wbGUuYnl0ZVJhbmdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCmlu
ZGV4IGI2NmYzYTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLmM1YzhhMjVjODE4
NTQzZjVlODYzOGJiYzBlMGJhODNjNjc1NjlmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5
dGVSYW5nZS5oCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFz
cyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNhbXBs
ZUFWRk9iakMgeworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2Vi
Q29yZTo6TWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVC
eXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5
dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKICAgICB7CkBAIC01NSw2
ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVk
aWFUaW1lJikgZmluYWw7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYs
IGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwogCisgICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBs
ZT4sIFJlZlB0cjxNZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRh
dGlvblRpbWUsIFVzZUVuZFRpbWUgPSBVc2VFbmRUaW1lOjpEb05vdFVzZSkgZmluYWwgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCB7IHJldHVybiAqY29uc3RfY2FzdDxNZWRpYVNhbXBsZUJ5dGVSYW5n
ZSo+KHRoaXMpOyB9CisKIHByaXZhdGU6CiAgICAgTWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFT
YW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453890</attachid>
            <date>2022-03-04 20:07:29 -0800</date>
            <delta_ts>2022-03-04 20:26:14 -0800</delta_ts>
            <desc>Combined patch for EWS tests</desc>
            <filename>bug-237472-20220305150728.patch</filename>
            <type>text/plain</type>
            <size>175395</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQ5NjA5NzYyYjgwNTJk
ODdiMWUzNjBiNjVhNzhmMzYyZjk1YjM5YS4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDczCisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODE0OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmx5LWJ5IGZpeDogdXBkYXRlIGNhbGwgdG8gQVZPdXRw
dXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbgorICAgICAgICBub3cg
dGhhdCB0aGUgYWNjZXNzIG1hY3JvIGdvdCBmaXhlZC4KKworICAgICAgICBBUEkgVGVzdCBhZGRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1Mu
bW06CisgICAgICAgICgtW1dlYk1lZGlhU2Vzc2lvbkhlbHBlciBzdGFydE1vbml0b3JpbmdBaXJQ
bGF5Um91dGVzXSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpyb3V0ZURldGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpp
bnZhbGlkYXRlUGxheWJhY2tUYXJnZXRzKToKKyAgICAgICAgKC1bV2ViQVZSb3V0ZVBpY2tlclZp
ZXdIZWxwZXIgbm90aWZpY2F0aW9uSGFuZGxlcjpdKToKKworMjAyMi0wMi0yMyAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSB1c2UgU2hhcmVkQnVmZmVyIGludGVybmFsbHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3OAorICAgICAgICByZGFyOi8vODkzNDg3
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGEgcmVmYWN0b3IgdG8gYWxsb3cgU291cmNlQnVmZmVyUGFyc2VyIHRvIHJldHVybiBTaGFy
ZWRCdWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gQ01CbG9ja0J1ZmZlci4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gb2JzZXJ2YWJsZSBiZWhhdmlvdXJzLgorICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpyZWVu
cXVldWVNZWRpYUZvclRpbWUpOiBGbHktYnkgZml4OiB0eXBvLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZSk6IEZseS1ieSBmaXgsICBleGl0
IGVhcmx5CisgICAgICAgIGlmIGVuZCB0aW1lIGlzIGxvd2VyIHRoYW4gc3RhcnQgdGltZSB3aGlj
aCBjYW4gaGFwcGVuIGlmIHRoZSBkdXJhdGlvbiBpcworICAgICAgICBzbWFsbGVyIHRoYW4gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlYWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpkcmFp
blBlbmRpbmdTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVZQOEZy
YW1lSGVhZGVyKTogTWFrZSBtZXRob2RzIGNvbnN0LgorCisyMDIyLTAyLTIzICBKZWFuLVl2ZXMg
QXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29udmVy
dCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorICAgICAgICByZGFyOi8v
ODkzMzg0NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0Q29udGlndW91c0RhdGEgYW5kCisgICAg
ICAgIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tCdWZmZXIgbWV0aG9kcy4K
KworICAgICAgICBBUEkgdGVzdHMgYWRkZWQgZm9yIGdldENvbnRpZ3VvdXNEYXRhLgorICAgICAg
ICBjcmVhdGVDTUJsb2NrQnVmZmVyIHdpbGwgYmUgdXNlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
U2hhcmVkQnVmZmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGcmVlU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxv
Y2tCdWZmZXIgY29uc3QpOgorCiAyMDIyLTAzLTA0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVG9wIGxheWVycyBzaG91bGQgbm90IGJlIG1vdmVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1ZjhlYTk4YWQzMjZlNDQ4MWY1YjE0ZDMwZDMzOGQxZmQ1MDNjYTRmLi43Mzgz
ZmVlMDFhMzE4NzlmZmI0NjExZGI5NDk5NjYxM2E0Nzg5ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUg
cGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEw
OTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNuJ3Qgc29mdC1s
aW5rZWQuCisKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcz
CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NDczCisgICAgICAgIENNVGltZTogY29udmVyc2lvbiBkb2Vzbid0IHdv
cmsgd2l0aCBpbnZhbGlkIG51bWJlcgorCisgICAgICAgICogcGFsL2F2Zm91bmRhdGlvbi9NZWRp
YVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NNVGltZSk6CisgICAgICAg
ICogcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg6CisKKzIwMjItMDMtMDQgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkgY29udmVyc2lvbiB0byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlk
IHRpbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc0NzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTQ5MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGbHktYnkgZml4OiBtYWNybyBkZWZpbml0
aW9uIHRvIGFjY2VzcyBtZXRob2QKKyAgICAgICAgQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNl
c0RpZENoYW5nZU5vdGlmaWNhdGlvbiB3YXMgaW5jb3JyZWN0LgorCisgICAgICAgICogcGFsL2F2
Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NN
VGltZSk6IEVuc3VyZSB0aGF0IGlmIHRoZSBjb252ZXJ0ZWQgdGltZSB3YXMgaW52YWxpZC4gVGhl
CisgICAgICAgIGZsYWcgaXMgY2FycmllZCBhY2Nyb3NzLgorICAgICAgICAqIHBhbC9jb2NvYS9B
VkZvdW5kYXRpb25Tb2Z0TGluay5oOgorCiAyMDIyLTAzLTAyICBEYW4gR2xhc3RvbmJ1cnkgIDxk
amdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBHUFVEZXZpY2VEZXNj
cmlwdG9yLnJlcXVpcmVkTGltaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlYzVjYzI5MDRhZjQ3ZjM4Nzc2ZmMx
MmFhMTdhZjE5Yjk3MzRmOTYuLjM4NWFmZjY2NjJiMGRiYmIyMjkwMGI3NDk3MDhlMDQ5ZjJkNDA1
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVu
YXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8v
cHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisgICAgICAgIGRp
ZG4ndCBuZWVkIHRvIGluaGVyaXQgZnJvbSBNZWRpYVNhbXBsZUFWRk9iakMuIAorCiAyMDIyLTAz
LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWJXZWJS
VENDb2RlY3M6OnNldEVuY29kZVJhdGVzIHNob3VsZCBzZW5kIExpYldlYlJUQ0NvZGVjc1Byb3h5
OjpTZXRFbmNvZGVSYXRlcyBvbmx5IHdoZW4gdGhlIGVuY29kZXIgaXMgbGl2ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5jcHAKaW5kZXggMDY1OTg0MDY4OWU0YWJiNTIyMGU1YmRkODA1MjNkNzQwMmY0
YWNlMi4uNjVjYWMzNDE5NTE0MDRmY2JkOGYyOWYwZjAyMWM3ZmM0ZDc5NjNlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRp
bWVBVkZvdW5kYXRpb24uY3BwCkBAIC02NSw2ICs2NSw4IEBAIENNVGltZSB0b0NNVGltZShjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIGlmIChtZWRpYVRpbWUuaXNWYWxpZCgpKQog
ICAgICAgICB0aW1lLmZsYWdzIHw9IGtDTVRpbWVGbGFnc19WYWxpZDsKKyAgICBlbHNlCisgICAg
ICAgIHRpbWUuZmxhZ3MgJj0gfmtDTVRpbWVGbGFnc19WYWxpZDsKICAgICBpZiAobWVkaWFUaW1l
Lmhhc0JlZW5Sb3VuZGVkKCkpCiAgICAgICAgIHRpbWUuZmxhZ3MgfD0ga0NNVGltZUZsYWdzX0hh
c0JlZW5Sb3VuZGVkOwogICAgIGlmIChtZWRpYVRpbWUuaXNQb3NpdGl2ZUluZmluaXRlKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCmluZGV4
IDg3YjU2MjA3ZTg0ZGYzZjQ5OTliMzZmNTVmMmRmNmY4Yzk5ZDU3NmIuLmQ3NGI4ZDViNmMzMzg1
ZjNkODNjOTNkZjIzMTBmN2NkYTJiMjY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJh
c2VSZW1vdmVUaW1lckQKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JU
KFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZU5leHRGaXJl
VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2Vf
dCB0aW1lclNvdXJjZSwgQ01UaW1lIGZpcmVUaW1lLCB1aW50MzJfdCBmbGFncyksICh0aW1lYmFz
ZSwgdGltZXJTb3VyY2UsIGZpcmVUaW1lLCBmbGFncyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFz
ZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSwgT1NTdGF0dXMsIChDTVRp
bWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2VfdCB0aW1lclNvdXJjZSksICh0aW1l
YmFzZSwgdGltZXJTb3VyY2UpLCBQQUxfRVhQT1JUKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9T
T1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSwgUEFMX0VYUE9SVCkKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
U09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25DcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjVHlwZSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIENGRGljdGlv
bmFyeVJlZiBleHRlbnNpb25zLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERl
c2NyaXB0aW9uT3V0KSwgKGFsbG9jYXRvciwgY29kZWNUeXBlLCB3aWR0aCwgaGVpZ2h0LCBleHRl
bnNpb25zLCBmb3JtYXREZXNjcmlwdGlvbk91dCksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCBDVkltYWdlQnVmZmVyUmVmIGltYWdlQnVmZmVyLCBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYqIG91dERlc2MpLCAoYWxsb2NhdG9yLCBpbWFnZUJ1ZmZlciwgb3V0RGVz
YyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9S
VChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywg
Q01WaWRlb0RpbWVuc2lvbnMsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNj
KSwgKHZpZGVvRGVzYyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0
UHJlc2VudGF0aW9uRGltZW5zaW9ucywgQ0dTaXplLCAoQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIHZpZGVvRGVzYywgQm9vbGVhbiB1c2VQaXhlbEFzcGVjdFJhdGlvLCBCb29sZWFuIHVzZUNs
ZWFuQXBlcnR1cmUpLCAodmlkZW9EZXNjLCB1c2VQaXhlbEFzcGVjdFJhdGlvLCB1c2VDbGVhbkFw
ZXJ0dXJlKSwgUEFMX0VYUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1l
ZGlhU29mdExpbmsuaAppbmRleCA1NzBhNmE5ODUzYzQ0ODE2OGI5OTAyMjA0MjMwMDk2ZGZlOGZl
YjAxLi4zM2NhMWIyNmYzZDM3ZTU5MjVhMjViNmFjZmJkMTU4YTQzMmU3YWIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCkBAIC0yNjMsNiArMjYz
LDggQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGlt
ZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlVG8KICNkZWZpbmUgQ01UaW1lYmFzZVNldFRpbWVy
RGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSBzb2Z0TGlua19Db3JlTWVkaWFfQ01UaW1l
YmFzZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseQogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSkKICNkZWZpbmUgQ01UaW1lQ29weUFzRGljdGlvbmFyeSBzb2Z0
TGlua19Db3JlTWVkaWFfQ01UaW1lQ29weUFzRGljdGlvbmFyeQorU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUg
Y29kZWNUeXBlLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVm
IGV4dGVuc2lvbnMsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRp
b25PdXQpLCAoYWxsb2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMs
IGZvcm1hdERlc2NyaXB0aW9uT3V0KSkKKyNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
Q3JlYXRlIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXRE
ZXNjKSkKICNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZm
ZXIgc29mdExpbmtfQ29yZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywgQ01WaWRlb0RpbWVuc2lvbnMs
IChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjKSwgKHZpZGVvRGVzYykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRM
aW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
LmgKaW5kZXggNWJkNTEyZjE1YmY4MDUzNzdjZjkxM2FiZjY5ZDAwY2M5ODc1NzdkYy4uMjVkNzU1
ZjUxNTFjYThlNWNjOTBjMzU4M2MyZWRlNGMzZGEzMWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaApAQCAtMzM4LDExICsz
MzgsMTIgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25TZXRBdXRob3JpemVkVG8KIAogI2lmICFQTEFURk9STShXQVRDSE9T
KQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24sIEFWUm91
dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5T
U3RyaW5nICopCi0jZGVmaW5lIEFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWRE
aWRDaGFuZ2VOb3RpZmljYXRpb24gUEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rv
ck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKQorI2RlZmluZSBB
VlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IGdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERp
ZENoYW5nZU5vdGlmaWNhdGlvbigpCiAjZW5kaWYgLy8gSEFWRShXQVRDSE9TKQogCiAjaWYgSEFW
RShBVlJPVVRFUElDS0VSVklFVykKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFBBTCwg
QVZGb3VuZGF0aW9uLCBBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZp
Y2F0aW9uLCBOU05vdGlmaWNhdGlvbk5hbWUpCisjZGVmaW5lIEFWT3V0cHV0Q29udGV4dE91dHB1
dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENv
bnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKICNlbmRpZiAvLyBIQVZF
KEFWUk9VVEVQSUNLRVJWSUVXKQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDk4YjAzNTc5MWE2ZWJiMGQ5ZjE1NzFhNTdhNDJlY2Q1ZjE1NWNmYjku
LjVkZWU3NTQwNTM1NzlmNTViNTVmMmZlNGFkMGRkMGE2OWRlYmZkNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zMTIsNiArMzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRmxvYXRSZWN0Q29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLmNwcApAQCAtNjQ5LDYgKzY1MCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKIAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhYTQ0ZjVmNTMxNjdi
OWJjMGYxNDIzZjI3YmZjMjRkNzE3ZWJhY2ZhLi5mOWUwYWJhZjRiOTIyYjg5MzcyZjliYTk3MjU0
MDlmYmM3YjdmODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM4MSw2ICszODEsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0g
QG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Db2xvckNvY29hLm1tCiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWEyMjdkNTk4ZTQyOWQ4NTViYjNkZWVkYTli
MWQ0NzI4MGQ2MjQzYi4uMTgxOTc0NDllZWQ2NDkzNzlmZjFmNDI3MTY4ZGFiNWRmODdkOWZkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU3OSw2ICsxNTc5LDggQEAKIAkJNTE0Qzc2N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjY2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmggKi87IH07CiAJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdGMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTE1MEI1REQyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQjVE
QzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTUwQjVERjI3Q0RGNDk5MDA0RkM4MUUgLyog
Q01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi87IH07CiAJ
CTUxNTFGMDdFMjYxNTQzNUEwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTFGMDdCMjYxNTM2
M0YwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg5MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQ
cm92aWRlci5oICovOyB9OwogCQk1MTVCRTE5MjFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NzcsNiArOTc3OSw4IEBA
CiAJCTUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNTBCNURDMjdDREYyRTAwMDRGQzgxRSAvKiBD
TVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDTVV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVVuaXF1ZUlk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODgxRDU0RjVG
NjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTI4OSw2ICsyOTI5
Myw4IEBACiAJCQkJN0JDRDQyREMyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29j
b2EuaCAqLywKIAkJCQlDREY5OTUwMTI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFja1ByaXZh
dGVXZWJNLmNwcCAqLywKIAkJCQlDREY5OTUwMDI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmggKi8sCisJCQkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRp
bGl0aWVzLmggKi8sCisJCQkJNTE1MEI1REUyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVz
Lm1tICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi8s
CiAJCQkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EubW0gKi8sCiAJCQkJ
QjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENvY29hLm1tICovLApAQCAtMzM4
OTcsNiArMzM5MDMsNyBAQAogCQkJCUY0RDA3NTU5MjM0RDgyMzMwMDg4MUU3MyAvKiBDbGlwYm9h
cmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MDM3MTYy
MUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJE
MTMxNEZBMDlENTAwNzQ1N0FFIC8qIENsb3NlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NTBCNUREMjdDREYyRTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzBDMDU0Q0IxMTE4QzhFNDAwQ0UyNjM2IC8qIENvZGVHZW5lcmF0b3IucG0gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjVERjBFODFCOUFCMDBCMjU5NjUgLyogQ29sbGFwc2VkQm9yZGVyVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MjVBNDlBMTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xs
ZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODgwNCw2ICszODgxMSw3IEBA
CiAJCQkJQ0RGNEI3MTUxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREI3MDQ1QjFGNzQ2NUExMDAzOTIzREYgLyogQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMjI0MjgxRjc1Njk2NjAwNUYwNzdCIC8qIENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1MEI1
REYyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlckNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQ
VU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2Q0ExMUQyMEU1MDAwNEMyMDFD
IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAppbmRleCAwYTZmMjhhMjAxMzEzNTUzNThiNmU3ZjljZGMxMjZhNGQ1
YzBlNmFjLi43MTQ0MmE3YjNlNzkxNmIyYTI0N2ZkZTYyNzliNzRkYTBjNjBmYzU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI2LDYgKzI2LDkgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgpAQCAtNDAsOCArNDMs
MTAgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyOwogY2xhc3MgTW9ja1NhbXBsZUJveDsKIGNsYXNzIFByb2Nlc3NJ
ZGVudGl0eTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsK
ICAgICBlbnVtIFR5cGUgewpAQCAtMTE5LDcgKzEyNCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNBbHBoYTsgfQogICAgIGJvb2wg
aGFzU3luY0luZm8oKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgSGFzU3luY0luZm87IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQu
cHJpbnQoIntQVFMoIiwgcHJlc2VudGF0aW9uVGltZSgpLCAiKSwgRFRTKCIsIGRlY29kZVRpbWUo
KSwgIiksIGR1cmF0aW9uKCIsIGR1cmF0aW9uKCksICIpLCBmbGFncygiLCAoaW50KWZsYWdzKCks
ICIpLCBwcmVzZW50YXRpb25TaXplKCIsIHByZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCAieCIs
IHByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSwgIil9Iik7CisgICAgfQorCiAgICAgU3RyaW5n
IHRvSlNPTlN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIG9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CkBAIC0xMzQsOCArMTQzLDEyOCBAQCBwdWJsaWM6CiAgICAgfQog
fTsKIAorc3RydWN0IEF1ZGlvSW5mbzsKK3N0cnVjdCBWaWRlb0luZm87CisKK3N0cnVjdCBUcmFj
a0luZm8gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHJhY2tJbmZvPiB7CisgICAgZW51
bSBjbGFzcyBUcmFja1R5cGUgeyBVbmtub3duLCBBdWRpbywgVmlkZW8gfTsKKworICAgIGJvb2wg
aXNBdWRpbygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUcmFja1R5cGU6OkF1ZGlvOyB9Cisg
ICAgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6Vmlk
ZW87IH0KKworICAgIFRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhY2tJbmZvJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpIHx8IGNvZGVjTmFtZSAhPSBvdGhl
ci5jb2RlY05hbWUgfHwgdHJhY2tJRCAhPSBvdGhlci50cmFja0lEKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZXF1YWxUbyhvdGhlcik7CisgICAgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQorCisgICAgRm91ckNDIGNvZGVjTmFtZTsKKyAgICB1aW50NjRfdCB0
cmFja0lEIHsgMCB9OworCisgICAgdmlydHVhbCB+VHJhY2tJbmZvKCkgPSBkZWZhdWx0OworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZvJiBvdGhl
cikgY29uc3QgPSAwOworICAgIFRyYWNrSW5mbyhUcmFja1R5cGUgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUodHlwZSkgeyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVHJhY2tUeXBlIG1fdHlwZSB7
IFRyYWNrVHlwZTo6VW5rbm93biB9OworfTsKKworc3RydWN0IFZpZGVvSW5mbyA6IHB1YmxpYyBU
cmFja0luZm8geworICAgIHN0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFZpZGVvSW5mbygpKTsgfQorCisgICAgRmxvYXRTaXplIHNpemU7CisgICAg
Ly8gU2l6ZSBpbiBwaXhlbHMgYXQgd2hpY2ggdGhlIHZpZGVvIGlzIHJlbmRlcmVkLiBUaGlzIGlz
IGFmdGVyIGl0IGhhcworICAgIC8vIGJlZW4gc2NhbGVkIGJ5IGl0cyBhc3BlY3QgcmF0aW8uCisg
ICAgRmxvYXRTaXplIGRpc3BsYXlTaXplOworICAgIHVpbnQ4X3QgYml0RGVwdGggeyA4IH07Cisg
ICAgUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25l
IH07CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhdG9tRGF0YTsKKworcHJpdmF0ZToKKyAg
ICBWaWRlb0luZm8oKQorICAgICAgICA6IFRyYWNrSW5mbyhUcmFja1R5cGU6OlZpZGVvKSB7IH0K
KyAgICBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZvJiBvdGhlclZpZGVvSW5mbykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8Y29uc3QgVmlkZW9J
bmZvPihvdGhlclZpZGVvSW5mbyk7CisgICAgICAgIHJldHVybiBzaXplID09IG90aGVyLnNpemUg
JiYgZGlzcGxheVNpemUgPT0gb3RoZXIuZGlzcGxheVNpemUgJiYgYml0RGVwdGggPT0gb3RoZXIu
Yml0RGVwdGggJiYgY29sb3JTcGFjZSA9PSBvdGhlci5jb2xvclNwYWNlICYmIHJvdGF0aW9uID09
IG90aGVyLnJvdGF0aW9uICYmICgoIWF0b21EYXRhICYmICFvdGhlci5hdG9tRGF0YSkgfHwgKGF0
b21EYXRhICYmIG90aGVyLmF0b21EYXRhICYmICphdG9tRGF0YSA9PSAqb3RoZXIuYXRvbURhdGEp
KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQXVkaW9JbmZvIDogcHVibGljIFRyYWNrSW5mbyB7Cisg
ICAgc3RhdGljIFJlZjxBdWRpb0luZm8+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
QXVkaW9JbmZvKCkpOyB9CisKKyAgICB1aW50MzJfdCByYXRlIHsgMCB9OworICAgIHVpbnQzMl90
IGNoYW5uZWxzIHsgMCB9OworICAgIHVpbnQzMl90IGZyYW1lc1BlclBhY2tldCB7IDAgfTsKKyAg
ICB1aW50MzJfdCBiaXREZXB0aCB7IDE2IH07CisgICAgaW50OF90IHByb2ZpbGUgeyAwIH07Cisg
ICAgaW50OF90IGV4dGVuZGVkUHJvZmlsZSB7IDAgfTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGNvb2tpZURhdGE7CisKK3ByaXZhdGU6CisgICAgQXVkaW9JbmZvKCkKKyAgICAgICAgOiBU
cmFja0luZm8oVHJhY2tUeXBlOjpBdWRpbykgeyB9CisgICAgYm9vbCBlcXVhbFRvKGNvbnN0IFRy
YWNrSW5mbyYgb3RoZXJBdWRpb0luZm8pIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRv
JiBvdGhlciA9IGRvd25jYXN0PGNvbnN0IEF1ZGlvSW5mbz4ob3RoZXJBdWRpb0luZm8pOworICAg
ICAgICByZXR1cm4gcmF0ZSA9PSBvdGhlci5yYXRlICYmIGNoYW5uZWxzID09IG90aGVyLmNoYW5u
ZWxzICYmIGJpdERlcHRoID09IG90aGVyLmJpdERlcHRoICYmIGZyYW1lc1BlclBhY2tldCA9PSBv
dGhlci5mcmFtZXNQZXJQYWNrZXQgJiYgcHJvZmlsZSA9PSBvdGhlci5wcm9maWxlICYmIGV4dGVu
ZGVkUHJvZmlsZSA9PSBvdGhlci5leHRlbmRlZFByb2ZpbGUgJiYgKCghY29va2llRGF0YSAmJiAh
b3RoZXIuY29va2llRGF0YSkgfHwgKGNvb2tpZURhdGEgJiYgb3RoZXIuY29va2llRGF0YSAmJiAq
Y29va2llRGF0YSA9PSAqb3RoZXIuY29va2llRGF0YSkpOworICAgIH0KK307CisKK2NsYXNzIE1l
ZGlhU2FtcGxlc0Jsb2NrIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWVkaWFTYW1wbGVJdGVtIHsK
KyAgICAgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWU7CisgICAgICAgIE1lZGlhVGltZSBk
ZWNvZGVUaW1lOworICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb247CisgICAgICAgIHN0ZDo6dmFy
aWFudDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlLCBSZWY8Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4+IGRhdGE7CisgICAgICAgIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBmbGFnczsKKyAg
ICB9OworCisgICAgdm9pZCBzZXRJbmZvKFJlZlB0cjxjb25zdCBUcmFja0luZm8+JiYgaW5mbykg
eyBtX2luZm8gPSBXVEZNb3ZlKGluZm8pOyB9CisgICAgY29uc3QgVHJhY2tJbmZvKiBpbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmZvLmdldCgpOyB9CisgICAgYm9vbCBpc1ZpZGVvKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvICYmIG1faW5mby0+aXNWaWRlbygpOyB9CisgICAgYm9vbCBpc0F1ZGlv
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvICYmIG1faW5mby0+aXNBdWRpbygpOyB9CisgICAgVHJh
Y2tJbmZvOjpUcmFja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mbyA/IG1faW5mby0+
dHlwZSgpIDogVHJhY2tJbmZvOjpUcmFja1R5cGU6OlVua25vd247IH0KKyAgICB2b2lkIGFwcGVu
ZChNZWRpYVNhbXBsZUl0ZW0mJiBpdGVtKSB7IG1fc2FtcGxlcy5hcHBlbmQoV1RGTW92ZShpdGVt
KSk7IH0KKyAgICB2b2lkIGFwcGVuZChNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrKSB7IG1fc2Ft
cGxlcy5hcHBlbmRWZWN0b3Ioc3RkOjpleGNoYW5nZShibG9jay5tX3NhbXBsZXMsIHsgfSkpOyB9
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9Owor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5pc0VtcHR5KCk7IH0K
KyAgICB2b2lkIGNsZWFyKCkgeyBtX3NhbXBsZXMuY2xlYXIoKTsgfQorICAgIHVzaW5nIFNhbXBs
ZXNWZWN0b3IgPSBWZWN0b3I8TWVkaWFTYW1wbGVJdGVtPjsKKyAgICBTYW1wbGVzVmVjdG9yIHRh
a2VTYW1wbGVzKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NhbXBsZXMsIHsgfSk7IH0KKwor
ICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlc1tpbmRleF07IH0KKyAgICBjb25zdCBNZWRpYVNhbXBsZUl0ZW0m
IGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmZpcnN0KCk7IH0KKyAgICBjb25zdCBN
ZWRpYVNhbXBsZUl0ZW0mIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMubGFzdCgpOyB9
CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZXMuYmVnaW4oKTsgfQorICAgIFNhbXBsZXNWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5lbmQoKTsgfQorCitwcml2YXRlOgorICAg
IFJlZlB0cjxjb25zdCBUcmFja0luZm8+IG1faW5mbzsKKyAgICBTYW1wbGVzVmVjdG9yIG1fc2Ft
cGxlczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpWaWRlb0luZm8pCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OlRyYWNrSW5mbyYgaW5mbykgeyByZXR1cm4gaW5mby5pc1ZpZGVvKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpBdWRpb0luZm8pCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OlRyYWNrSW5mbyYgaW5mbykgeyByZXR1cm4gaW5mby5pc0F1ZGlvKCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24+IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGY4N2I2YTRmNjNi
MjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQuLjFlNjFkMGI2ZmFiNzUxMDRiN2ZhMDAyYThi
ZDA0NTZjYjQ2ZjhlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cApAQCAtMTUyLDYgKzE1MiwyNSBAQCBTaGFyZWRCdWZmZXJEYXRhVmlldyBGcmFnbWVudGVkU2hh
cmVkQnVmZmVyOjpnZXRTb21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0CiAgICAgcmV0dXJu
IHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIHBvc2l0aW9uIC0gZWxlbWVudC0+YmVnaW5Q
b3NpdGlvbiB9OwogfQogCitSZWY8U2hhcmVkQnVmZmVyPiBGcmFnbWVudGVkU2hhcmVkQnVmZmVy
OjpnZXRDb250aWd1b3VzRGF0YShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpIGNvbnN0
Cit7CisgICAgaWYgKHBvc2l0aW9uID49IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7CisgICAgbGVuZ3RoID0gc3RkOjptaW4obV9zaXplIC0gcG9zaXRpb24s
IGxlbmd0aCk7CisgICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogZWxlbWVudCA9IGdl
dFNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7CisgICAgc2l6ZV90IG9mZnNldEluU2VnbWVu
dCA9IHBvc2l0aW9uIC0gZWxlbWVudC0+YmVnaW5Qb3NpdGlvbjsKKyAgICBpZiAoZWxlbWVudC0+
c2VnbWVudC0+c2l6ZSgpIC0gb2Zmc2V0SW5TZWdtZW50ID49IGxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIG9m
ZnNldEluU2VnbWVudCwgbGVuZ3RoIH0uY3JlYXRlU2hhcmVkQnVmZmVyKCk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvbWJpbmVkRGF0YTsKKyAgICBjb21iaW5lZERhdGEucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGgpOworICAgIGNvbWJpbmVkRGF0YS5hcHBlbmQoZWxlbWVudC0+c2VnbWVu
dC0+ZGF0YSgpICsgb2Zmc2V0SW5TZWdtZW50LCBlbGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBv
ZmZzZXRJblNlZ21lbnQpOworICAgIGZvciAoKytlbGVtZW50OyBjb21iaW5lZERhdGEuc2l6ZSgp
IDwgbGVuZ3RoICYmIGVsZW1lbnQgIT0gbV9zZWdtZW50cy5lbmQoKTsgZWxlbWVudCsrKSB7Cisg
ICAgICAgIGF1dG8gY2FuQ29weSA9IHN0ZDo6bWluKGxlbmd0aCAtIGNvbWJpbmVkRGF0YS5zaXpl
KCksIGVsZW1lbnQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgICAgIGNvbWJpbmVkRGF0YS5hcHBl
bmQoZWxlbWVudC0+c2VnbWVudC0+ZGF0YSgpLCBjYW5Db3B5KTsKKyAgICB9CisgICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoY29tYmluZWREYXRhKSk7Cit9CisKIGNvbnN0
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50VmVjdG9yRW50cnkqIEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI6OmdldFNlZ21lbnRGb3JQb3NpdGlvbihzaXplX3QgcG9zaXRpb24pIGNv
bnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQocG9zaXRpb24gPCBtX3NpemUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBjYWVmM2YyNjIwMDMzZGQ4Y2ZmMTU2MjNm
MjNjNmI2YzliNTM0YjM3Li4zYmY4YTZkMTdlMjJmYTJlNzk0YmY0ZmY2ODE2YTU4MmU5MGY5OTY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNTQsNiArNTQsNyBA
QCB0eXBlZGVmIHN0cnVjdCBfR0J5dGVzIEdCeXRlczsKICNpZiBVU0UoRk9VTkRBVElPTikKIE9C
SkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNEYXRhOwordHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlQ01CbG9ja0J1ZmZlciogQ01CbG9ja0J1ZmZlclJlZjsKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTE0OSw2ICsxNTAsNyBAQCBwdWJsaWM6CiAjaWYgVVNFKEZPVU5EQVRJT04pCiAg
ICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TRGF0YUFycmF5KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyPiBjcmVhdGUoTlNEYXRhKik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENNQmxv
Y2tCdWZmZXJSZWY+IGNyZWF0ZUNNQmxvY2tCdWZmZXIoKSBjb25zdDsKICNlbmRpZgogI2lmIFVT
RShDRikKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShDRkRhdGFSZWYpOwpAQCAtMTk0LDYgKzE5Niw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIGJlZ2luIGFuZCBlbmQgdGFrZSBPKDEpIHRpbWUsIHRoaXMgdGFrZXMgTyhsb2coTikpIHRp
bWUuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcmVkQnVmZmVyRGF0YVZpZXcgZ2V0U29tZURhdGEo
c2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2hhcmVkQnVm
ZmVyPiBnZXRDb250aWd1b3VzRGF0YShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpIGNv
bnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvSGV4U3RyaW5nKCkgY29uc3Q7CiAK
QEAgLTI0Niw3ICsyNDksNyBAQCBwcml2YXRlOgogCiAgICAgLy8gQ29tYmluZXMgYWxsIHRoZSBz
ZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVyIGNsZWFy
aW5nIHRoZSBGcmFnbWVudGVkU2hhcmVkQnVmZmVyLgogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rv
cjx1aW50OF90PiB0YWtlRGF0YSgpOwotICAgIGNvbnN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkq
IGdldFNlZ21lbnRGb3JQb3NpdGlvbihzaXplX3QgcG9zaXRpdGlvbikgY29uc3Q7CisgICAgY29u
c3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBw
b3NpdGlvbikgY29uc3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgaW50ZXJuYWxs
eUNvbnNpc3RlbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcAppbmRleCBiNzAzY2Zl
Y2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4ZjBkZmYwYjM0YzY4
YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwCkBAIC0yMTksNyAr
MjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPiBBdWRpb0Zp
bGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXItPmFwcGVuZERhdGEo
V1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAgICBwYXJzZXIt
PmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlv
RmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7IFdURk1vdmUoYnVm
ZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlvbiksIFdURk1vdmUo
c2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uSGVscGVySU9TLm1tCmluZGV4IGE0MGVjYmI4YjgyZTg5
YTRkZGRjNDExMjY0YWI3Y2NmYzk2MGY5ZTIuLjlhOGU5MWZlZTliMzMzYmE1OWE3ZGY3NjljZDI3
MDJjOGMzNzRhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9NZWRpYVNlc3Npb25IZWxwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL01lZGlhU2Vzc2lvbkhlbHBlcklPUy5tbQpAQCAtNDYwLDcgKzQ2MCw3IEBAIC0g
KHZvaWQpc3RhcnRNb25pdG9yaW5nQWlyUGxheVJvdXRlcwogICAgICAgICAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgICAgICAgICBwcm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRl
Y3RvciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NBVlJvdXRlRGV0ZWN0b3JJbnN0YW5jZSgpIGluaXRd
KTsKICAgICAgICAgICAgIHByb3RlY3RlZFNlbGYtPl9yb3V0ZURldGVjdG9yLmdldCgpLnJvdXRl
RGV0ZWN0aW9uRW5hYmxlZCA9IHByb3RlY3RlZFNlbGYtPl9tb25pdG9yaW5nQWlyUGxheVJvdXRl
czsKLSAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6cHJvdGVjdGVkU2VsZi5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iod2lyZWxlc3NS
b3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2U6KSBuYW1lOkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91
dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnByb3RlY3RlZFNlbGYtPl9y
b3V0ZURldGVjdG9yLmdldCgpXTsKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6cHJvdGVjdGVkU2VsZi5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3Iod2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2U6KSBuYW1lOlBBTDo6QVZS
b3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbiBv
YmplY3Q6cHJvdGVjdGVkU2VsZi0+X3JvdXRlRGV0ZWN0b3IuZ2V0KCldOwogCiAgICAgICAgICAg
ICBwcm90ZWN0ZWRTZWxmLT5fY2FsbGJhY2stPmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKCk7CiAgICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCmlu
ZGV4IDY2NDI3ZGZiZjA1ZmQ3MjZhZmQ5OWEzMjljNmFjMTFhYzllZDdhNTUuLjE5MDhiNDZhZmI1
ZDYxMDQxMmZhZWNkYzEyNDIxNjRlZmE2MTk0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW1wb3J0ICJXZWJDb3JlSklUT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRy
YXMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNp
bXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2ltcG9ydCA8c3RyaW5nLmg+CiAj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1R5cGVDYXN0c0Nv
Y29hLmg+CkBAIC05OSw2ICsxMDAsNTUgQEAgdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjph
cHBlbmQoTlNEYXRhICpkYXRhKQogICAgIHJldHVybiBhcHBlbmQoYnJpZGdlX2Nhc3QoZGF0YSkp
OwogfQogCitzdGF0aWMgdm9pZCBGcmVlRGF0YVNlZ21lbnQodm9pZCogcmVmY29uLCB2b2lkKiwg
c2l6ZV90KQoreworICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGF0
YVNlZ21lbnQqPihyZWZjb24pOworICAgIGJ1ZmZlci0+ZGVyZWYoKTsKK30KKworUmV0YWluUHRy
PENNQmxvY2tCdWZmZXJSZWY+IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tC
dWZmZXIoKSBjb25zdAoreworICAgIGF1dG8gc2VnbWVudFRvQ01CbG9ja0J1ZmZlciA9IFtdIChj
b25zdCBEYXRhU2VnbWVudCYgc2VnbWVudCkgLT4gUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+
IHsKKyAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgZG9jdW1l
bnRhdGlvbjoKKyAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywg
dGhpcyBzdHJ1Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KKyAgICAg
ICAgLy8gVG8gYXZvaWQgbGluay10aW1lIGlzc3VlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBj
bGllbnRzIGZpbGwgQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlJ3MgZnVuY3Rpb24gcG9p
bnRlciBmaWVsZHMKKyAgICAgICAgLy8gYnkgdXNpbmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBy
YXRoZXIgdGhhbiBkZWNsYXJpbmcgdGhlbSBhcyBnbG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCisg
ICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxvY2F0b3I7CisgICAgICAg
IGFsbG9jYXRvci52ZXJzaW9uID0gMDsKKyAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZURhdGFTZWdtZW50
OworICAgICAgICBhbGxvY2F0b3IucmVmQ29uID0gY29uc3RfY2FzdDxEYXRhU2VnbWVudCo+KCZz
ZWdtZW50KTsKKyAgICAgICAgc2VnbWVudC5yZWYoKTsKKyAgICAgICAgQ01CbG9ja0J1ZmZlclJl
ZiBwYXJ0aWFsQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKFBBTDo6Q01CbG9ja0J1ZmZl
ckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc2VnbWVudC5kYXRhKCkpKSwgc2VnbWVudC5zaXplKCksIG51bGxwdHIs
ICZhbGxvY2F0b3IsIDAsIHNlZ21lbnQuc2l6ZSgpLCAwLCAmcGFydGlhbEJ1ZmZlcikgIT0ga0NN
QmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gYWRvcHRDRihwYXJ0aWFsQnVmZmVyKTsKKyAgICB9OworCisgICAgaWYgKGhhc09uZVNl
Z21lbnQoKSAmJiAhaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc2VnbWVudFRvQ01CbG9ja0J1
ZmZlcihtX3NlZ21lbnRzWzBdLnNlZ21lbnQpOworCisgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdC
bG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJD
cmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpc0VtcHR5KCkgPyAwIDogbV9zZWdtZW50
cy5zaXplKCksIDAsICZyYXdCbG9ja0J1ZmZlcik7CisgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1
ZmZlck5vRXJyIHx8ICFyYXdCbG9ja0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgYXV0byBibG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOworCisgICAgaWYg
KGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGJsb2NrQnVmZmVyOworCisgICAgZm9yIChhdXRv
JiBzZWdtZW50IDogbV9zZWdtZW50cykgeworICAgICAgICBpZiAoIXNlZ21lbnQuc2VnbWVudC0+
c2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gcGFydGlhbEJ1ZmZl
ciA9IHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIoc2VnbWVudC5zZWdtZW50KTsKKyAgICAgICAgaWYg
KCFwYXJ0aWFsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlm
IChQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UocmF3QmxvY2tCdWZmZXIs
IHBhcnRpYWxCdWZmZXIuZ2V0KCksIDAsIDAsIDApICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGJsb2NrQnVmZmVy
OworfQorCiBSZXRhaW5QdHI8TlNEYXRhPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZU5TRGF0YSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGJyaWRnZV9jYXN0KGNyZWF0ZUNGRGF0YSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzLmgKaW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBl
MzM5NDQ1Yy4uYWZjMzEyNTRlYjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0
NzBiZywKICAgICBTbXB0ZTE3MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBG
aWxtLAorICAgIEJ0MjAyMCwKKyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAg
IFNtcHRlRWc0MzIsCisgICAgSmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4g
ewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQK
ICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5
MDczNWM4OGQ3ZmU1MWYzNzc1NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkx
MWViMDA4Yjc1NmM4ZGVhNzc0ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzLmgKQEAgLTM0LDYgKzM0LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50cyA6IHVpbnQ4X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21w
dGUxNzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIw
Tm9uY29uc3RhbnRMdW1pbmFuY2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAg
VW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1Miwx
MyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM+IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6UmdiLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5j
ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQy
MDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFl
NjJhYjI0NDYyODhhODQwZDRlYi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2Jj
MmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAg
LTMzLDYgKzMzLDIwIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYx
OTY2MjEsCisgICAgR2FtbWEyMmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0
MG0sCisgICAgTGluZWFyLAorICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQs
CisgICAgQnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAg
QnQyMDIwXzEyYml0LAorICAgIFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFy
aWJTdGRCNjdIbGcsCisgICAgVW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKQEAgLTQ0LDcgKzU4LDIxIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0s
Ci0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
SWVjNjE5NjYyMQorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkllYzYxOTY2MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0s
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
TGluZWFyLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkxvZywKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpMb2dTcXJ0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwK
KyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
dDIwMjBfMTBiaXQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQyMDIwXzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRC
NjdIbGcsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwNGNi
ZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliLi5iZjQ3ZmNlYmI1NmUyZjlkZTU0
YTQyMGRlMmQyMTZhNDdlY2EyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMzk4LDcgKzM5OCw3
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNr
QnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1cnJlbnRTYW1wbGVQVFNJ
dGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxl
LgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgog
ICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtleShjdXJyZW50U2FtcGxl
UFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50U2FtcGxlUFRTSXRlcmF0
b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRvIGN1cnJlbnRTYW1wbGVE
VFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxl
V2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJyZW50U2FtcGxlRFRTSXRl
cmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmVuZCgpKTsKQEAgLTEx
NzEsNiArMTE3MSw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBs
ZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAgICAgICAgICAgICAgTWVk
aWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRp
bWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VFbmRUaW1lID0gZnJhbWVF
bmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAKKyAgICAgICAgICAgICAg
ICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjpp
dGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdEJ1ZmZlcmVk
VGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAgPCB0cmFja0J1
ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
bmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcywgcGVyZm9ybSBh
IHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJvdXRlUGlja2VyVmll
d1RhcmdldFBpY2tlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyLm1tCmluZGV4IGRiODgy
NTExYjFhZGViNjFmNzE5OWViOTI1NGI4ODMyMmU4OWE0ZWQuLmEyMjg4NmU0OWE5YTRkMDk0MTY1
ZmMxNGM1YzIxNzYzN2Q1ZjIxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyLm1tCkBAIC05MSw3ICs5MSw3IEBAIEFW
T3V0cHV0Q29udGV4dCAqIEFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpvdXRwdXRDb250
ZXh0SW50ZXJuYWwoYm9vbCB1c2VpCiAgICAgICAgICAgICBtX291dHB1dENvbnRleHQgPSBbUEFM
OjpnZXRBVk91dHB1dENvbnRleHRDbGFzcygpIG91dHB1dENvbnRleHRdOwogICAgICAgICBBU1NF
UlQobV9vdXRwdXRDb250ZXh0KTsKICAgICAgICAgaWYgKG1fb3V0cHV0Q29udGV4dCkKLSAgICAg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iobm90aWZp
Y2F0aW9uSGFuZGxlcjopIG5hbWU6UEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4
dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24oKSBvYmplY3Q6bV9vdXRwdXRDb250
ZXh0LmdldCgpXTsKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3Rv
cjpAc2VsZWN0b3Iobm90aWZpY2F0aW9uSGFuZGxlcjopIG5hbWU6UEFMOjpBVk91dHB1dENvbnRl
eHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX291dHB1dENvbnRl
eHQuZ2V0KCldOwogICAgIH0KIAogICAgIHJldHVybiBtX291dHB1dENvbnRleHQuZ2V0KCk7CkBA
IC0xMTEsNyArMTExLDcgQEAgQVZSb3V0ZURldGVjdG9yICpBVlJvdXRlUGlja2VyVmlld1Rhcmdl
dFBpY2tlcjo6cm91dGVEZXRlY3RvcigpCiB7CiAgICAgaWYgKCFtX3JvdXRlRGV0ZWN0b3IpIHsK
ICAgICAgICAgbV9yb3V0ZURldGVjdG9yID0gYWRvcHROUyhbUEFMOjphbGxvY0FWUm91dGVEZXRl
Y3Rvckluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
c2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6Z2V0X0FW
Rm91bmRhdGlvbl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uKCkgb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9yb3V0ZVBp
Y2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iobm90aWZpY2F0aW9uSGFu
ZGxlcjopIG5hbWU6UEFMOjpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX3JvdXRlRGV0ZWN0b3IuZ2V0KCldOwogICAgICAg
ICBpZiAoW21fcm91dGVEZXRlY3RvciBtdWx0aXBsZVJvdXRlc0RldGVjdGVkXSkKICAgICAgICAg
ICAgIGF2YWlsYWJsZURldmljZXNEaWRDaGFuZ2UoKTsKICAgICB9CkBAIC0xNzAsMTMgKzE3MCwx
MyBAQCBBVk91dHB1dENvbnRleHQgKiBBVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0
cHV0Q29udGV4dCgpCiB2b2lkIEFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjppbnZhbGlk
YXRlUGxheWJhY2tUYXJnZXRzKCkKIHsKICAgICBpZiAobV9yb3V0ZURldGVjdG9yKSB7Ci0gICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBuYW1lOlBBTDo6Z2V0X0FWRm91bmRhdGlv
bl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0
aW9uKCkgb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CisgICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9yb3V0ZVBpY2tlclZp
ZXdEZWxlZ2F0ZS5nZXQoKSBuYW1lOlBBTDo6QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNE
ZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9yb3V0ZURldGVjdG9yLmdldCgp
XTsKICAgICAgICAgW21fcm91dGVEZXRlY3RvciBzZXRSb3V0ZURldGVjdGlvbkVuYWJsZWQ6Tk9d
OwogICAgICAgICBtX3JvdXRlUGlja2VyVmlldyA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYg
KG1fb3V0cHV0Q29udGV4dCkgewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
bmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbigpIG9iamVjdDptX291dHB1dENvbnRleHQuZ2V0KCldOworICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
Om1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkgbmFtZTpQQUw6OkFWT3V0cHV0Q29udGV4
dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om1fb3V0cHV0Q29udGV4
dC5nZXQoKV07CiAgICAgICAgIG1fb3V0cHV0Q29udGV4dCA9IG51bGxwdHI7CiAgICAgfQogCkBA
IC0yODIsOSArMjgyLDkgQEAgLSAodm9pZClub3RpZmljYXRpb25IYW5kbGVyOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgogICAgICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKFtbbm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0
cmluZzpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbigpXSkKKyAgICAgICAgaWYgKFtbbm90aWZpY2F0aW9uIG5hbWVd
IGlzRXF1YWxUb1N0cmluZzpQQUw6OkFWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFu
Z2VOb3RpZmljYXRpb25dKQogICAgICAgICAgICAgbV9jYWxsYmFjay0+Y3VycmVudERldmljZURp
ZENoYW5nZSgpOwotICAgICAgICBlbHNlIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFs
VG9TdHJpbmc6UEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91
dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKV0pCisgICAgICAgIGVsc2UgaWYgKFtb
bm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpQQUw6OkFWUm91dGVEZXRlY3Rvck11
bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb25dKQogICAgICAgICAgICAg
bV9jYWxsYmFjay0+YXZhaWxhYmxlRGV2aWNlc0RpZENoYW5nZSgpOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAppbmRleCA2Y2NmZmIwZDZh
OTJlZjA2YWU3NmY4OGEwYjI4NTY5NzVkYTNiMmY3Li4wMjVkMGQzNDRmM2FlYTQyOGE2ZWQ4NzY4
Njg4Y2NhYmZkMzdhMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFW
Rk9iakMuaApAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxh
dGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBw
bGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBs
ZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9CiAgICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5
dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5
KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KaW5kZXggZTgzOGVjZTMxN2U5MDQ0YmJhYzll
Yzc3MGI4OTFmYzlhZDMxY2RmMC4uOWNhZDg5ZDFjNzZjOWNjMTE4YjQ3MTIyYTU2Y2JkNTdhMTMx
MmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQpA
QCAtMjQ1LDExICsyNDUsNiBAQCBGbG9hdFNpemUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwcmVzZW50
YXRpb25TaXplKCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRTaXplKFBBTDo6Q01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbiwg
dHJ1ZSwgdHJ1ZSkpOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25U
aW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24o
KSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJl
c2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgp
LCAiKX0iKTsKLX0KLQogdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6Om9mZnNldFRpbWVzdGFtcHNC
eShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKIHsKICAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Q01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NN
VXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGU5YjZiMDc1ZDI2ODRjNTAyZDIzY2U1NGRiZDJkNDc0
MGFiY2NiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24q
IENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFRyYWNrSW5mbzsKKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mKTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0NNVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Q01VdGlsaXRpZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWMzZDhhZmI3NGZjMTU4MjI2Y2NjZTI3M2U0YWMz
MTQzZjM0NGE3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNNVXRpbGl0aWVzLmgiCisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgi
CisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZS5oIgorI2ltcG9ydCAi
TWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2ltcG9ydCAiV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKKyNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2Ny
aXB0aW9uLmg+CisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgorI2ltcG9ydCAiVmlkZW9U
b29sYm94U29mdExpbmsuaCIKKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlu
ay5oPgorI2ltcG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwv
Y2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24oY29uc3QgQXVkaW9JbmZvJiBpbmZvKQoreworICAgIEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbiBhc2JkIHsgfTsKKyAgICBhc2JkLm1Gb3JtYXRJRCA9IGluZm8uY29kZWNOYW1l
LnZhbHVlOworICAgIHVpbnQzMl90IHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAgYXV0byBlcnJv
ciA9IFBBTDo6QXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eShrQXVkaW9Gb3JtYXRQcm9wZXJ0eV9Gb3Jt
YXRJbmZvLCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCks
ICZzaXplLCAmYXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE1lZGlhLCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCBmYWlsZWQg
d2l0aCBlcnJvciAlZCAoJS40cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbihDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIGluZm8uY29va2llRGF0YS0+
c2l6ZSgpLCBpbmZvLmNvb2tpZURhdGEtPmRhdGEoKSk7Cit9CisKK3N0YXRpYyBDRlN0cmluZ1Jl
ZiBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyBw
cmltYXJpZXMpCit7CisgICAgc3dpdGNoIChwcmltYXJpZXMpIHsKKyAgICBjYXNlIFBsYXRmb3Jt
VmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
ckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpKZWRlY1AyMlBob3NwaG9yczoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQ
cmltYXJpZXM6OlNtcHRlMTcwbToKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmll
czo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmll
c19TTVBURV9DOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJw
NDMxOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFy
aWVzX0RDSV9QMzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVF
ZzQzMjoKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1h
cmllc19QM19ENjU7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAy
MDoKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmll
c19JVFVfUl8yMDIwOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK30KKworCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9u
KFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MpCit7
CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlclRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfNzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMjQwbToKKyAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8yNDBNXzE5OTU7CisgICAgY2FzZSBQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0OgorICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1Rf
MjA4NF9QUTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQyMDIwXzEwYml0OgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCdDIwMjBfMTJiaXQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0
aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOworICAg
IGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpBcmliU3RkQjY3SGxn
OgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rp
b25fSVRVX1JfMjEwMF9ITEc7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkllYzYxOTY2MjE6CisgICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1l
ZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6Omdl
dF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6
IG51bGxwdHI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2Zl
ckZ1bmN0aW9uX0xpbmVhcjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRj
aCAoY29lZmZpY2llbnRzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOworICAgIGNhc2UgUGxhdGZv
cm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZzoKKyAgICBjYXNlIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNi
Q3JNYXRyaXhfSVRVX1JfNzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZp
Y2llbnRzOjpTbXB0ZTI0MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0
cml4X1NNUFRFXzI0ME1fMTk5NTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9Cit9CisKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oY29uc3QgVHJhY2tJbmZvJiBpbmZvKQorewor
ICAgIGlmIChpbmZvLmlzQXVkaW8oKSkgeworICAgICAgICBhdXRvJiBhdWRpb0luZm8gPSBkb3du
Y2FzdDxjb25zdCBBdWRpb0luZm8+KGluZm8pOworICAgICAgICBpZiAoIWF1ZGlvSW5mby5jb29r
aWVEYXRhIHx8ICFhdWRpb0luZm8uY29va2llRGF0YS0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3dpdGNoIChhdWRpb0luZm8uY29kZWNOYW1lLnZhbHVl
KSB7CisjaWYgRU5BQkxFKE9QVVMpCisgICAgICAgIGNhc2UgJ29wdXMnOgorICAgICAgICAgICAg
aWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihh
dWRpb0luZm8pOworI2VuZGlmCisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICAgICAgY2FzZSAndm9y
Yic6CisgICAgICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb24oYXVkaW9JbmZvKTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGlu
Zm8uaXNWaWRlbygpKSB7CisgICAgICAgIGF1dG8mIHZpZGVvSW5mbyA9IGRvd25jYXN0PGNvbnN0
IFZpZGVvSW5mbz4oaW5mbyk7CisKKyAgICAgICAgYXV0byBkYXRhID0gdmlkZW9JbmZvLmF0b21E
YXRhLT5jcmVhdGVDRkRhdGEoKTsKKyAgICAgICAgQVNTRVJUKHZpZGVvSW5mby5jb2RlY05hbWUg
PT0gJ3ZwMDknIHx8IHZpZGVvSW5mby5jb2RlY05hbWUgPT0gJ3ZwMDgnKTsKKyAgICAgICAgQ0ZU
eXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKKyAgICAgICAg
Q0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgICAg
ICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgY29uZmlndXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMs
IFdURl9BUlJBWV9MRU5HVEgoY29uZmlndXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAg
ICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBQQUw6OmtDTUZvcm1hdERlc2Ny
aXB0aW9uRXh0ZW5zaW9uX1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKKyAgICAg
ICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRp
Y3QuZ2V0KCkgfTsKKworICAgICAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UuZnVsbFJhbmdl
ICYmICp2aWRlb0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2UpIHsKKyAgICAgICAgICAgIGV4dGVu
c2lvbnNLZXlzLmFwcGVuZChQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxS
YW5nZVZpZGVvKTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xl
YW5UcnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5w
cmltYXJpZXMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMgPSBjb252
ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKCp2aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJpZXMpKSB7
CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29s
b3JQcmltYXJpZXNLZXkpOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5k
KGNtQ29sb3JQcmltYXJpZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICh2aWRlb0luZm8uY29sb3JTcGFjZS50cmFuc2ZlcikgeworICAgICAgICAgICAgaWYgKGF1dG8g
Y21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKCp2aWRlb0lu
Zm8uY29sb3JTcGFjZS50cmFuc2ZlcikpIHsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zS2V5
cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uS2V5KTsKKyAgICAgICAgICAg
ICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVuY3Rpb24pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLm1h
dHJpeCkgeworICAgICAgICAgICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNS
TWF0cml4KCp2aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgpKSB7CisgICAgICAgICAgICAgICAg
ZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOworICAg
ICAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEo
KSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworCisgICAgICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlw
dGlvbiA9IG51bGxwdHI7CisgICAgICAgIENNVmlkZW9Db2RlY1R5cGUgY29kZWMgPSB2aWRlb0lu
Zm8uY29kZWNOYW1lID09ICJ2cDA5IiA/IGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSA6ICd2cDA4JzsK
KyAgICAgICAgaWYgKG5vRXJyICE9IFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvZGVjLCB2aWRlb0luZm8uc2l6ZS53aWR0aCgpLCB2aWRl
b0luZm8uc2l6ZS5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9u
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gYWRvcHRDRihm
b3JtYXREZXNjcmlwdGlvbik7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBudWxscHRyOwor
fQorCit9CisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKaW5kZXggYWUxNjQxNGYyMWM2ODQ2YzE4OTc3MDllMTQyNGU0YTZhNGI3NjFh
MC4uYjUyODlkY2M4NDJmODQ5YzA1MGJhY2ZkZDljM2U5YjAwOTE3NzQwOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQogCiAjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVXZWJNLmgiCisjaW5jbHVk
ZSAiQ01VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIklu
YmFuZFRleHRUcmFja1ByaXZhdGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0zNiw3ICsz
Nyw2IEBACiAjaW5jbHVkZSAiTWVkaWFTYW1wbGVBVkZPYmpDLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKLSNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgog
I2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlV2ViTS5oIgogI2luY2x1ZGUgIldlYk1BdWRpb1V0
aWxpdGllc0NvY29hLmgiCkBAIC0yMzUsMjUgKzIzNSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IExv
Z0FyZ3VtZW50PHdlYm06OklkPiB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTG9n
QXJndW1lbnQ8V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKLSAgICBz
dGF0aWMgQVNDSUlMaXRlcmFsIHRvU3RyaW5nKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlN0YXRlIHN0YXRlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAg
ICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpOb25lOiByZXR1
cm4gIk5vbmUiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRpbmdFYm1sOiByZXR1cm4gIlJlYWRpbmdFYm1sIl9zOwotICAgICAgICBj
YXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkRWJtbDogcmV0
dXJuICJSZWFkRWJtbCJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1NlZ21lbnQ6IHJldHVybiAiUmVhZGluZ1NlZ21lbnQiX3M7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJl
YWRpbmdJbmZvOiByZXR1cm4gIlJlYWRpbmdJbmZvIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkSW5mbzogcmV0dXJuICJSZWFkSW5m
byJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0
ZTo6UmVhZGluZ1RyYWNrczogcmV0dXJuICJSZWFkaW5nVHJhY2tzIl9zOwotICAgICAgICBjYXNl
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nVHJhY2s6IHJl
dHVybiAiUmVhZGluZ1RyYWNrIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlN0YXRlOjpSZWFkVHJhY2s6IHJldHVybiAiUmVhZFRyYWNrIl9zOwotICAg
ICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5n
Q2x1c3RlcjogcmV0dXJuICJSZWFkaW5nQ2x1c3RlciJfczsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gIlVua25vd24iX3M7Ci0gICAgfQotfTsKLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTI3NywxNCArMjU4LDE0IEBAIHN0YXRpYyBTdGF0dXMgc2Vn
bWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyhTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJl
YWRFcnJvCiB7CiAgICAgc3dpdGNoIChlcnJvcikgewogICAgIGNhc2UgU291cmNlQnVmZmVyUGFy
c2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkVuZE9mRmlsZTogcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtFbmRPZkZpbGUpOwotICAgIGNhc2UgU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFk
RXJyb3I6OkZhdGFsRXJyb3I6IHJldHVybiBTdGF0dXMoU3RhdHVzOjpDb2RlKFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVkKSk7CisgICAgY2FzZSBTb3VyY2VC
dWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0dXJuIFN0YXR1
cyhTdGF0dXM6OkNvZGUoV2ViTVBhcnNlcjo6RXJyb3JDb2RlOjpSZWFkZXJGYWlsZWQpKTsKICAg
ICB9CiB9CiAKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFkZXIgZmlu
YWwgOiBwdWJsaWMgd2VibTo6UmVhZGVyIHsKK2NsYXNzIFdlYk1QYXJzZXI6OlNlZ21lbnRSZWFk
ZXIgZmluYWwgOiBwdWJsaWMgd2VibTo6UmVhZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIGFwcGVuZFNlZ21lbnQoU2VnbWVudCYmIHNlZ21lbnQp
CisgICAgdm9pZCBhcHBlbmRTZWdtZW50KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNl
Z21lbnQpCiAgICAgewogICAgICAgICBtX2RhdGEucHVzaF9iYWNrKFdURk1vdmUoc2VnbWVudCkp
OwogICAgICAgICBpZiAobV9jdXJyZW50U2VnbWVudCA9PSBtX2RhdGEuZW5kKCkpCkBAIC0zNjUs
MjEgKzM0NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprV291
bGRCbG9jayk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgRnJlZVNoYXJlZEJ1ZmZlcih2b2lk
KiByZWZjb24sIHZvaWQqLCBzaXplX3QpCi0gICAgewotICAgICAgICBhdXRvKiBidWZmZXIgPSBy
ZWludGVycHJldF9jYXN0PFNoYXJlZEJ1ZmZlcio+KHJlZmNvbik7Ci0gICAgICAgIGJ1ZmZlci0+
ZGVyZWYoKTsKLSAgICB9Ci0KLSAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9S
ZWFkLCBDTUJsb2NrQnVmZmVyUmVmIG91dHB1dEJ1ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5
UmVhZCkKKyAgICBTdGF0dXMgUmVhZEludG8oc3RkOjpzaXplX3QgbnVtVG9SZWFkLCBTaGFyZWRC
dWZmZXJCdWlsZGVyJiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1BY3R1YWxseVJlYWQpCiAg
ICAgewotICAgICAgICBBU1NFUlQob3V0cHV0QnVmZmVyICYmIG51bUFjdHVhbGx5UmVhZCk7Cisg
ICAgICAgIEFTU0VSVChudW1BY3R1YWxseVJlYWQpOwogICAgICAgICBpZiAoIW51bUFjdHVhbGx5
UmVhZCkKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5
KTsKIAogICAgICAgICAqbnVtQWN0dWFsbHlSZWFkID0gMDsKLSAgICAgICAgaWYgKCFvdXRwdXRC
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9y
eSk7CiAKICAgICAgICAgd2hpbGUgKG51bVRvUmVhZCAmJiBtX2N1cnJlbnRTZWdtZW50ICE9IG1f
ZGF0YS5lbmQoKSkgewogICAgICAgICAgICAgYXV0byYgY3VycmVudFNlZ21lbnQgPSAqbV9jdXJy
ZW50U2VnbWVudDsKQEAgLTM4OSw0NCArMzYyLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHNoYXJlZEJ1ZmZlciA9IGN1cnJlbnRTZWdtZW50LmdldFNoYXJlZEJ1ZmZlcigpOwotICAg
ICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICB1aW50NjRfdCBsYXN0UmVhZCA9IDA7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiByYXdCbG9ja0J1ZmZlcjsKICAgICAgICAgICAgIGlmICghc2hhcmVkQnVmZmVyKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgYWxsb2NhdGUgbW9yZSBt
ZW1vcnkgdGhhbiBuZWVkZWQgaWYgdGhlIHJlYWQgaXMgcGFydGlhbC4KLSAgICAgICAgICAgICAg
ICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBudW1Ub1JlYWQsIGtDRkFsbG9jYXRvckRlZmF1bHQs
IG51bGxwdHIsIDAsIG51bVRvUmVhZCwga0NNQmxvY2tCdWZmZXJBc3N1cmVNZW1vcnlOb3dGbGFn
LCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tC
dWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtO
b3RFbm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0
YSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlv
biA9IDA7Ci0gICAgICAgICAgICAgICAgZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBv
aW50ZXIocmF3QmxvY2tCdWZmZXIsIDAsICZzZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIs
IChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBr
Q01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIudHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShudW1Ub1JlYWQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgYXV0byByZWFkUmVzdWx0ID0gY3Vy
cmVudFNlZ21lbnQucmVhZChtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkLCBibG9j
a0J1ZmZlckRhdGEpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNpemUobnVtVG9SZWFkKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5yZWFkKG1f
cG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJ1ZmZlci5kYXRhKCkpOwogICAgICAg
ICAgICAgICAgIGlmICghcmVhZFJlc3VsdC5oYXNfdmFsdWUoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHNlZ21lbnRSZWFkRXJyb3JUb1dlYm1TdGF0dXMocmVhZFJlc3VsdC5lcnJvcigp
KTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9IHJlYWRSZXN1bHQudmFsdWUoKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogY291bGQgd2Ugb25seSBj
cmVhdGUgYSBuZXcgQ01CbG9ja0J1ZmZlciBpZiB0aGUgYmFja2VuZCBtZW1vcnkgY2hhbmdlZCBz
aW5jZSB0aGUgcHJldmlvdXMgb25lPwotICAgICAgICAgICAgICAgIHNpemVfdCBjYW5SZWFkID0g
c3RkOjptaW48c2l6ZV90PihudW1Ub1JlYWQsIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpIC0gbV9wb3Np
dGlvbldpdGhpblNlZ21lbnQpOwotICAgICAgICAgICAgICAgIC8vIEZyb20gQ01CbG9ja0J1ZmZl
ckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246Ci0gICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgdGhpcyBzdHJ1Y3QgY29udGFpbnMgbWlz
YWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KLSAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBs
aW5rLXRpbWUgaXNzdWVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGNsaWVudHMgZmlsbCBDTUJs
b2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UncyBmdW5jdGlvbiBwb2ludGVyIGZpZWxkcwotICAg
ICAgICAgICAgICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRo
YW4gZGVjbGFyaW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgotICAgICAgICAg
ICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxvY2F0b3I7Ci0gICAgICAg
ICAgICAgICAgYWxsb2NhdG9yLnZlcnNpb24gPSAwOwotICAgICAgICAgICAgICAgIGFsbG9jYXRv
ci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IuRnJl
ZUJsb2NrID0gRnJlZVNoYXJlZEJ1ZmZlcjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IucmVm
Q29uID0gc2hhcmVkQnVmZmVyLmdldCgpOwotICAgICAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+
cmVmKCk7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVh
dGVXaXRoTWVtb3J5QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8
dWludDhfdCo+KHNoYXJlZEJ1ZmZlci0+ZGF0YSgpKSksIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpLCBu
dWxscHRyLCAmYWxsb2NhdG9yLCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgY2FuUmVhZCwgMCwg
JnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVm
ZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90
RW5vdWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICBsYXN0UmVhZCA9IGNhblJlYWQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIGJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9j
a0J1ZmZlcik7Ci0gICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckFwcGVu
ZEJ1ZmZlclJlZmVyZW5jZShvdXRwdXRCdWZmZXIsIHJhd0Jsb2NrQnVmZmVyLCAwLCAwLCAwKTsK
LSAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CisgICAgICAgICAg
ICAgICAgYnVmZmVyLnJlc2l6ZShyZWFkUmVzdWx0LnZhbHVlKCkpOworICAgICAgICAgICAgICAg
IHJhd0Jsb2NrQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gc2hh
cmVkQnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgbnVt
VG9SZWFkKTsKKyAgICAgICAgICAgIGF1dG8gbGFzdFJlYWQgPSByYXdCbG9ja0J1ZmZlci0+c2l6
ZSgpOworICAgICAgICAgICAgb3V0cHV0QnVmZmVyLmFwcGVuZCgqcmF3QmxvY2tCdWZmZXIpOwog
ICAgICAgICAgICAgbV9wb3NpdGlvbiArPSBsYXN0UmVhZDsKICAgICAgICAgICAgICpudW1BY3R1
YWxseVJlYWQgKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICBtX3Bvc2l0aW9uV2l0aGluU2VnbWVu
dCArPSBsYXN0UmVhZDsKQEAgLTQ5MSw4ICs0NDIsOCBAQCBwcml2YXRlOgogICAgICAgICBtX3Bv
c2l0aW9uV2l0aGluU2VnbWVudCA9IDA7CiAgICAgfQogCi0gICAgU3RkTGlzdDxTZWdtZW50PiBt
X2RhdGE7Ci0gICAgU3RkTGlzdDxTZWdtZW50Pjo6aXRlcmF0b3IgbV9jdXJyZW50U2VnbWVudCB7
IG1fZGF0YS5lbmQoKSB9OworICAgIFN0ZExpc3Q8U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50
PiBtX2RhdGE7CisgICAgU3RkTGlzdDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+OjppdGVy
YXRvciBtX2N1cnJlbnRTZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CiAgICAgc2l6ZV90IG1fcG9z
aXRpb24geyAwIH07CiAgICAgc2l6ZV90IG1fcG9zaXRpb25XaXRoaW5TZWdtZW50IHsgMCB9Owog
fTsKQEAgLTU4NCwxMzkgKzUzNSw0OCBAQCBzdGF0aWMgYm9vbCBjYW5Mb2FkRm9ybWF0UmVhZGVy
KCkKICNlbmRpZiAvLyAhVVNFKEFQUExFX0lOVEVSTkFMX1NESykKIH0KIAotYm9vbCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQotewotICAgIHJl
dHVybiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVk
KCkgJiYgY2FuTG9hZEZvcm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOwot
fQotCi1NZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6aXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK1dlYk1Q
YXJzZXI6OldlYk1QYXJzZXIoQ2FsbGJhY2smIGNhbGxiYWNrKQorICAgIDogbV9wYXJzZXIobWFr
ZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8V2VibVBhcnNlcj4oKSkKKyAgICAsIG1fcmVh
ZGVyKG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKKyAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCiB7Ci0jaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9Q
VVMpCi0gICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICBhdXRv
IGNvbnRhaW5lclR5cGUgPSB0eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBib29sIGlzQXVkaW9D
b250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAiYXVk
aW8vd2VibSIpOwotICAgIGJvb2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJ2aWRlby93ZWJtIik7Ci0gICAgaWYgKCFpc0F1ZGlv
Q29udGFpbmVyVHlwZSAmJiAhaXNWaWRlb0NvbnRhaW5lclR5cGUpCi0gICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotICAgIAotICAg
IGJvb2wgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFZPUkJJ
UykKLSAgICBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNWb3JiaXNEZWNvZGVyQXZhaWxh
YmxlKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoT1BVUykKLSAgICBpc0FueUF1ZGlvQ29kZWNBdmFp
bGFibGUgfD0gaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAoaXNB
dWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSkKLSAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0K
LSAgICBib29sIGlzQW55Q29kZWNBdmFpbGFibGUgPSBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGU7
Ci0jaWYgRU5BQkxFKFZQOSkKLSAgICBpc0FueUNvZGVjQXZhaWxhYmxlIHw9IGlzVlA5RGVjb2Rl
ckF2YWlsYWJsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAoIWlzQW55Q29kZWNBdmFpbGFibGUpCi0g
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOwotCi0gICAgYXV0byBjb2RlY3MgPSB0eXBlLmNvZGVjcygpOwotICAgIGlmIChjb2RlY3Mu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpNYXlCZVN1cHBvcnRlZDsKLQotICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKLSNp
ZiBFTkFCTEUoVlA5KQotICAgICAgICBpZiAoY29kZWMuc3RhcnRzV2l0aCgidnAwOSIpIHx8IGNv
ZGVjLnN0YXJ0c1dpdGgoInZwMDgiKSB8fCBlcXVhbChjb2RlYywgInZwOCIpIHx8IGVxdWFsKGNv
ZGVjLCAidnA5IikpIHsKLQotICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRlcnMgPSBw
YXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKLSAgICAgICAgICAgIGlmICghY29kZWNQYXJh
bWV0ZXJzKQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBpZiAoIWlzVlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZQ
OSkKLQotI2lmIEVOQUJMRShWT1JCSVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAidm9yYmlzIikg
ewotICAgICAgICAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFC
TEUoVk9SQklTKQotCi0jaWYgRU5BQkxFKE9QVVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAib3B1
cyIpIHsKLSAgICAgICAgICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3Vw
cG9ydGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVO
QUJMRShPUFVTKQotCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkOwotICAgIH0KLQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkOwotCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKLQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOwotI2VuZGlmIC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVO
QUJMRShPUFVTKQogfQogCi1SZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQorV2ViTVBhcnNl
cjo6fldlYk1QYXJzZXIoKQogewotICAgIGlmIChpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKHR5cGUp
ICE9IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQpCi0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpKTsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTSgpCi0gICAgOiBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+
KCkpCit2b2lkIFdlYk1QYXJzZXI6OnJlc2V0U3RhdGUoKQogewotICAgIGlmIChpc1dlYm1QYXJz
ZXJBdmFpbGFibGUoKSkKLSAgICAgICAgbV9wYXJzZXIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RN
YWxsb2NDaGVjazxXZWJtUGFyc2VyPigpOworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lE
RU5USUZJRVIpOworICAgIGlmIChtX3BhcnNlcikKKyAgICAgICAgbV9wYXJzZXItPkRpZFNlZWso
KTsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3N0YXRlID0gbV9pbml0aWFsaXphdGlv
blNlZ21lbnRQcm9jZXNzZWQgPyBTdGF0ZTo6UmVhZGluZ1NlZ21lbnQgOiBTdGF0ZTo6Tm9uZTsK
KyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG51bGxwdHI7CisgICAgbV9pbml0aWFsaXph
dGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IGZhbHNlOworICAgIG1fY3VycmVudEJsb2NrLnJlc2V0
KCk7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKQorICAgICAgICB0cmFjay0+cmVz
ZXQoKTsKIH0KIAotU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6flNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0oKQordm9pZCBXZWJNUGFyc2VyOjpyZXNldCgpCiB7CisgICAgbV9yZWFkZXItPnJlc2V0KCk7
CisgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjphcHBlbmREYXRhKFNlZ21lbnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIEFwcGVuZEZsYWdzIGFwcGVuZEZsYWdzKQoraW50IFdl
Yk1QYXJzZXI6OnBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7
Ci0gICAgaWYgKCFtX3BhcnNlcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJ
RklFUiwgImZsYWdzKCIsIGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5
ID8gIkRpc2NvbnRpbnVpdHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIp
OwotCi0gICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7
Ci0gICAgICAgIG1fcmVhZGVyLT5yZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2Vlaygp
OwotICAgIH0KKyAgICBpZiAoIW1fcGFyc2VyKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbV9y
ZWFkZXItPmFwcGVuZFNlZ21lbnQoV1RGTW92ZShzZWdtZW50KSk7CiAKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBtX3N0YXR1cyA9IG1fcGFyc2VyLT5GZWVkKHRoaXMsICZtX3JlYWRlcik7
CiAgICAgICAgIGlmIChtX3N0YXR1cy5vaygpIHx8IG1fc3RhdHVzLmNvZGUgPT0gU3RhdHVzOjpr
RW5kT2ZGaWxlIHx8IG1fc3RhdHVzLmNvZGUgPT0gU3RhdHVzOjprV291bGRCbG9jaykgewogICAg
ICAgICAgICAgbV9yZWFkZXItPnJlY2xhaW1TZWdtZW50cygpOwotCi0gICAgICAgICAgICAvLyBB
dWRpbyB0cmFja3MgYXJlIGdyb3VwZWQgaW50byBtZXRhLXNhbXBsZXMgb2YgYSBkdXJhdGlvbiBu
byBtb3JlIHRoYW4gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24uCi0gICAgICAgICAgICAvLyBCdXQg
YXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5vIG1vcmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcs
IHNvIGZsdXNoIGFuZCBlbWl0IGFueSBwZW5kaW5nCi0gICAgICAgICAgICAvLyBhdWRpbyBidWZm
ZXJzLgotICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0KLSAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX3N0YXR1cy5jb2RlICE9IHN0
YXRpY19jYXN0PGludDMyX3Q+KEVycm9yQ29kZTo6UmVjZWl2ZWRFYm1sSW5zaWRlU2VnbWVudCkp
CkBAIC03NDEsNjEgKzYwMSwyNCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVu
ZERhdGEoU2VnbWVudCYmIHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICBj
b250aW51ZTsKICAgICB9CiAKLSAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
UiwgInN0YXR1cy5jb2RlKCIsIG1fc3RhdHVzLmNvZGUsICIpIik7Ci0gICAgbV9jYWxsT25DbGll
bnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNv
ZGUgPSBtX3N0YXR1cy5jb2RlXSB7Ci0gICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVy
aW5nUGFyc2luZ0NhbGxiYWNrKQotICAgICAgICAgICAgbV9kaWRFbmNvdW50ZXJFcnJvckR1cmlu
Z1BhcnNpbmdDYWxsYmFjayhjb2RlKTsKLSAgICB9KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFE
YXRhKCkKLXsKKyAgICByZXR1cm4gbV9zdGF0dXMuY29kZTsKIH0KIAotdm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29sLCB1
aW50NjRfdCkKK3ZvaWQgV2ViTVBhcnNlcjo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2Vy
LCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZv
clRyYWNrSUQodWludDY0X3QpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmVzZXRQYXJzZXJTdGF0
ZSgpCi17Ci0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0gICAgaWYg
KG1fcGFyc2VyKQotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwotICAgIG1fcmVhZGVyLT5y
ZXNldCgpOwotICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/
IFN0YXRlOjpSZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOwotICAgIG1faW5pdGlhbGl6YXRp
b25TZWdtZW50ID0gbnVsbHB0cjsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRl
cmVkID0gZmFsc2U7Ci0gICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKLSAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV90cmFja3MpCi0gICAgICAgIHRyYWNrLT5yZXNldCgpOworICAgIG1fbG9nZ2Vy
ID0gJmxvZ2dlcjsKKyAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJZGVudGlmaWVyOwogfQogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmludmFsaWRhdGUoKQordm9pZCBXZWJNUGFyc2Vy
OjppbnZhbGlkYXRlKCkKIHsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
KTsKLQogICAgIG1fcGFyc2VyID0gbnVsbHB0cjsKICAgICBtX3RyYWNrcy5jbGVhcigpOwogICAg
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbnVsbHB0cjsKICAgICBtX2N1cnJlbnRCbG9jay5y
ZXNldCgpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25z
dCBMb2dnZXImIGxvZ2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKLXsKLSAgICBtX2xv
Z2dlciA9ICZsb2dnZXI7Ci0gICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKLX0K
LQotYXV0byBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1
aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRhKgorYXV0byBXZWJNUGFyc2VyOjp0cmFj
a0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRhKgog
ewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykgewogICAgICAgICBpZiAodHJhY2st
PnRyYWNrKCkudHJhY2tfbnVtYmVyLmlzX3ByZXNlbnQoKSAmJiB0cmFjay0+dHJhY2soKS50cmFj
a19udW1iZXIudmFsdWUoKSA9PSB0cmFja051bWJlcikKQEAgLTgwNCw3ICs2MjcsNyBAQCBhdXRv
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90
IHRyYWNrTnVtYmVyKSAtPiBUcgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1TdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRh
JiBtZXRhZGF0YSwgQWN0aW9uKiBhY3Rpb24pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQWN0aW9uKiBhY3Rpb24pCiB7
CiAgICAgQVNTRVJUKGFjdGlvbik7CiAgICAgaWYgKCFhY3Rpb24pCkBAIC04NzYsNyArNjk5LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIEEKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVu
dEVuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQorU3RhdHVzIFdlYk1QYXJzZXI6
Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogewogICAgIElO
Rk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC04OTIsMjQgKzcxNSwyMCBA
QCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1l
bnRNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJ
RklFUiwgInN0YXRlKCIsIG9sZFN0YXRlLCAiLT4iLCBtX3N0YXRlLCAiKSwgaWQoIiwgbWV0YWRh
dGEuaWQsICIpLCBzaXplKCIsIG1ldGFkYXRhLnNpemUsICIpIik7CiAKICAgICBpZiAobWV0YWRh
dGEuaWQgPT0gSWQ6OmtUcmFja3MpIHsKLSAgICAgICAgaWYgKCFtX2tleUlkcy5pc0VtcHR5KCkg
JiYgIW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJh
Y2tJRENhbGxiYWNrKSB7CisgICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFtX2Nh
bGxiYWNrLmNhbkRlY3J5cHQoKSkgewogICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIsICJFbmNvdW50ZXJlZCBlbmNyeXB0ZWQgY29udGVudCB3aXRob3V0IGFu
IGtleSByZXF1ZXN0IGNhbGxiYWNrIik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1
czo6Q29kZShFcnJvckNvZGU6OkNvbnRlbnRFbmNyeXB0ZWQpKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkKSB7Ci0gICAgICAgICAg
ICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgaW5pdGlhbGl6YXRpb25TZWdtZW50ID0gV1RGTW92ZSgqbV9pbml0aWFsaXph
dGlvblNlZ21lbnQpXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlmIChtX2RpZFBhcnNl
SW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIG1fZGlkUGFy
c2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVu
dCkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1faW5pdGlhbGl6
YXRpb25TZWdtZW50RW5jb3VudGVyZWQpCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBhcnNlZElu
aXRpYWxpemF0aW9uRGF0YShXVEZNb3ZlKCptX2luaXRpYWxpemF0aW9uU2VnbWVudCkpOwogICAg
ICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFsc2U7CiAgICAgICAg
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbnVsbHB0cjsKICAgICAgICAgbV9pbml0aWFsaXph
dGlvblNlZ21lbnRQcm9jZXNzZWQgPSB0cnVlOwogCiAgICAgICAgIGlmICghbV9rZXlJZHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGtleUlkUGFpciA6IG1fa2V5SWRzKQot
ICAgICAgICAgICAgICAgIG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRp
b25EYXRhRm9yVHJhY2tJRENhbGxiYWNrKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlk
UGFpci5maXJzdCk7CisgICAgICAgICAgICAgICAgbV9jYWxsYmFjay5jb250ZW50S2V5UmVxdWVz
dEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoV1RGTW92ZShrZXlJZFBhaXIuc2Vjb25kKSwg
a2V5SWRQYWlyLmZpcnN0KTsKICAgICAgICAgfQogICAgICAgICBtX2tleUlkcy5jbGVhcigpOwog
ICAgIH0KQEAgLTkxNyw3ICs3MzYsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJt
bCkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29u
c3QgRWJtbCYgZWJtbCkKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
KTsKIApAQCAtOTI1LDcgKzc0NCw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
bkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICAgICAg
cmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoRXJyb3JDb2RlOjpJbnZhbGlkRG9jVHlwZSkpOwog
CiAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IHRydWU7Ci0gICAgbV9p
bml0aWFsaXphdGlvblNlZ21lbnQgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxJ
bml0aWFsaXphdGlvblNlZ21lbnQ+KCk7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBt
YWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRp
YWxpemF0aW9uU2VnbWVudD4oKTsKICAgICAvLyBUT0RPOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2Ug
aGVyZSwgd2lsbCBwcmV2ZW50IGFkZGluZyBhIG5ldyBtZWRpYSBzZWdtZW50IHNob3VsZCBhCiAg
ICAgLy8gcGFydGlhbCBpbml0IHNlZ21lbnQgYmUgZW5jb3VudGVyZWQgYWZ0ZXIgYSBjYWxsIHRv
IHNvdXJjZUJ1ZmZlci5hYm9ydCgpLgogICAgIC8vIEl0J3MgcHJvYmFibHkgZmluZSBhcyBuby1v
bmUgaW4gdGhlaXIgcmlnaHQgbWluZCBzaG91bGQgc2VuZCBwYXJ0aWFsIGluaXQgc2VnbWVudCBv
bmx5CkBAIC05MzYsNyArNzU1LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
RWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25TZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9u
KiBhY3Rpb24pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25TZWdtZW50QmVnaW4oY29uc3QgRWxlbWVu
dE1ldGFkYXRhJiwgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUo
TE9HSURFTlRJRklFUik7CiAKQEAgLTk1Myw3ICs3NzIsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25TZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9u
KiBhYwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IGNvbnN0IEluZm8mIGluZm8pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25JbmZvKGNvbnN0IEVsZW1l
bnRNZXRhZGF0YSYsIGNvbnN0IEluZm8mIGluZm8pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTk2OSw3ICs3ODgsNyBAQCBTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEluZm8m
IGluZm8pCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50
TWV0YWRhdGEmLCBjb25zdCBDbHVzdGVyJiBjbHVzdGVyLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1
cyBXZWJNUGFyc2VyOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25z
dCBDbHVzdGVyJiBjbHVzdGVyLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTg1LDcgKzgwNCw3IEBAIFN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBDbHVzCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKK1N0YXR1cyBXZWJN
UGFyc2VyOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tF
bnRyeSYgdHJhY2tFbnRyeSkKIHsKICAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tfdHlwZS5pc19w
cmVzZW50KCkgfHwgIXRyYWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQogICAgICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKQEAgLTEwNTAsMTQgKzg2OSwxNCBA
QCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1l
bnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNrRQogCiAjaWYgRU5BQkxFKFZPUkJJUykKICAgICBpZiAo
Y29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkg
ewotICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5
cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRp
b24pKTsKKyAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29k
ZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0aGlzKSk7CiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE9Q
VVMpCiAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFp
bGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0
ZShDb2RlY1R5cGU6Ok9wdXMsIHRyYWNrRW50cnksICp0aGlzLCBtX21pbmltdW1BdWRpb1NhbXBs
ZUR1cmF0aW9uKSk7CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3Jl
YXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICAgICAgcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDY2LDcg
Kzg4NSw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0
dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJs
b2NrLCBBY3Rpb24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrQmVn
aW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFj
dGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAt
MTA4MSw3ICs5MDAsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25C
bG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0CiAgICAgcmV0dXJuIFN0YXR1
cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2Nr
JikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRh
ZGF0YSYsIGNvbnN0IEJsb2NrJikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSKTsKIApAQCAtMTA5MCw3ICs5MDksNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbAog
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1l
bnRNZXRhZGF0YSYsIGNvbnN0IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3
ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IFNpbXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAg
ICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTExMDUsNyArOTI0
LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tC
ZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLAogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9j
ayYpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVt
ZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9T
U0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTExMTQsNyArOTMzLDcgQEAgd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1l
dGFkYXRhJiwgY28KICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0K
IAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2lu
KGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQord2Vi
bTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1l
bnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMTI2LDcgKzk0NSw3IEBAIHdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpF
bGVtZW50TWV0YWRhCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQo
Y29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxv
Y2tHcm91cCkKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qg
d2VibTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91
cCkKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKICAgICBpZiAo
YmxvY2tHcm91cC5ibG9jay5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRp
bmcuaXNfcHJlc2VudCgpKSB7CkBAIC0xMTM2LDE3ICs5NTUsMTMgQEAgd2VibTo6U3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50
TWV0YWRhdGEKICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
LCAiSWdub3JpbmcgdW5rbm93biB0cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOwogICAgICAg
ICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJs
b2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgICAgICBtX2Nh
bGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRo
aXMgfSwgdHJhY2tJRCA9IHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQudmFsdWUoKSwgcGFk
ZGluZyA9IE1lZGlhVGltZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3Vz
X2luX3NlY29uZHMpXSgpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZVRyaW1taW5n
RGF0YUNhbGxiYWNrKQotICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRh
Q2FsbGJhY2sodHJhY2tJRCwgcGFkZGluZyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQor
ICAgICAgICBpZiAodHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC5pc19wcmVzZW50KCkgJiYg
YmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSA+IDApCisgICAgICAgICAgICBtX2Nh
bGxiYWNrLnBhcnNlZFRyaW1taW5nRGF0YSh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLnZh
bHVlKCksIE1lZGlhVGltZShibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3Vz
X2luX3NlY29uZHMpKTsKICAgICB9CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBs
ZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1l
KGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3Qq
IGJ5dGVzUmVtYWluaW5nKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uRnJhbWUoY29uc3Qg
RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNS
ZW1haW5pbmcpCiB7CiAgICAgQVNTRVJUKHJlYWRlcik7CiAgICAgaWYgKCFyZWFkZXIpCkBAIC0x
MTgzLDM3ICs5OTgsMjAgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
RnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWQKICAgICAgICAgcmV0dXJu
IFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNr
RGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcs
IFBBTDo6Q01UaW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90
aW1lc2NhbGUpLCBibG9jay0+bnVtX2ZyYW1lcyk7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29u
c3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIE1lZGlhVGlt
ZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9j
ay0+bnVtX2ZyYW1lcyk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlk
ZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWlu
dDY0X3QgdHJhY2tJRCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9mZnNldCkKLXsK
LSAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
UmVmIHsgKnRoaXMgfSwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFj
a0lELCBieXRlUmFuZ2VPZmZzZXRdICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fZGlkUHJv
dmlkZU1lZGlhRGF0YUNhbGxiYWNrKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1
dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIu
Z2V0KCksIHRyYWNrSUQpOwotICAgICAgICBpZiAoYnl0ZVJhbmdlT2Zmc2V0KQotICAgICAgICAg
ICAgbWVkaWFTYW1wbGUtPnNldEJ5dGVSYW5nZU9mZnNldCgqYnl0ZVJhbmdlT2Zmc2V0KTsKLSAg
ICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSks
IHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOwotICAgIH0pOwotfQogCiAjZGVmaW5lIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNl
cigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIExvZ2dlcjo6TG9nU2l0ZUlkZW50
aWZpZXIobG9nQ2xhc3NOYW1lKCksIF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJZGVudGlmaWVyKCkp
LCBfX1ZBX0FSR1NfXykKIAotUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6
ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdl
Yk1QYXJzZXI6OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90
IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKLSAgICBpZiAoIW9mZnNldCAmJiAhbGVu
Z3RoICYmIFBBTDo6Q01CbG9ja0J1ZmZlcklzUmFuZ2VDb250aWd1b3VzKG1fY29tcGxldGVCbG9j
a0J1ZmZlci5nZXQoKSwgMCwgMCkpCi0gICAgICAgIHJldHVybiBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXI7Ci0gICAgQ01CbG9ja0J1ZmZlclJlZiByYXdDb250aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsK
LSAgICBpZiAoUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlQ29udGlndW91cyhudWxscHRyLCBtX2Nv
bXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIG9mZnNldCwgbGVuZ3Ro
LCAwLCAmcmF3Q29udGlndW91c0J1ZmZlcikgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikgewotICAg
ICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgImZhaWxlZCB0byBjcmVhdGUgY29udGln
dW91cyBibG9jayBidWZmZXIiKTsKKyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAg
ICByZXR1cm4gYWRvcHRDRihyYXdDb250aWd1b3VzQnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb21w
bGV0ZUJsb2NrQnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7CiB9CiAK
LXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1l
dGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3
ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQog
ewogICAgIGlmIChtX2NvbXBsZXRlUGFja2V0U2l6ZSAmJiAqbV9jb21wbGV0ZVBhY2tldFNpemUg
IT0gbWV0YWRhdGEuc2l6ZSkgewogICAgICAgICAvLyBUaGUgcGFja2V0J3MgbWV0YWRhdGEgZG9l
c24ndCBtYXRjaCB0aGUgY3VycmVudGx5IHBlbmRpbmcgY29tcGxldGUgcGFja2V0OyByZXN0YXJ0
LgpAQCAtMTIyNCwyMCArMTAyMiw5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYg
KCFtX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBt
ZXRhZGF0YS5zaXplOwogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewotICAgICAg
ICBBU1NFUlQoIW1fcGFydGlhbEJ5dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZmZXJSZWYg
cmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1ZmZlckNh
cGFjaXR5LCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2Nr
QnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIHdpdGgg
ZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRD
RihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFpbmluZykg
ewogICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gc3Rh
dGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlciku
UmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgJmJ5
dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8V2ViTVBhcnNlcjo6
U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJl
bnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBi
eXRlc1JlYWQ7CiAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAg
LTEyNDksMTU2ICsxMDM2LDkyIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKG1f
cGFydGlhbEJ5dGVzUmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgcmV0dXJu
IHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgaWYgKCFtX2Nv
bXBsZXRlQmxvY2tCdWZmZXIpCi0gICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IFdURk1v
dmUobV9jdXJyZW50QmxvY2tCdWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGVyciA9
IFBBTDo6Q01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShtX2NvbXBsZXRlQmxvY2tC
dWZmZXIuZ2V0KCksIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKLSAgICAg
ICAgaWYgKGVycikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZSB0byBjb21wbGV0ZSBibG9jayBmYWls
ZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a05vdEVub3VnaE1lbW9yeSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZm
ZXIgPSBudWxscHRyOwotICAgIH0KKyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBtX2N1cnJl
bnRCbG9ja0J1ZmZlci50YWtlKCk7CisgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51
bGxvcHQ7CiAgICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpT
dGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRf
dCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNh
bXBsZUNvdW50KQordm9pZCBXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0
ZWRGcmFtZXNTdGF0ZSgpCit7CisgICAgbV9rZXlGcmFtZXMuY2xlYXIoKTsKKyAgICBUcmFja0Rh
dGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKK30KKword2VibTo6U3RhdHVzIFdlYk1Q
YXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVh
ZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsKICNpZiBFTkFC
TEUoVlA5KQogICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFkYXRh
LCBieXRlc1JlbWFpbmluZyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAgICAg
ICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICBjcmVhdGVTYW1wbGVCdWZmZXIocHJlc2VudGF0aW9u
VGltZSwgc2FtcGxlQ291bnQsIG1ldGFkYXRhKTsKLSAgICByZXNldCgpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJBTShwcmVzZW50YXRpb25UaW1l
KTsKLSAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwotI2VuZGlmCi0KLSAgICByZXR1cm4g
U2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci19CisgICAgbV9sYXN0UG9zaXRpb24gPSBt
ZXRhZGF0YS5wb3NpdGlvbjsKIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1Ry
YWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGlt
ZSwgaW50IHNhbXBsZUNvdW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSkK
LXsKLSNpZiBFTkFCTEUoVlA5KQotICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxw
dHI7CiAgICAgY29uc3RleHByIHNpemVfdCBtYXhIZWFkZXJTaXplID0gMzI7IC8vIFRoZSBtYXhp
bXVtIGxlbmd0aCBvZiBhIFZQOSB1bmNvbXByZXNzZWQgaGVhZGVyIGlzIDE0NCBiaXRzIGFuZCAx
MSBieXRlcyBmb3IgVlA4LiBSb3VuZCBoaWdoLgotICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVu
Z3RoID0gc3RkOjptaW4obWF4SGVhZGVyU2l6ZSwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAg
ICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9IHN0ZDo6bWluKG1heEhlYWRlclNpemUsIG1f
Y29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgpKTsKICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIg
PSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsK
ICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9J
Rl9QT1NTSUJMRSgiVmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlciBmYWlsZWQgdG8g
Y3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91
c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJE
YXRhKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lC
TEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEgZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1
b3VzIGRhdGEgYmxvY2siKTsKKyAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwogICAgIH0KKyAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250
aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7Ci0gICAgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAgIGlm
IChjb2RlYygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQYXJz
ZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVy
TGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKICAgICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0
RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIo
bV9oZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAg
ICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZy
b20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKKyAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5j
b2xvdXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6
OlZQOCkgewogICAgICAgICBhdXRvIGhlYWRlciA9IHBhcnNlVlA4RnJhbWVIZWFkZXIoYmxvY2tC
dWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKICAgICAgICAgaWYgKGhlYWRlciAmJiBo
ZWFkZXItPmtleWZyYW1lKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7Ci0gICAgICAgICAg
ICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4
SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAg
ICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZy
b20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKKyAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUDhIZWFkZXIoKmhlYWRlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAg
ICAgICB9CiAgICAgfQogCisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkK
KyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9u
KCkpOworICAgIGVsc2UgaWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0
aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBl
bmRpbmdTYW1wbGVzKCk7CisKICAgICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKLSAgICAv
LyBGSVhNRTogQSBibG9jayBtaWdodCBjb250YWluIG1vcmUgdGhhbiBvbmUgZnJhbWUsIGJ1dCBv
bmx5IHRoaXMgZnJhbWUgaGFzIGJlZW4gcmVhZCBpbnRvIGBjb21wbGV0ZUJsb2NrQnVmZmVyYC4K
LSAgICAvLyBCZWxvdyB3ZSBjcmVhdGUgc2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVh
Y2ggd2l0aCB0aGUgYmxvY2sncyB0aW1lY29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgotICAg
IC8vIFNob3VsZG4ndCB3ZSBjcmVhdGUganVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0
aGUgYmxvY2sncyBmcmFtZXMgaGF2ZSBiZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVy
YD8KIAogICAgIHVpbnQ2NF90IGR1cmF0aW9uID0gMDsKICAgICBpZiAodHJhY2suZGVmYXVsdF9k
dXJhdGlvbi5pc19wcmVzZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9k
dXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3Nl
Y29uZHM7CisgICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgp
ICogcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAg
IENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgQ01TYW1w
bGVUaW1pbmdJbmZvIHRpbWluZyA9IHsgUEFMOjpDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50
YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUg
fTsKLSAgICBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCB0aGlzLT5mb3JtYXREZXNjcmlw
dGlvbigpLmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJiptX2NvbXBsZXRlUGFj
a2V0U2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxl
ZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNh
bXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKKyAgICBtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1l
ZGlhVGltZShkdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIG1fY29tcGxl
dGVCbG9ja0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpLCBpc0tleSA/IE1lZGlhU2FtcGxlOjpTYW1w
bGVGbGFnczo6SXNTeW5jIDogTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lIH0pOwogCi0g
ICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0
dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgpLCB0cnVlKTsKLSAgICBBU1NFUlQoYXR0
YWNobWVudHNBcnJheSk7Ci0gICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7Ci0gICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNo
bWVudHNBcnJheSByZXR1cm5lZCBOVUxMIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgaWYgKCFpc0tleSkgewotICAgICAgICBmb3Ig
KENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkp
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBh
dHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKLSAgICAgICAgICAgIENG
RGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFjaG1lbnRL
ZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0
byB0cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJvdmlk
ZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIG1ldGFkYXRhLnBvc2l0
aW9uKTsKKyAgICBBU1NFUlQoISpieXRlc1JlbWFpbmluZyk7CisgICAgcmV0dXJuIHdlYm06OlN0
YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShwcmVzZW50YXRpb25UaW1lKTsKICAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwogICAg
IFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKKyAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisjZW5kaWYKIH0KIAotdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKQordm9p
ZCBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgp
CiB7CiAgICAgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA9IDA7Ci0gICAgbV9wYWNrZXRTaXpl
cy5jbGVhcigpOwotICAgIG1fcGFja2V0VGltaW5ncy5jbGVhcigpOwotICAgIG1fY3VycmVudFBh
Y2tldEJ5dGVPZmZzZXQgPSAwOwotICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKTsKKyAg
ICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKIH0KIAotd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwg
dWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUs
IGludCBzYW1wbGVDb3VudCkKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRh
ZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgTWVkaWFUaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7Ci0gICAgaWYgKG1fcGFja2V0VGltaW5ncy5zaXpl
KCkpIHsKLSAgICAgICAgYXV0byYgbGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7
Ci0gICAgICAgIGlmIChQQUw6OkNNVGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWlu
Zy5kdXJhdGlvbiwgbGFzdFRpbWluZy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRp
b25UaW1lKSkgewotICAgICAgICAgICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1p
dCB0aGUgcHJldmlvdXNseSBkZW11eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBjcmVhdGVTYW1w
bGVCdWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAg
ICAgfQotICAgIH0KLQogICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1l
dGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkp
CiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKLSAgICAvLyBBdHRlbXB0cyB0byBtaW5pbWlzZSB0
aGUgYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0aW9ucyBkdWUgdG8gcmVwZXRpdHZlIENNQmxvY2tC
dWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgY2FsbHMgaW4gcmVhZEZyYW1lRGF0YS4KLSAgICBt
TnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrKys7Ci0gICAgaWYgKG1OdW1GcmFtZXNJbkNvbXBsZXRl
QmxvY2sgPiBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSkKLSAgICAgICAgbU1heEJsb2NrQnVmZmVy
Q2FwYWNpdHkgPSBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrOwotCi0gICAgaWYgKG1fcGFja2V0
U2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVz
ZW50YXRpb25UaW1lOworICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247CiAK
ICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNv
ZGVjX3ByaXZhdGUuaXNfcHJlc2VudCgpKSB7CkBAIC0xNDA2LDI0ICsxMTI5LDE4IEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CiAgICAgICAgIH0KIAotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIFJlZlB0cjxBdWRpb0luZm8+
IGZvcm1hdERlc2NyaXB0aW9uOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCku
Y29kZWNfcHJpdmF0ZS52YWx1ZSgpOwogICAgICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6
OlZvcmJpcykKLSAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbihwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEo
KSk7CisgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvSW5m
byhwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpPcHVzKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbnRp
Z3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNr
ZXRCeXRlT2Zmc2V0LCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgICAgICAgICAgYXV0byBj
b250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwga09wdXNN
aW5pbXVtRnJhbWVEYXRhU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIp
IHsKICAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1Ry
YWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRh
dGEgYmxvY2siKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1Jl
bWFpbmluZyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZl
ckRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZm
ZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxs
cHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAgaWYgKGVycikgewot
ICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZm
ZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAgfQog
ICAgICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwotICAgICAgICAg
ICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVE
YXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tp
ZUNvbnRlbnRzKSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2
YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1ZmZlci0+c2l6
ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKSkgewogICAgICAg
ICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBwYXJzZSBP
cHVzIHByaXZhdGUgZGF0YSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KQEAgLTE0MzMsNDAgKzExNTAsMjkgQEAg
d2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZnJh
bWVzUGVyUGFja2V0ID0gY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0OwogICAgICAgICAg
ICAgbV9mcmFtZUR1cmF0aW9uID0gY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlvbjsKLSAgICAg
ICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRp
b24oY29va2llQ29udGVudHMpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVh
dGVPcHVzQXVkaW9JbmZvKGNvb2tpZUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8g
dHJhY2sgaGVhZGVyIik7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJGYWlsZWQgdG8gY3JlYXRlIEF1ZGlvSW5mbyBmcm9tIGF1ZGlvIHRyYWNrIGhlYWRlciIpOwog
ICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYXV0byBzdHJlYW1EZXNjcmlwdGlvbiA9IFBBTDo6Q01BdWRpb0Zvcm1h
dERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5n
ZXQoKSk7Ci0gICAgICAgIGlmICghc3RyZWFtRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0
cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wYWNrZXREdXJh
dGlvbiA9IFBBTDo6Q01UaW1lTWFrZShzdHJlYW1EZXNjcmlwdGlvbi0+bUZyYW1lc1BlclBhY2tl
dCwgc3RyZWFtRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlKTsKKyAgICAgICAgbV9wYWNrZXREdXJh
dGlvbiA9IE1lZGlhVGltZShmb3JtYXREZXNjcmlwdGlvbi0+ZnJhbWVzUGVyUGFja2V0LCBmb3Jt
YXREZXNjcmlwdGlvbi0+cmF0ZSk7CiAKLSAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RG
TW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihm
b3JtYXREZXNjcmlwdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9IGVsc2UgaWYgKGNvZGVj
KCkgPT0gQ29kZWNUeXBlOjpPcHVzKSB7CiAgICAgICAgIC8vIE9wdXMgdGVjaG5pY2FsbHkgYWxs
b3dzIHRoZSBmcmFtZSBkdXJhdGlvbiBhbmQgZnJhbWVzLXBlci1wYWNrZXQgdmFsdWVzIHRvIGNo
YW5nZSBmcm9tIHBhY2tldCB0byBwYWNrZXQuCiAgICAgICAgIC8vIENvcmVBdWRpbyBkb2Vzbid0
IHN1cHBvcnQgQVNCRCB2YWx1ZXMgbGlrZSB0aGVzZSB0byBjaGFuZ2Ugb24gYSBwZXItcGFja2V0
IGJhc2lzLCBzbyB0aHJvdyBhbiBlcnJvciB3aGVuCiAgICAgICAgIC8vIHRoYXQga2luZCBvZiB2
YXJpYWJpbGl0eSBpcyBlbmNvdW50ZXJlZC4KICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNv
b2tpZUNvbnRlbnRzOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNf
cHJpdmF0ZS52YWx1ZSgpOwotICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1
b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCAqbV9jb21w
bGV0ZVBhY2tldFNpemUpOworICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1
b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplKTsKICAg
ICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxl
IHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgIHJldHVybiBT
a2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQotICAgICAgICB1aW50OF90
KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01C
bG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxw
dHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgIGlmIChlcnIp
IHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZm
ZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRh
LmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNv
bnRlbnRzKQorICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNp
emUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCBjb250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRp
Z3VvdXNCdWZmZXItPmRhdGEoKSwgY29va2llQ29udGVudHMpCiAgICAgICAgICAgICB8fCBjb29r
aWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQgIT0gbV9mcmFtZXNQZXJQYWNrZXQKICAgICAgICAg
ICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVyYXRpb24gIT0gbV9mcmFtZUR1cmF0aW9uKSB7
CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJPcHVzIGZyYW1lcy1w
ZXItcGFja2V0IGNoYW5nZWQgd2l0aGluIGEgdHJhY2s7IGVycm9yIik7CkBAIC0xNDc0LDYzICsx
MTgwLDMzMiBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFj
a0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgbV9wYWNrZXRTaXplcy5hcHBlbmQoKm1fY29tcGxldGVQYWNrZXRTaXplKTsKLSAgICBtX3Bh
Y2tldFRpbWluZ3MuYXBwZW5kKHsgbV9wYWNrZXREdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZSwg
UEFMOjprQ01UaW1lSW52YWxpZCB9KTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ICs9
ICptX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6
bnVsbG9wdDsKKyAgICBpZiAoIW1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAg
ICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNldEluZm8oZm9ybWF0RGVzY3JpcHRpb24oKSk7Cisg
ICAgZWxzZSBpZiAoZm9ybWF0RGVzY3JpcHRpb24oKSAmJiAqZm9ybWF0RGVzY3JpcHRpb24oKSAh
PSAqbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIGRyYWluUGVuZGluZ1Nh
bXBsZXMoKTsKIAotICAgIGF1dG8gc2FtcGxlRHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29u
ZHMoUEFMOjpDTVRpbWVTdWJ0cmFjdChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRh
dGlvblRpbWUpKSArIFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNh
bXBsZUNvdW50OworICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0
aW9uVGltZSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBtX2Nv
bXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZs
YWdzOjpJc1N5bmMgfSk7CiAKLSAgICBpZiAoc2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2Ft
cGxlRHVyYXRpb24pIHsKLSAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVyKG1ldGFkYXRhLnBvc2l0
aW9uKTsKLSAgICAgICAgcmVzZXQoKTsKLSAgICB9CisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygp
OwogCiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5pbmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0
dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25h
bDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCkKKworYm9vbCBXZWJNUGFyc2VyOjppc1N1
cHBvcnRlZFZpZGVvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09
ICJWX1ZQOCIgfHwgbmFtZSA9PSAiVl9WUDkiOworfQorCitib29sIFdlYk1QYXJzZXI6OmlzU3Vw
cG9ydGVkQXVkaW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit7CisgICAgcmV0dXJuIG5hbWUgPT0g
IkFfVk9SQklTIiB8fCBuYW1lID09ICJBX09QVVMiOworfQorCitTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKKyAgICA6IG1fcGFyc2VyKCp0aGlzKQorewor
fQorCitib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzV2ViTUZvcm1hdFJlYWRlckF2YWls
YWJsZSgpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6d2ViTUZv
cm1hdFJlYWRlckVuYWJsZWQoKSAmJiBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkgJiYgaXNXZWJtUGFy
c2VyQXZhaWxhYmxlKCk7Cit9CisKK01lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRU
eXBlJiB0eXBlKQoreworI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJM
RShPUFVTKQorICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAg
YXV0byBjb250YWluZXJUeXBlID0gdHlwZS5jb250YWluZXJUeXBlKCk7CisgICAgYm9vbCBpc0F1
ZGlvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwg
ImF1ZGlvL3dlYm0iKTsKKyAgICBib29sIGlzVmlkZW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAidmlkZW8vd2VibSIpOworICAgIGlmICghaXNB
dWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzVmlkZW9Db250YWluZXJUeXBlKQorICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
IGJvb2wgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlID0gZmFsc2U7CisjaWYgRU5BQkxFKFZPUkJJ
UykKKyAgICBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNWb3JiaXNEZWNvZGVyQXZhaWxh
YmxlKCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoT1BVUykKKyAgICBpc0FueUF1ZGlvQ29kZWNBdmFp
bGFibGUgfD0gaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisKKyAgICBpZiAoaXNB
dWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisK
KyAgICBib29sIGlzQW55Q29kZWNBdmFpbGFibGUgPSBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGU7
CisjaWYgRU5BQkxFKFZQOSkKKyAgICBpc0FueUNvZGVjQXZhaWxhYmxlIHw9IGlzVlA5RGVjb2Rl
ckF2YWlsYWJsZSgpOworI2VuZGlmCisKKyAgICBpZiAoIWlzQW55Q29kZWNBdmFpbGFibGUpCisg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOworCisgICAgYXV0byBjb2RlY3MgPSB0eXBlLmNvZGVjcygpOworICAgIGlmIChjb2RlY3Mu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpNYXlCZVN1cHBvcnRlZDsKKworICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKKyNp
ZiBFTkFCTEUoVlA5KQorICAgICAgICBpZiAoY29kZWMuc3RhcnRzV2l0aCgidnAwOSIpIHx8IGNv
ZGVjLnN0YXJ0c1dpdGgoInZwMDgiKSB8fCBlcXVhbChjb2RlYywgInZwOCIpIHx8IGVxdWFsKGNv
ZGVjLCAidnA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRlcnMgPSBw
YXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKKyAgICAgICAgICAgIGlmICghY29kZWNQYXJh
bWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBpZiAoIWlzVlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZQ
OSkKKworI2lmIEVOQUJMRShWT1JCSVMpCisgICAgICAgIGlmIChjb2RlYyA9PSAidm9yYmlzIikg
eworICAgICAgICAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFC
TEUoVk9SQklTKQorCisjaWYgRU5BQkxFKE9QVVMpCisgICAgICAgIGlmIChjb2RlYyA9PSAib3B1
cyIpIHsKKyAgICAgICAgICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3Vw
cG9ydGVkOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShPUFVTKQorCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkOworICAgIH0KKworICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkOworCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0
eXBlKTsKKworICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOworI2VuZGlmIC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVO
QUJMRShPUFVTKQorfQorCitSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQoreworICAgIGlm
IChpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKHR5cGUpICE9IE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291
cmNlQnVmZmVyUGFyc2VyV2ViTSgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBX
ZWJNUGFyc2VyOjpwcm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcywg
dWludDY0X3QgcG9zaXRpb24pCit7CisgICAgbV9jYWxsYmFjay5wYXJzZWRNZWRpYURhdGEoV1RG
TW92ZShzYW1wbGVzKSwgcG9zaXRpb24pOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShJbml0aWFsaXphdGlvblNlZ21lbnQmJiBpbml0
aWFsaXphdGlvblNlZ21lbnQpCiB7Ci0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQor
ICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBS
ZWYgeyAqdGhpcyB9LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0
aW9uU2VnbWVudCldKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6
YXRpb25EYXRhQ2FsbGJhY2spCisgICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25E
YXRhQ2FsbGJhY2soV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1w
bGVzQmxvY2smJiBzYW1wbGVzQmxvY2ssIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIGlmICgh
c2FtcGxlc0Jsb2NrLmluZm8oKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUiwgIk5vIFRyYWNrSW5mbyBzZXQiKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAg
YXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdl
dCgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNr
ZXRUaW1pbmdzLmRhdGEoKSwgbV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0
YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0
RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CisgICAgaWYgKHNhbXBsZXNCbG9j
ay5pc1ZpZGVvKCkpIHsKKyAgICAgICAgaWYgKG1fdmlkZW9JbmZvICE9IHNhbXBsZXNCbG9jay5p
bmZvKCkpIHsKKyAgICAgICAgICAgIG1fdmlkZW9JbmZvID0gc2FtcGxlc0Jsb2NrLmluZm8oKTsK
KyAgICAgICAgICAgIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVRyYWNrSW5mbygqc2FtcGxlc0Jsb2NrLmluZm8oKSk7CisgICAgICAgIH0KKyAg
ICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYXVkaW9JbmZvICE9IHNhbXBsZXNCbG9jay5pbmZvKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOworICAgICAgICAgICAg
bV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJh
Y2tJbmZvKCpzYW1wbGVzQmxvY2suaW5mbygpKTsKKyAgICAgICAgICAgIG1fYXVkaW9JbmZvID0g
c2FtcGxlc0Jsb2NrLmluZm8oKTsKKyAgICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlv
biA9IG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2FtcGxlc0Js
b2NrLmlzVmlkZW8oKSkgeworICAgICAgICByZXR1cm5TYW1wbGVzKG1fdmlkZW9JbmZvLmdldCgp
LCBzYW1wbGVzQmxvY2sudGFrZVNhbXBsZXMoKSwgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uLmdl
dCgpLCBwb3NpdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CiAKLSAgICBhdXRvIHRyYWNrSUQgPSB0
cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRpYURhdGEo
V1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpOwor
ICAgIC8vIFBhY2sgYXVkaW8gaWYgbmVlZGVkLgorICAgIGlmIChtX3F1ZXVlZEF1ZGlvU2FtcGxl
cy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYgbGFzdFNhbXBsZSA9IG1fcXVldWVkQXVkaW9TYW1w
bGVzLmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3RTYW1wbGUuZHVyYXRpb24gKyBsYXN0U2FtcGxl
LnByZXNlbnRhdGlvblRpbWUgIT0gc2FtcGxlc0Jsb2NrLmZpcnN0KCkucHJlc2VudGF0aW9uVGlt
ZSkKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAg
fQorICAgIGZvciAoYXV0byYgc2FtcGxlIDogc2FtcGxlc0Jsb2NrKQorICAgICAgICBtX3F1ZXVl
ZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1cmF0aW9uOworICAgIG1fcXVldWVkQXVkaW9TYW1w
bGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNCbG9jaykpOworICAgIGlmIChtX3F1ZXVlZEF1ZGlv
RHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKQordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKGNvbnN0IFRyYWNrSW5mbyogaW5mbywg
TWVkaWFTYW1wbGVzQmxvY2s6OlNhbXBsZXNWZWN0b3ImJiBzYW1wbGVzLCBDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3Np
dGlvbikKIHsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYg
KHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6
OlR5cGU6OkF1ZGlvKSB7Ci0gICAgICAgICAgICBBdWRpb1RyYWNrRGF0YSYgYXVkaW9UcmFjayA9
IGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSk7Ci0gICAgICAgICAgICBhdWRp
b1RyYWNrLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwotICAgICAgICAgICAgYXVkaW9UcmFjay5yZXNl
dENvbXBsZXRlZCgpOworICAgIGlmICghc2FtcGxlcy5zaXplKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY29tcGxldGVCbG9ja0J1ZmZlcnM7Cisg
ICAgaWYgKHNhbXBsZXMuc2l6ZSgpID4gMSkgeworICAgICAgICAvLyBPcHRpbWlzYXRpb24gc28g
dGhhdCB3ZSBhbGxvY2F0ZSB0aGUgZW50aXJlIENNQmxvY2tCdWZmZXIgYXQgb25jZSBpZiB3ZSBo
YXZlIG1vcmUgdGhhbiBvbmUgdG8gcmV0dXJuLgorICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJh
d0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tC
dWZmZXJDcmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzYW1wbGVzLnNpemUoKSwgMCwg
JnJhd0Jsb2NrQnVmZmVyKTsKKyAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJy
IHx8ICFyYXdCbG9ja0J1ZmZlcikgeworICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxF
KCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGNvbXBsZXRlQmxvY2tCdWZmZXJz
ID0gcmF3QmxvY2tCdWZmZXI7CiAgICAgfQorICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+
IHBhY2tldFRpbWluZ3M7CisgICAgVmVjdG9yPHNpemVfdD4gcGFja2V0U2l6ZXM7CisgICAgZm9y
IChhdXRvJiBzYW1wbGUgOiBzYW1wbGVzKSB7CisgICAgICAgIGlmICghc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+KHNhbXBsZS5kYXRhKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgZGF0YSA9IHN0ZDo6Z2V0PFJlZjxj
b25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxlLmRhdGEpOworICAgICAgICBhdXRv
IGJsb2NrQnVmZmVyID0gZGF0YS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOworICAgICAgICBpZiAo
IWJsb2NrQnVmZmVyKSB7CisgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURF
TlRJRklFUiwgImNyZWF0ZUNNQmxvY2tCdWZmZXI6IGZhaWxlZCB0byBjcmVhdGUiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghY29tcGxldGVCbG9ja0J1
ZmZlcnMpCisgICAgICAgICAgICBjb21wbGV0ZUJsb2NrQnVmZmVycyA9IFdURk1vdmUoYmxvY2tC
dWZmZXIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJs
b2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKGNvbXBsZXRlQmxvY2tCdWZmZXJzLmdldCgp
LCBibG9ja0J1ZmZlci5nZXQoKSwgMCwgMCwgMCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IGtD
TUJsb2NrQnVmZmVyTm9FcnIpIHsKKyAgICAgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUiwgIkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2U6IG5v
dCBlbm91Z2ggbWVtb3J5Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHBhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjp0b0NNVGlt
ZShzYW1wbGUuZHVyYXRpb24pLCBQQUw6OnRvQ01UaW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1l
KSwgUEFMOjp0b0NNVGltZShzYW1wbGUuZGVjb2RlVGltZSkgfSk7CisgICAgICAgIHBhY2tldFNp
emVzLmFwcGVuZChkYXRhLT5zaXplKCkpOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVm
IHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8gZXJyID0gUEFMOjpDTVNh
bXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRlQmxvY2tC
dWZmZXJzLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbiwgcGFja2V0U2l6ZXMuc2l6ZSgpLCBwYWNr
ZXRUaW1pbmdzLnNpemUoKSwgcGFja2V0VGltaW5ncy5kYXRhKCksIHBhY2tldFNpemVzLnNpemUo
KSwgcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKSkgeworICAgICAgICBFUlJP
Ul9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVh
ZHk6IGZhaWxlZCB0byBjcmVhdGUgc2FtcGxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoaW5mby0+aXNWaWRlbygpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJh
eSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHJhd1NhbXBs
ZUJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKKyAgICAg
ICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7CisgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9T
U0lCTEUoTE9HSURFTlRJRklFUiwgIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNB
cnJheTogZmFpbGVkIHRvIHJldHJpZXZlIGF0dGFjaG1lbnQgYXJyYXkiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoc2l6ZV90KENGQXJyYXlHZXRDb3Vu
dChhdHRhY2htZW50c0FycmF5KSkgPT0gc2FtcGxlcy5zaXplKCkpOworICAgICAgICBmb3IgKENG
SW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRh
Y2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKKyAgICAgICAgICAgIGlmICgh
KHNhbXBsZXNbaV0uZmxhZ3MgJiBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYykpCisg
ICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIFBBTDo6a0NN
U2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9IGluZm8tPnRyYWNrSUQsIHNhbXBsZUJ1
ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKSwgcG9zaXRpb25dICgpIG11dGFibGUgewor
ICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6
OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOworICAgICAgICBpZiAocG9zaXRp
b24pCisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpwb3NpdGlv
bik7CisKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRp
YVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0pOwogfQogCi12b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0
IGR1cmF0aW9uKQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRUcmltbWluZ0Rh
dGEodWludDY0X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBwYWRkaW5nKQogewotICAgIG1f
bWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICBtX2NhbGxPbkNsaWVu
dFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJh
Y2tJRCwgcGFkZGluZ10gKCkgeworICAgICAgICBpZiAobV9kaWRQYXJzZVRyaW1taW5nRGF0YUNh
bGxiYWNrKQorICAgICAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKHRyYWNr
SUQsIHBhZGRpbmcpOworICAgIH0pOwogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit2b2lkIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RChSZWY8U2hhcmVkQnVmZmVyPiYmIGtleUlELCB1aW50NjRfdCB0cmFja0lEKQogewotICAgIHJl
dHVybiBuYW1lID09ICJWX1ZQOCIgfHwgbmFtZSA9PSAiVl9WUDkiOworICAgIGlmIChtX2RpZFBy
b3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFj
aykKKyAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRh
dGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJRCksIHRyYWNrSUQpOwogfQogCi1ib29s
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzU3VwcG9ydGVkQXVkaW9Db2RlYyhTdHJpbmdWaWV3
IG5hbWUpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvU2Ft
cGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikKIHsKLSAgICByZXR1cm4gbmFt
ZSA9PSAiQV9WT1JCSVMiIHx8IG5hbWUgPT0gIkFfT1BVUyI7CisgICAgaWYgKCFtX2F1ZGlvRm9y
bWF0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9hdWRpb0luZm8p
OworICAgIHJldHVyblNhbXBsZXMobV9hdWRpb0luZm8uZ2V0KCksIG1fcXVldWVkQXVkaW9TYW1w
bGVzLnRha2VTYW1wbGVzKCksIG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgcG9zaXRp
b24pOworICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiA9IHsgfTsKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKFNlZ21lbnQmJiBzZWdtZW50LCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIEFwcGVuZEZsYWdzIGFwcGVuZEZs
YWdzKQoreworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJmbGFncygi
LCBhcHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSA/ICJEaXNjb250aW51
aXR5IiA6ICIiLCAiKSwgc2l6ZSgiLCBzZWdtZW50LnNpemUoKSwgIikiKTsKKworICAgIGlmIChh
cHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSkKKyAgICAgICAgbV9wYXJz
ZXIucmVzZXQoKTsKKworICAgIGlmIChpbnQgY29kZSA9IG1fcGFyc2VyLnBhcnNlKFdURk1vdmUo
c2VnbWVudCkpIDwgMCkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJ
RklFUiwgInN0YXR1cy5jb2RlKCIsIGNvZGUsICIpIik7CisgICAgICAgIG1fY2FsbE9uQ2xpZW50
VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBjb2Rl
XSB7CisgICAgICAgICAgICBpZiAobV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxs
YmFjaykKKyAgICAgICAgICAgICAgICBtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0Nh
bGxiYWNrKGNvZGUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgLy8gQXVkaW8gdHJhY2tzIGFy
ZSBncm91cGVkIGludG8gbWV0YS1zYW1wbGVzIG9mIGEgZHVyYXRpb24gbm8gbW9yZSB0aGFuIG1f
bWluaW11bVNhbXBsZUR1cmF0aW9uLgorICAgIC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwg
bm8gbW9yZSBhdWRpbyBkYXRhIG1heSBiZSBpbmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55
IHBlbmRpbmcKKyAgICAvLyBhdWRpbyBidWZmZXJzLgorICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2Ft
cGxlcygpOworCisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEoKQoreworfQorCit2b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJv
b2wsIHVpbnQ2NF90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0
X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aW52YWxpZGF0ZSgpCit7CisgICAgSU5GT19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgbV9wYXJzZXIuaW52YWxpZGF0ZSgpOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXIm
IGxvZ2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKK3sKKyAgICBtX3BhcnNlci5zZXRM
b2dnZXIobG9nZ2VyLCBsb2dJZGVudGlmaWVyKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sK
KyAgICBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uID0gTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RmxvYXQoZHVyYXRpb24pOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5k
ZXggZTg3NmFiNDE0YTRhYmIzM2Q1MThjMzdiNDFmZTVhMTQ3NzZhYjQ5Ni4uODEwN2I3MDZlMzUx
MDdkMjQ0NGU3MTFjOGZkMzU3MDBjNzQzZWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0uaApAQCAtMjcsMTkgKzI3LDE5IEBACiAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCisj
aW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUGFyc2VyLmgi
CiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+Ci0jaW5jbHVkZSA8Q29yZU1l
ZGlhL0NNVGltZS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29yZU1lZGlhU1BJLmg+CiAjaW5j
bHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3ZWJtL2NhbGxiYWNrLmg+CiAjaW5jbHVkZSA8d2Vi
bS9zdGF0dXMuaD4KICNpbmNsdWRlIDx3ZWJtL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CisjaW5jbHVk
ZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVz
Y3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Ci10eXBlZGVmIHN0cnVjdCBPcGFxdWVD
TUJsb2NrQnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCiBuYW1lc3BhY2Ugd2VibSB7CiBjbGFz
cyBXZWJtUGFyc2VyOwpAQCAtNDcsNDIgKzQ3LDM2IEBAIGNsYXNzIFdlYm1QYXJzZXI7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1Ymxp
YyBTb3VyY2VCdWZmZXJQYXJzZXIsIHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgeworY2xhc3MgV2Vi
TVBhcnNlciA6IHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7Ci0KLSAgICBzdGF0aWMg
Ym9vbCBpc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmKTsKLSAgICBzdGF0aWMgU3Bhbjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1J
TUVUeXBlcygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVy
UGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJik7CisgICAgY2xhc3MgQ2FsbGJh
Y2sgeworICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlh
VGltZSYpIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRh
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50
NjRfdCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRp
YWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIHsg
fQorICAgICAgICB2aXJ0dWFsIH5DYWxsYmFjaygpID0gZGVmYXVsdDsKKyAgICB9OwogCi0gICAg
U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwotICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7
CisgICAgV2ViTVBhcnNlcihDYWxsYmFjayYpOworICAgIH5XZWJNUGFyc2VyKCk7CiAKLSAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7CiAKKyAg
ICBpbnQgcGFyc2UoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYpOworICAgIHZvaWQgcmVz
ZXRTdGF0ZSgpOworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKICAg
ICBjb25zdCB3ZWJtOjpTdGF0dXMmIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9
CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOjpXZWJNOyB9Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmID0gW10geyB9LCBBcHBlbmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5h
bDsKLSAgICB2b2lkIGZsdXNoUGVuZGluZ01lZGlhRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOwot
ICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFs
OwotICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0
ZSgpIGZpbmFsOworICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYm
LCB1aW50NjRfdCk7CiAKLSAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwotICAg
IHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOwotICAgIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlk
ZW50aWZpZXIpIGZpbmFsOwotCi0gICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxD
TVNhbXBsZUJ1ZmZlclJlZj4sIHVpbnQ2NF90LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJh
bmdlT2Zmc2V0KTsKLSAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVu
Y3Rpb248dm9pZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRk
aW5nKT47Ci0gICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNl
VHJpbW1pbmdEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIG1fZGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICB2
b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKTsKKyAg
ICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgp
OyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
SWRlbnRpZmllcjsgfQogCiAgICAgZW51bSBjbGFzcyBFcnJvckNvZGUgOiBpbnQzMl90IHsKICAg
ICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTUVycm9yQ29kZVN0YXJ0ID0gMjAwMCwKQEAgLTEy
MCwxOCArMTE0LDEyIEBAIHB1YmxpYzoKICAgICBjbGFzcyBUcmFja0RhdGEgewogICAgICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRv
IGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFj
a0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFj
a0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBj
b25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+
IFVuaXF1ZVJlZjxUcmFja0RhdGE+CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPFRyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3du
LCBwYXJzZXIpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihj
b2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duLCBwYXJz
ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAg
IFVua25vd24sCi0gICAgICAgICAgICBBdWRpbywKLSAgICAgICAgICAgIFZpZGVvLAotICAgICAg
ICB9OwotCi0gICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSYgcGFyc2VyKQorICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwg
Y29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGUg
dHJhY2tUeXBlLCBXZWJNUGFyc2VyJiBwYXJzZXIpCiAgICAgICAgICAgICA6IG1fY29kZWMgeyBj
b2RlY1R5cGUgfQogICAgICAgICAgICAgLCBtX3RyYWNrIHsgd2VibTo6VHJhY2tFbnRyeSB7IHRy
YWNrRW50cnkgfSB9CiAgICAgICAgICAgICAsIG1fdHJhY2tUeXBlIHsgdHJhY2tUeXBlIH0KQEAg
LTE0MiwxMTMgKzEzMCwxMTIgQEAgcHVibGljOgogCiAgICAgICAgIENvZGVjVHlwZSBjb2RlYygp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZWM7IH0KICAgICAgICAgd2VibTo6VHJhY2tFbnRyeSYgdHJh
Y2soKSB7IHJldHVybiBtX3RyYWNrOyB9Ci0gICAgICAgIFR5cGUgdHJhY2tUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90cmFja1R5cGU7IH0KKyAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJh
Y2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5cGU7IH0KIAotICAgICAgICBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb24oKSB7IHJldHVybiBt
X2Zvcm1hdERlc2NyaXB0aW9uOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24o
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+JiYgZGVzY3JpcHRpb24pIHsgbV9mb3Jt
YXREZXNjcmlwdGlvbiA9IFdURk1vdmUoZGVzY3JpcHRpb24pOyB9CisgICAgICAgIFJlZlB0cjxU
cmFja0luZm8+IGZvcm1hdERlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXREZXNj
cmlwdGlvbi5jb3B5UmVmKCk7IH0KKyAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihS
ZWY8VHJhY2tJbmZvPiYmIGRlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zv
cm1hdERlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBtX2Zv
cm1hdERlc2NyaXB0aW9uLT50cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyc2VyOyB9CisgICAgICAgIFdlYk1QYXJzZXImIHBhcnNlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyc2VyOyB9CiAKLSAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29u
c3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwg
dWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpCisgICAgICAgIHZpcnR1YWwgd2VibTo6U3Rh
dHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRh
ZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KQogICAgICAgICB7CiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiB3ZWJtOjpT
dGF0dXMod2VibTo6U3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDb21wbGV0ZWQoKQorICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fY29t
cGxldGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NvbXBsZXRlTWVkaWFT
YW1wbGVzID0geyB9OwogICAgICAgICB9CisKICAgICAgICAgdm9pZCByZXNldCgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkKCk7CisgICAgICAgICAgICByZXNldENvbXBs
ZXRlZEZyYW1lc1N0YXRlKCk7CiAgICAgICAgICAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0
ZDo6bnVsbG9wdDsKICAgICAgICAgICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9ja0J1ZmZlci5yZXNldCgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkcmFpblBl
bmRpbmdTYW1wbGVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBt
X3BhcnNlci5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcyks
IG1fbGFzdFBvc2l0aW9uKTsKKyAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUo
KTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBSZXRhaW5QdHI8Q01CbG9j
a0J1ZmZlclJlZj4gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwg
c2l6ZV90IGxlbmd0aCkgY29uc3Q7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNv
bnN0OwogICAgICAgICB3ZWJtOjpTdGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBj
b25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsK
LSAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwotICAg
ICAgICAvLyBJbml0aWFsIGFsbG9jYXRpb24gc2l6ZSBvZiBlbXB0eSBDTUJsb2NrQnVmZmVyLgot
ICAgICAgICBzaXplX3QgbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkgeyAwIH07CisgICAgICAgIFJl
ZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7CisgICAg
ICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fY29tcGxldGVNZWRpYVNhbXBsZXM7CisgICAgICAgIHVp
bnQ2NF90IG1fbGFzdFBvc2l0aW9uIHsgMCB9OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29k
ZWNUeXBlIG1fY29kZWM7CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFjazsKLSAgICAg
ICAgVHlwZSBtX3RyYWNrVHlwZTsKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVm
ZmVyUmVmPiBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKLSAgICAgICAgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTSYgbV9wYXJzZXI7CisgICAgICAgIGNvbnN0IFRyYWNrSW5mbzo6VHJhY2tUeXBlIG1fdHJh
Y2tUeXBlOworICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBtX2Zvcm1hdERlc2NyaXB0aW9uOwor
ICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY3VycmVudEJsb2NrQnVmZmVyOworICAgICAg
ICBXZWJNUGFyc2VyJiBtX3BhcnNlcjsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IG1f
Y29tcGxldGVQYWNrZXRTaXplOwogICAgICAgICAvLyBTaXplIG9mIHRoZSBjdXJyZW50bHkgaW5j
b21wbGV0ZSBwYXJzZWQgcGFja2V0LgogICAgICAgICBzaXplX3QgbV9wYXJ0aWFsQnl0ZXNSZWFk
IHsgMCB9OwogICAgIH07CiAKICAgICBjbGFzcyBWaWRlb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFj
a0RhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPgorICAg
ICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6
VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8
VmlkZW9UcmFja0RhdGE+CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlcik7CiAgICAg
ICAgIH0KIAotICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25z
dCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBw
YXJzZXIpCi0gICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5
cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIFZpZGVvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2Rl
Y1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBh
cnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhKGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHJh
Y2tJbmZvOjpUcmFja1R5cGU6OlZpZGVvLCBwYXJzZXIpCiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkg
ZmluYWw7Ci0KICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihj
b25zdCBDTVRpbWUmLCBpbnQsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmKTsKICAgICAgICAg
Y29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRh
IjsgfQorICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXIm
LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBNZWRpYVRpbWUm
LCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBm
aW5hbDsKIAogI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBh
cnNlciBtX2hlYWRlclBhcnNlcjsKKyAgICAgICAgVmVjdG9yPGJvb2w+IG1fa2V5RnJhbWVzOwog
I2VuZGlmCiAgICAgfTsKIAogICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNr
RGF0YSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBl
IGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVu
aXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVj
VHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1Q
YXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPgogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBl
LCB0cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1TYW1wbGVEdXJhdGlvbik7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0Vu
dHJ5LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNU
eXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNl
QnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCi0g
ICAgICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVk
aW8sIHBhcnNlciB9Ci0gICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWlu
aW11bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYg
cGFyc2VyKQorICAgICAgICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnks
IFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbywgcGFyc2VyIH0KICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVy
JiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwg
aW50KSBmaW5hbDsKLSAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZCgpIGZpbmFsOwotICAgICAg
ICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0
ZVJhbmdlT2Zmc2V0ID0gc3RkOjpudWxsb3B0KTsKLQogICAgIHByaXZhdGU6CisgICAgICAgIHdl
Ym06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZy
YW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkgZmluYWw7Cisg
ICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOwogICAgICAgICBj
b25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiQXVkaW9UcmFja0RhdGEi
OyB9CiAKLSAgICAgICAgQ01UaW1lIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZTsKLSAgICAgICAg
Q01UaW1lIG1fcGFja2V0RHVyYXRpb247Ci0gICAgICAgIHNpemVfdCBtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBNZWRpYVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKICAg
ICAgICAgdWludDhfdCBtX2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBt
X2ZyYW1lRHVyYXRpb24geyAwX3MgfTsKLSAgICAgICAgVmVjdG9yPHNpemVfdD4gbV9wYWNrZXRT
aXplczsKLSAgICAgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gbV9wYWNrZXRUaW1pbmdz
OwogICAgICAgICBzaXplX3QgbU51bUZyYW1lc0luQ29tcGxldGVCbG9jayB7IDAgfTsKLSAgICAg
ICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBz
YW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKLSAg
ICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IE1lZGlhU2FtcGxl
Q3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRDdXJzb3JgLgotICAg
ICAgICBmbG9hdCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IDIgfTsKICAgICB9OwogCi0gICAg
Y29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsg
fQotICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lk
ZW50aWZpZXI7IH0KLQogcHJpdmF0ZToKLQogICAgIFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJh
Y2tOdW1iZXIodWludDY0X3QpOwotCiAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRWaWRlb0Nv
ZGVjKFN0cmluZ1ZpZXcpOwogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkQXVkaW9Db2RlYyhT
dHJpbmdWaWV3KTsKIApAQCAtMjY4LDcgKzI1NSw3IEBAIHByaXZhdGU6CiAgICAgd2VibTo6U3Rh
dHVzIE9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3
ZWJtOjpCbG9ja0dyb3VwJik7CiAgICAgd2VibTo6U3RhdHVzIE9uRnJhbWUoY29uc3Qgd2VibTo6
RnJhbWVNZXRhZGF0YSYsIHdlYm06OlJlYWRlciosIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykg
ZmluYWw7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2lu
aXRpYWxpemF0aW9uU2VnbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlQnVmZmVyUGFy
c2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQ+IG1faW5pdGlhbGl6YXRpb25TZWdtZW50OwogICAg
IFZlY3RvcjxzdGQ6OnBhaXI8dWludDY0X3QsIFJlZjxTaGFyZWRCdWZmZXI+Pj4gbV9rZXlJZHM7
CiAgICAgd2VibTo6U3RhdHVzIG1fc3RhdHVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjx3ZWJtOjpX
ZWJtUGFyc2VyPiBtX3BhcnNlcjsKQEAgLTI4NSwxMiArMjcyLDY4IEBAIHByaXZhdGU6CiAgICAg
dXNpbmcgQmxvY2tWYXJpYW50ID0gc3RkOjp2YXJpYW50PHdlYm06OkJsb2NrLCB3ZWJtOjpTaW1w
bGVCbG9jaz47CiAgICAgc3RkOjpvcHRpb25hbDxCbG9ja1ZhcmlhbnQ+IG1fY3VycmVudEJsb2Nr
OwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IG1fcmV3aW5kVG9Qb3NpdGlvbjsKLSAgICBm
bG9hdCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uIHsgMiB9OwogCiAgICAgUmVmUHRyPGNv
bnN0IExvZ2dlcj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsg
bnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fbmV4dENoaWxkSWRlbnRpZmllciB7IDAgfTsKKyAg
ICBDYWxsYmFjayYgbV9jYWxsYmFjazsKK307CisKK2NsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBXZWJNUGFyc2VyOjpDYWxsYmFjayB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNX
ZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCk7CisgICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7
CisgICAgc3RhdGljIFNwYW48Y29uc3QgQVNDSUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlwZXMo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYpOworCisgICAgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTSgpOworICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkgPSBkZWZhdWx0OworCisgICAg
c3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIFR5cGU6OldlYk07IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVuZERhdGEoU2Vn
bWVudCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0sIEFwcGVuZEZsYWdz
ID0gQXBwZW5kRmxhZ3M6Ok5vbmUpIGZpbmFsOworICAgIHZvaWQgZmx1c2hQZW5kaW5nTWVkaWFE
YXRhKCkgZmluYWw7CisgICAgdm9pZCBzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJ
RChib29sLCB1aW50NjRfdCkgZmluYWw7CisgICAgYm9vbCBzaG91bGRQcm92aWRlTWVkaWFkYXRh
Rm9yVHJhY2tJRCh1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCByZXNldFBhcnNlclN0YXRlKCkg
ZmluYWwgeyBtX3BhcnNlci5yZXNldFN0YXRlKCk7IH0KKyAgICB2b2lkIGludmFsaWRhdGUoKSBm
aW5hbDsKKworICAgIHVzaW5nIERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBGdW5jdGlv
bjx2b2lkKHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgZGlzY2FyZFBhZGRpbmcp
PjsKKyAgICB2b2lkIHNldERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2soRGlkUGFyc2VUcmlt
bWluZ0RhdGFDYWxsYmFjayYmIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbV9kaWRQYXJzZVRy
aW1taW5nRGF0YUNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisgICAgfQorCisgICAgdm9p
ZCBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gPSBzdGQ6
Om51bGxvcHQpOworICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYs
IGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOworICAgIGNvbnN0IExvZ2dlciogbG9nZ2Vy
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisKK3ByaXZh
dGU6CisgICAgLy8gV2ViTVBhcnNlcjo6Q2FsbGJhY2sKKyAgICB2b2lkIHBhcnNlZEluaXRpYWxp
emF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmKSBm
aW5hbDsKKyAgICB2b2lkIHBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50
NjRfdCkgZmluYWw7CisgICAgYm9vbCBjYW5EZWNyeXB0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
ISFtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNr
SURDYWxsYmFjazsgfQorICAgIHZvaWQgY29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRh
dGFGb3JUcmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2
b2lkIHBhcnNlZFRyaW1taW5nRGF0YSh1aW50NjRfdCwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7
CisgICAgCisgICAgdm9pZCByZXR1cm5TYW1wbGVzKGNvbnN0IFRyYWNrSW5mbyosIE1lZGlhU2Ft
cGxlc0Jsb2NrOjpTYW1wbGVzVmVjdG9yJiYsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+ID0gc3RkOjpudWxsb3B0KTsKKwogICAgIERpZFBhcnNlVHJpbW1p
bmdEYXRhQ2FsbGJhY2sgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrOworICAgIFdlYk1Q
YXJzZXIgbV9wYXJzZXI7CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1f
YXVkaW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX2F1
ZGlvSW5mbzsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV92aWRlb0Zv
cm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxjb25zdCBUcmFja0luZm8+IG1fdmlkZW9JbmZv
OworICAgIE1lZGlhVGltZSBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uIHsgOTYwMDAsIDQ4
MDAwIH07CisgICAgTWVkaWFTYW1wbGVzQmxvY2sgbV9xdWV1ZWRBdWRpb1NhbXBsZXM7CisgICAg
TWVkaWFUaW1lIG1fcXVldWVkQXVkaW9EdXJhdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgTG9nZ2Vy
PiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07
CiB9OwogCiB9CkBAIC0yOTksMTIgKzM0MiwxMiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBw
YXJzZXIudHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsg
fQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQot
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgp
ID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6Vmlk
ZW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBhcnNlcjo6
VmlkZW9UcmFja0RhdGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6Oldl
Yk1QYXJzZXI6OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tU
eXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tJbmZvOjpUcmFja1R5cGU6OlZpZGVvOyB9CiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGEpCi0gICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29y
ZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbzsgfQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNr
RGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V2ViTVBhcnNlcjo6
VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBX
ZWJDb3JlOjpUcmFja0luZm86OlRyYWNrVHlwZTo6QXVkaW87IH0KIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKIAogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2Nv
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVz
Q29jb2EuaAppbmRleCA5NDEwYTdjNDc5NjM0NzA0ZWI1OWM5OTk2MDM0ODQ0YjY5YTg4NzZkLi5k
MDA0MWJmODliMzBjMmNjNjE4NzkwOGY0YmU3NmEzYWJmZjQyNjRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLmgKQEAgLTMwLDggKzMwLDYgQEAKICNpbmNsdWRlICJWUDlVdGlsaXRpZXMuaCIKICNpbmNs
dWRlIDx3ZWJtL2RvbV90eXBlcy5oPgogCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZv
cm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwotCiBuYW1lc3BhY2UgdnA5
X3BhcnNlciB7CiBjbGFzcyBWcDlIZWFkZXJQYXJzZXI7CiB9CkBAIC00MCw2ICszOCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IE1lZGlhQ2FwYWJpbGl0aWVzSW5mbzsKIHN0cnVj
dCBWaWRlb0NvbmZpZ3VyYXRpb247CitzdHJ1Y3QgVmlkZW9JbmZvOwogCiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA5RGVjb2RlcigpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZWdpc3RlcldlYktpdFZQOERlY29kZXIoKTsKQEAgLTUwLDcgKzQ5LDcgQEAgYm9vbCBpc1ZQOERl
Y29kZXJBdmFpbGFibGUoKTsKIGJvb2wgaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBv
cnRlZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYpOwogc3RkOjpvcHRpb25hbDxN
ZWRpYUNhcGFiaWxpdGllc0luZm8+IHZhbGlkYXRlVlBQYXJhbWV0ZXJzKGNvbnN0IFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkJiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CiAKLVJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21W
UDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qg
d2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CitSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRl
b0luZm9Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNl
ciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwogCiBzdHJ1Y3QgVlA4RnJh
bWVIZWFkZXIgewogICAgIGJvb2wga2V5ZnJhbWUgeyBmYWxzZSB9OwpAQCAtNjUsOCArNjQsOCBA
QCBzdHJ1Y3QgVlA4RnJhbWVIZWFkZXIgewogICAgIGJvb2wgbmVlZHNDbGFtcGluZyB7IGZhbHNl
IH07CiB9OwogCi1zdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVh
ZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7Ci1SZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVy
KGNvbnN0IFZQOEZyYW1lSGVhZGVyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+
Jik7CitzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNv
bnN0IHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSk7CitSZWY8VmlkZW9JbmZv
PiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiwgY29u
c3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JU
IFZQOVRlc3RpbmdPdmVycmlkZXMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRl
eCA1YzBkZmFmZGIyZTY3ZjA0ODA1MDVmZWFjNjZhNGVkNTQ0YTI5ZTMzLi5jZjhjOWIyMTI4YzAx
NDhkNWE5MGQ5ZDUxNTZkZjY5ZjRhMGZiZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAt
MzEsMTEgKzMxLDEyIEBACiAjaW1wb3J0ICJGb3VyQ0MuaCIKICNpbXBvcnQgIkxpYldlYlJUQ1By
b3ZpZGVyLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKKyNpbXBvcnQgIk1l
ZGlhU2FtcGxlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAiU2NyZWVu
UHJvcGVydGllcy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJTeXN0ZW1C
YXR0ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRpb24uaCIKLSNpbXBvcnQgPENvcmVN
ZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRh
Vmlldy5oPgogI2ltcG9ydCA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpAQCAtMzUwLDI1ICszNTEsMzUgQEAg
c3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBj
b2VmZmljaWVudHMpCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01D
b2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXMgY29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHVpbnQ4X3Qg
cHJpbWFyaWVzKQogewogICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CiAgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFn
ZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29s
b3JQcmltYXJpZXM6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0NDcwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpC
VF82MDFfNzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21w
dGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUyNDBt
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG06CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkZpbG07CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMDsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVTdDQyODE7CiAg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI6Ci0g
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJ
X1AzOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJw
NDMxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFy
aWVzX1AzX0Q2NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8y
MDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0
RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19JVFVfUl8yMDIwOworICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnM7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7
CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNvbnZl
cnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
JiBjaGFyYWN0ZXJpc3RpY3MpCkBAIC00MTEsMjkgKzQyMiw0NSBAQCBzdGF0aWMgdWludDhfdCBj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljcyYgYwogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNm
ZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY29udmVydFRvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQogewogICAgIHN3aXRjaCAoY2hh
cmFjdGVyaXN0aWNzKSB7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVy
RnVuY3Rpb25fSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjJjdXJ2ZTsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzoKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyOGN1cnZl
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYw
MV83OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2Zl
ckZ1bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgotICAgICAgICByZXR1cm4gUEFMOjpr
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUy
NDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Okxp
bmVhcjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TGluZWFyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkxvZ3JpdGhtaWM6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkxvZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ1NxcnQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyNDsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYxXzA6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MTM2
MUV4dGVuZGVkQ29sb3VyR2FtdXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMTsKICAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ7
CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAy
MF8xMmJpdDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2Zl
ckZ1bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDsKICAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80Mjhf
MToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFX1NUXzQyOF8xOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExHOwotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8y
XzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3JlTWVkaWFfa0NNRm9y
bWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxwdHI7Ci0gICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgotICAgICAg
ICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFy
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpB
cmliU3RkQjY3SGxnOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwogICAgIH0KLQotICAg
IHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2Vm
ZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCkBAIC00NjIs
MjEgKzQ4OSwzMSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMo
Y29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudAogICAgIH0KIH0KIAotc3RhdGlj
IENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMp
CitzdGF0aWMgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyBjb252ZXJ0VG9QbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzKHVpbnQ4X3QgY29lZmZpY2llbnRzKQogewogICAgIHN3
aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OklkZW50aXR5OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6UmdiOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpGQ0M6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2M7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OworICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAg
cmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50
THVtaW5hbmNlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF8yMDIwX0NvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5hbmNlOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6VW5zcGVj
aWZpZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90
IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50
NjRfdCB5KQpAQCAtNDkxLDcgKzUyOCw3IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1w
bGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQogICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0Nv
bG9jYXRlZDsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChjb25z
dCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRoLCBpbnQz
Ml90IGhlaWdodCkKK3N0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQm
IHJlY29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiB7CiAgICAgLy8gUmVmOiAi
VlAgQ29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRpbmcsIHYxLjAsIDIwMTctMDMtMzEi
CiAgICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbXA0Lz4KQEAgLTUyMCwx
MiArNTU3LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAgICAgLy8gRklYTUU6IENvbnZl
cnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3JpdGluZyBj
b2RlIGJlbG93CiAgICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCiAKKyAgICBh
dXRvIHZpZGVvSW5mbyA9IFZpZGVvSW5mbzo6Y3JlYXRlKCk7CisgICAgdmlkZW9JbmZvLT5zaXpl
ID0gdmlkZW9JbmZvLT5kaXNwbGF5U2l6ZSA9IHsgZmxvYXQod2lkdGgpLCBmbG9hdChoZWlnaHQp
IH07CisKICAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNT
aXplID0gMTI7CiAKICAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OwogICAg
IHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgp
IDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJl
Y29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwogICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlv
bkRhdGFTaXplID0gMDsKLQogICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShB
cnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAxKSwg
MCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwogICAgIHZpZXctPnNldCgwLCB2
ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2ZpbGUs
IGZhbHNlKTsKQEAgLTUzNSw0NiArNTc0LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAg
ICAgdmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOwog
ICAgIHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CiAgICAg
dmlldy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOwotCi0gICAg
YXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNv
bnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKLQotICAgIENG
VHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0gICAgQ0ZU
eXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1dG8g
Y29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FS
UkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIFZlY3RvcjxD
RlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVu
c2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlw
ZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKLQot
ICAgIGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpGdWxsUmFuZ2UpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6a0NNRm9y
bWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOwotICAgICAgICBleHRlbnNp
b25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8g
Y21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9y
UHJpbWFyaWVzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZm
ZXJDb2xvclByaW1hcmllc0tleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNt
Q29sb3JQcmltYXJpZXMpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlv
biA9IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRy
YW5zZmVyRnVuY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVy
dFRvQ01ZQ2JDUk1hdHJpeChyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKSkgewotICAgICAgICBl
eHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7Ci0gICAg
ICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKLSAgICB9Ci0KLSAgICBhdXRv
IGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRl
bnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgQ01WaWRlb0NvZGVjVHlw
ZSBjb2RlYyA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDkiID8ga0NNVmlkZW9Db2RlY1R5cGVf
VlA5IDogJ3ZwMDgnOwotICAgIGlmIChub0VyciAhPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lv
bnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICB2aWRlb0luZm8tPmF0
b21EYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KHZpZXct
PmRhdGEoKSksIHZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNl
LmZ1bGxSYW5nZSA9IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UucHJpbWFyaWVzID0g
Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmll
cyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnRyYW5zZmVyID0gY29udmVydFRvUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKHJlY29yZC50cmFuc2ZlckNoYXJhY3Rlcmlz
dGljcyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLm1hdHJpeCA9IGNvbnZlcnRUb1BsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyk7Cisg
ICAgdmlkZW9JbmZvLT5jb2RlY05hbWUgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5IiA/ICd2
cDA5JyA6ICd2cDA4JzsKKyAgICByZXR1cm4gdmlkZW9JbmZvOwogfQogCi1SZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVy
UGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3
ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9J
bmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIm
IHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAgICBWUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAKQEAgLTYwNiwxMCArNjE1LDEwIEBAIFJl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZy
b21WUDlIZWFkZXJQYXJzZXIoY29uCiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0Nv
bmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgp
KTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CiB9CiAKLXN0ZDo6
b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJh
bWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQorc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4g
cGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFt
ZVNpemUpCiB7CiAgICAgLy8gVlA4IGZyYW1lIGhlYWRlcnMgYXJlIGRlZmluZWQgaW4gUkZDIDYz
ODY6IDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjM4Nj4uCiAKQEAgLTY3MSw3ICs2
ODAsNyBAQCBzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVy
KHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAK
LVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6
RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxl
bWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCBy
ZWNvcmQ7CiAgICAgcmVjb3JkLmNvZGVjTmFtZSA9ICJ2cDA4IjsKQEAgLTcwMSw3ICs3MTAsNyBA
QCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOAogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFy
aWVzID0gY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUo
KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29k
ZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0
KTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
Yk1BdWRpb1V0aWxpdGllc0NvY29hLmgKaW5kZXggODcxMDRkOGI3YjM1N2MxNjBiNmRjY2M0MWJm
ZTFmODllMGE2YzI3MS4uYTk4MDk4YzVhMzlmY2I0NTBiMmZmOWM3NjEwZDk3NGU4MjQ2ZDRkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1
ZGlvVXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0yNywxNiArMjcsMTcgQEAKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLXR5cGVk
ZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEF1ZGlvSW5mbzsKKwog
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVkZWQoKTsKLVJldGFpblB0cjxD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHNpemVfdCwgY29uc3Qgdm9pZCopOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVk
aW9JbmZvKHNpemVfdCwgY29uc3Qgdm9pZCopOwogCiBzdHJ1Y3QgT3B1c0Nvb2tpZUNvbnRlbnRz
IHsKICAgICB1aW50OF90IHZlcnNpb24geyAwIH07CkBAIC01NSw4ICs1NiwxMCBAQCBzdHJ1Y3Qg
T3B1c0Nvb2tpZUNvbnRlbnRzIHsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCBpc09wdXNEZWNvZGVy
QXZhaWxhYmxlKCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5l
ZWRlZCgpOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplID0gMjsKIGJv
b2wgcGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9p
ZCogcHJpdmF0ZURhdGEsIHNpemVfdCBmcmFtZURhdGFTaXplLCBjb25zdCB2b2lkKiBmcmFtZURh
dGEsIE9wdXNDb29raWVDb250ZW50cyYpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250
ZW50cyYpOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25zdCBPcHVz
Q29va2llQ29udGVudHMmKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
CmluZGV4IDdlMGFmYjI5MGRkODVhNzdmOWJlZmZmNDk0N2E0N2I3NTM1ZWIyZjQuLjY2MDlmNGFl
YjY3YTJkZjY0MWYwNzJlNTgxNjBmOWFmNWQzNmRmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLm1tCkBAIC0zMCwxMiArMzAsMTMgQEAKIAogI2ltcG9ydCAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBs
ZS5oIgogI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlBsYXRmb3JtTWVkaWFT
ZXNzaW9uTWFuYWdlci5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxBdWRp
b1Rvb2xib3gvQXVkaW9Db2RlYy5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29tcG9u
ZW50Lmg+CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Gb3JtYXQuaD4KLSNpbXBvcnQgPENv
cmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgogI2ltcG9y
dCA8d3RmL0ZsaXBCeXRlcy5oPgogI2ltcG9ydCA8d3RmL1NlY29uZHMuaD4KQEAgLTc2LDcgKzc3
LDcgQEAgc3RhdGljIGJvb2wgcmVnaXN0ZXJEZWNvZGVyRmFjdG9yeShjb25zdCBjaGFyKiBkZWNv
ZGVyTmFtZSwgT1NUeXBlIGRlY29kZXJUeXBlKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZv
ckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQor
c3RhdGljIFJlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdChPU1R5cGUg
Zm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQogewogICAgIEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsKICAgICBhc2JkLm1Gb3JtYXRJRCA9IGZvcm1h
dElEOwpAQCAtODcsOCArODgsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE8KICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXpl
KCksIG1hZ2ljQ29va2llLmRhdGEoKSk7CisgICAgYXV0byBhdWRpb0luZm8gPSBBdWRpb0luZm86
OmNyZWF0ZSgpOworICAgIGF1ZGlvSW5mby0+Y29kZWNOYW1lID0gZm9ybWF0SUQ7CisgICAgYXVk
aW9JbmZvLT5yYXRlID0gYXNiZC5tU2FtcGxlUmF0ZTsKKyAgICBhdWRpb0luZm8tPmNoYW5uZWxz
ID0gYXNiZC5tQ2hhbm5lbHNQZXJGcmFtZTsKKyAgICBhdWRpb0luZm8tPmZyYW1lc1BlclBhY2tl
dCA9IGFzYmQubUZyYW1lc1BlclBhY2tldDsKKyAgICBhdWRpb0luZm8tPmJpdERlcHRoID0gMTY7
CisgICAgYXVkaW9JbmZvLT5jb29raWVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShtYWdpY0Nvb2tpZSkpOworICAgIHJldHVybiBhdWRpb0luZm87CiB9CisKICNlbmRpZiAvLyBF
TkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKIAogI2lmIEVOQUJMRShPUFVTKQpAQCAtMjAw
LDcgKzIwOSw3IEBAIGJvb2wgcGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IGNvZGVjUHJpdmF0
ZVNpemUsIGNvbnN0IHZvaWQqIGNvZGVjUHJpdmF0ZURhdGEsCiAKICAgICBhdXRvKiBwcml2YXRl
RGF0YVB0ciA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihjb2RlY1ByaXZhdGVEYXRhKTsK
IAotICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwgMTkpCisgICAgaWYgKGNvZGVjUHJpdmF0ZVNp
emUgPCBrT3B1c0hlYWRlclNpemUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyAxLiBN
YWdpYyBTaWduYXR1cmU6CkBAIC0zNjIsNyArMzcxLDcgQEAgYm9vbCByZWdpc3Rlck9wdXNEZWNv
ZGVySWZOZWVkZWQoKQogI2VuZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29u
dGVudHMmIGNvb2tpZUNvbnRlbnRzKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlv
SW5mbyhjb25zdCBPcHVzQ29va2llQ29udGVudHMmIGNvb2tpZUNvbnRlbnRzKQogewogI2lmIEVO
QUJMRShPUFVTKQogICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQpAQCAtMzcyLDcg
KzM4MSw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29vCiAgICAgaWYgKCFjb29raWVEYXRhLnNp
emUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9G
b3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOwor
ICAgIHJldHVybiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tp
ZURhdGEpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvb2tpZUNvbnRlbnRzKTsKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTQ2NSw3ICs0NzQsNyBAQCBib29sIHJlZ2lzdGVyVm9yYmlzRGVj
b2RlcklmTmVlZGVkKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURh
dGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0
ZVZvcmJpc0F1ZGlvSW5mbyhzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2
YXRlRGF0YSkKIHsKICNpZiBFTkFCTEUoVk9SQklTKQogICAgIGlmICghaXNWb3JiaXNEZWNvZGVy
QXZhaWxhYmxlKCkpCkBAIC00NzUsNyArNDg0LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXYK
ICAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3JiJywg
V1RGTW92ZShjb29raWVEYXRhKSk7CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1h
dCgndm9yYicsIFdURk1vdmUoY29va2llRGF0YSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cHJpdmF0ZURhdGFTaXplKTsKICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2Ft
cGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMxMzRjZTZhN2EyMTRjZGM5
ZGUwNWM0NzUzNzJlMTdjOWEzZC4uODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJj
NGU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9t
YWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zNCw4ICsz
NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIE1l
ZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2Ft
cGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkK
LSAgICA6IE1lZGlhU2FtcGxlQVZGT2JqQyhudWxscHRyKQotICAgICwgbV9wcmVzZW50YXRpb25U
aW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1lKCkpCisgICAgOiBtX3ByZXNlbnRhdGlvblRpbWUo
c2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSkKICAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVj
b2RlVGltZSgpKQogICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKICAgICAsIG1f
Ynl0ZVJhbmdlKCpzYW1wbGUuYnl0ZVJhbmdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5oCmluZGV4IGI2NmYzYTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLmM1
YzhhMjVjODE4NTQzZjVlODYzOGJiYzBlMGJhODNjNjc1NjlmMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUJ5dGVSYW5nZS5oCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1jbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpN
ZWRpYVNhbXBsZUFWRk9iakMgeworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBw
dWJsaWMgV2ViQ29yZTo6TWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVk
aWFTYW1wbGVCeXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBN
VFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKICAgICB7
CkBAIC01NSw2ICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnko
Y29uc3QgTWVkaWFUaW1lJikgZmluYWw7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1l
ZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwogCisgICAgYm9vbCBpc0RpdmlzYWJs
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RkOjpwYWlyPFJlZlB0cjxN
ZWRpYVNhbXBsZT4sIFJlZlB0cjxNZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUm
IHByZXNlbnRhdGlvblRpbWUsIFVzZUVuZFRpbWUgPSBVc2VFbmRUaW1lOjpEb05vdFVzZSkgZmlu
YWwgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRl
Tm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCB7IHJldHVybiAqY29uc3RfY2FzdDxNZWRpYVNhbXBs
ZUJ5dGVSYW5nZSo+KHRoaXMpOyB9CisKIHByaXZhdGU6CiAgICAgTWVkaWFTYW1wbGVCeXRlUmFu
Z2UoTWVkaWFTYW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2NF90IHRyYWNrSUQp
OwogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NjcxZWVmNTY3ZTVjM2JiMjcwZGQ5ZmJhMGY1ZGEzMzgxNjNlZWVlNC4uNTAwNzMzNTkwZWY4NmIz
NjYzYzQ4YjFmZGYyOTZkZjY1ZDliMzc5MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIyLTAzLTA0ICBKZWFuLVl2
ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlk
VGltZSgpIGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0
aW1lLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
NDczCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODE0OTIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRmx5LWJ5IGZpeGVzOiBBVkZvdW5kYXRpb25T
b2Z0TGlua1Rlc3Qgd2Fzbid0IGJlaW5nIGNvbXBpbGVkCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0NvcmVNZWRpYVV0aWxpdGllcy5tbTogQWRkZWQuCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKworMjAyMi0wMi0yMyAgSmVhbi1ZdmVzIEF2
ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhYmlsaXR5IHRvIGNvbnZlcnQg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2NrQnVmZmVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzcwNzUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToK
KwogMjAyMi0wMy0wNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0ZsYXRwYWsgU0RLXSBVcGdyYWRlIGZyb20gbGx2bTEyIHRvIGxsdm0xMwpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA4ODk0ZmJkNGZkY2U1ZTY3YjNkNDM3NzJhZGY5YjA2YjM1
MDE5NTRkLi4zZGVjMGNlZTc5M2MwNjUxMDBjYTNlMTNlOGNlZTZmOTJjYTM4MDRjIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMjYyLDYgKzI2Miw4IEBACiAJCTUxMDQ3NzczMUQyOThEREQw
MDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXNobSBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA0Nzc3MDFEMjk4RDg1MDA5
NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gKi87IH07CiAJCTUxMDQ3Nzc0
MUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXdhbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA0Nzc3MTFE
Mjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy13YWwgKi87IH07CiAJ
CTUxMDQ3Nzc3MUQyOThFNzIwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5odG1sIGluIENv
cHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDQ3Nzc2
MUQyOThFNTcwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5odG1sICovOyB9OworCQk1MTBB
NjY3QjI3RDMwMUFDMDBEMjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQTY2N0EyN0QyRkM3QTAwRDIy
NjI5IC8qIENvcmVNZWRpYVV0aWxpdGllcy5tbSAqLzsgfTsKKwkJNTEwQTY2N0MyN0QzMDFDNjAw
RDIyNjI5IC8qIEFWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFERjUxMjI2QTk1RkIwMDNERDJGNyAvKiBB
VkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0gKi87IH07CiAJCTUxMEE5MUY4MjREMzYyMjEwMEJG
RDg5QyAvKiBTb255RHVhbFNob2NrMy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMEE5MUY3MjREMzYyMTkwMEJGRDg5QyAvKiBTb255RHVhbFNob2Nr
My5tbSAqLzsgfTsKIAkJNTEwQTkyMEEyNEQ1MDQ4OTAwQkZEODlDIC8qIExvZ2l0ZWNoRjMxMC5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE5MjA5
MjRENTA0ODMwMEJGRDg5QyAvKiBMb2dpdGVjaEYzMTAubW0gKi87IH07CiAJCTUxMEE5MjBDMjRE
NTI3NTUwMEJGRDg5QyAvKiBMb2dpdGVjaEY3MTAubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBOTIwQjI0RDUyNzUxMDBCRkQ4OUMgLyogTG9naXRl
Y2hGNzEwLm1tICovOyB9OwpAQCAtMjA2OSw2ICsyMDcxLDcgQEAKIAkJNTEwNDc3NzExRDI5OEQ4
NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9ICJJREJEZWxl
dGVSZWNvdmVyeS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MDQ3Nzc1MUQyOThFMDMwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElEQkRlbGV0ZVJlY292ZXJ5Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA0Nzc3NjFEMjk4RTU3MDA5NzQ3RUIgLyogSURC
RGVsZXRlUmVjb3ZlcnkuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0aCA9IElEQkRlbGV0
ZVJlY292ZXJ5Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMEE2NjdBMjdE
MkZDN0EwMEQyMjYyOSAvKiBDb3JlTWVkaWFVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBDb3JlTWVkaWFVdGlsaXRpZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMEE5MUY3MjREMzYyMTkwMEJGRDg5QyAvKiBTb255RHVhbFNob2NrMy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNvbnlEdWFsU2hvY2szLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBOTIwOTI0RDUwNDgzMDBCRkQ4OUMgLyogTG9naXRl
Y2hGMzEwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9naXRl
Y2hGMzEwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBOTIwQjI0RDUyNzUx
MDBCRkQ4OUMgLyogTG9naXRlY2hGNzEwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gTG9naXRlY2hGNzEwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTA1Niw2ICs1MDU5LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3MTFERjUxMjI2QTk1
RkIwMDNERDJGNyAvKiBBVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0gKi8sCiAJCQkJMzFGODY1
RTUyNjcwMUU3MzAwM0JGQzZEIC8qIENvcmVDcnlwdG9TUEkuaCAqLywKKwkJCQk1MTBBNjY3QTI3
RDJGQzdBMDBEMjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0aWVzLm1tICovLAogCQkJCTc1MUIwNUQ1
MUY4RUFDMUEwMDI4QTA5RSAvKiBEYXRhYmFzZVRyYWNrZXJUZXN0Lm1tICovLAogCQkJCTU3RjFD
OTEwMjVEREQ1MTkwMEU4RjZFQSAvKiBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudENvY29hLm1tICov
LAogCQkJCTU3NjlDNTBBMUQ5QjAwMDEwMDA4NDdGQiAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3Jh
cC5tbSAqLywKQEAgLTU1MjcsNiArNTUzMSw3IEBACiAJCQkJRjRGQTJBNEYyNEQxRjA1NzAwNjE4
QTQ2IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9wb3NlZFJhbmdlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0RDOEU0OEQxQkM1Q0I0NTAwNTk0RkVDIC8qIEF1ZGlvU2Vzc2lvbkNhdGVnb3J5
SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQyRDYzNDQyMkExNzI5RjAwRDJGQjNBIC8qIEF1
dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTBBNjY3QzI3RDMw
MUM2MDBEMjI2MjkgLyogQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NDRTdFQjUxQTQxMUE3RTAwNDQ3QzRDIC8qIEJhY2tGb3J3YXJkTGlzdC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTFDN0ZFQjIwMjA3QzBGMkUwMEQyMzI3OCAvKiBCYWNrZ3JvdW5kQ29s
b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMTVDQkIzMDIzRjFGRjFBMDAzMDBDQzcgLyogQmFj
a2xpZ2h0TGV2ZWxOb3RpZmljYXRpb24ubW0gaW4gU291cmNlcyAqLywKQEAgLTU1NTYsNiArNTU2
MSw3IEBACiAJCQkJQ0QwQkQwQTYxRjc5OTI0RDAwMUFCMkNGIC8qIENvbnRleHRNZW51SW1nV2l0
aFZpZGVvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFDMTQyQzIyNEFBN0IyRTAwNDQ0MjA3IC8q
IENvbnRleHRNZW51TW91c2VFdmVudHMubW0gaW4gU291cmNlcyAqLywKIAkJCQlGNDAzNEZBMTI3
NUQ1NDAyMDAzQTgxRjggLyogQ29va2llQ29uc2VudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUx
MEE2NjdCMjdEMzAxQUMwMEQyMjYyOSAvKiBDb3JlTWVkaWFVdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3Q0NFN0VBQzFBNDExQTM0MDA0NDdDNEMgLyogQ291bnRlcnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0FFQUQ0N0YxRTIwMTE2QzAwNDE2RUZFIC8qIENyb3NzUGFydGl0aW9u
RmlsZVNjaGVtZUFjY2Vzcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RURCMUE0MTFBOTIw
MDQ0N0M0QyAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IDMxNTVjMDlm
MjQ3M2ViZWE2OTAwYjM5YzBkOWJlY2FhY2FhNWEwMTUuLmIwMTEyOGIyNmIxY2MwYTIwNWM2NTQx
YTQ4NTZiN2YwMmY0OGJjNzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzksNiArMjM5LDQxIEBAIFRFU1RfRihGcmFn
bWVudGVkU2hhcmVkQnVmZmVyVGVzdCwgZ2V0U29tZURhdGEpCiAgICAgY2hlY2tCdWZmZXIobC5k
YXRhKCksIGwuc2l6ZSgpLCAibCIpOwogfQogCitURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZl
clRlc3QsIGdldENvbnRpZ3VvdXNEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBzMSA9IHsg
J2EnLCAnYicsICdjJywgJ2QnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMyID0geyAnZScsICdm
JywgJ2cnLCAnaCcgfTsKKyAgICBWZWN0b3I8dWludDhfdD4gczMgPSB7ICdpJywgJ2onLCAnaycs
ICdsJyB9OworCisgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
YXBwZW5kKFdURk1vdmUoczEpKTsKKyAgICBidWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMyKSk7Cisg
ICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMykpOworICAgIGF1dG8gYnVmZmVyID0gYnVpbGRl
ci50YWtlKCk7CisKKyAgICBhdXRvIGFiY2QgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDAs
IDQpOworICAgIGF1dG8gYmNkZWZnaGkgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDEsIDgp
OworICAgIGF1dG8gZ2ggPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDYsIDIpOworICAgIGF1
dG8gZ2hpaiA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNiwgNCk7CisgICAgYXV0byBoID0g
YnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg3LCAxKTsKKyAgICBhdXRvIGlqayA9IGJ1ZmZlci0+
Z2V0Q29udGlndW91c0RhdGEoOCwgMyk7CisgICAgYXV0byBrbCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoMTAsIDIpOworICAgIGF1dG8gbCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEo
MTEsIDEpOworICAgIGNoZWNrQnVmZmVyKGFiY2QtPmRhdGEoKSwgYWJjZC0+c2l6ZSgpLCAiYWJj
ZCIpOworICAgIGNoZWNrQnVmZmVyKGJjZGVmZ2hpLT5kYXRhKCksIGJjZGVmZ2hpLT5zaXplKCks
ICJiY2RlZmdoaSIpOworICAgIGNoZWNrQnVmZmVyKGdoLT5kYXRhKCksIGdoLT5zaXplKCksICJn
aCIpOworICAgIGNoZWNrQnVmZmVyKGdoaWotPmRhdGEoKSwgZ2hpai0+c2l6ZSgpLCAiZ2hpaiIp
OworICAgIGNoZWNrQnVmZmVyKGgtPmRhdGEoKSwgaC0+c2l6ZSgpLCAiaCIpOworICAgIGNoZWNr
QnVmZmVyKGlqay0+ZGF0YSgpLCBpamstPnNpemUoKSwgImlqayIpOworICAgIGNoZWNrQnVmZmVy
KGtsLT5kYXRhKCksIGtsLT5zaXplKCksICJrbCIpOworICAgIGNoZWNrQnVmZmVyKGwtPmRhdGEo
KSwgbC0+c2l6ZSgpLCAibCIpOworICAgIGF1dG8gZmdoaWprbCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoNSwgMjApOworICAgIEVYUEVDVF9FUShmZ2hpamtsLT5zaXplKCksIGJ1ZmZlci0+
c2l6ZSgpIC0gNSk7CisgICAgY2hlY2tCdWZmZXIoZmdoaWprbC0+ZGF0YSgpLCBmZ2hpamtsLT5z
aXplKCksICJmZ2hpamtsIik7CisgICAgYXV0byBvdXRCb3VuZCA9IGJ1ZmZlci0+Z2V0Q29udGln
dW91c0RhdGEoMzAsIDIwKTsKKyAgICBFWFBFQ1RfRVEob3V0Qm91bmQtPnNpemUoKSwgMHUpOwor
fQorCiBURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRlc3QsIGlzRXF1YWxUbykKIHsKICAg
ICBhdXRvIG1ha2VCdWZmZXIgPSBbXSAoVmVjdG9yPFZlY3Rvcjx1aW50OF90Pj4mJiBjb250ZW50
cykgewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29h
L0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0KaW5kZXggYmFmYTc1ZjQ2
ZTYwMmRjY2YxN2Y1N2Y3YzAyNTNmZjBiMTk1YjE0Zi4uOTg2ZTA4ZWQ5MDRlMGFiM2YwN2IxMTE4
YjFmODM2OGI0MjQwMmUwOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0Lm1t
CkBAIC0xOTMsMTEgKzE5MywxNCBAQCBURVNUKEFWRm91bmRhdGlvblNvZnRMaW5rLCBDb25zdGFu
dHMpCiAjZW5kaWYKIAogI2VuZGlmCi0gICAgCisKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykKKyAg
ICBFWFBFQ1RfVFJVRShbUEFMOjpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVk
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIGlzRXF1YWxUb1N0cmluZzpAIkFWUm91dGVEZXRlY3Rvck11
bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24iXSk7CisjZW5kaWYKKwog
I2lmIEhBVkUoQVZST1VURVBJQ0tFUlZJRVcpCi0gICAgRVhQRUNUX1RSVUUoW0FWUm91dGVEZXRl
Y3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24gaXNFcXVhbFRv
U3RyaW5nOkAiQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5v
dGlmaWNhdGlvbiJdKTsKLSAgICBFWFBFQ1RfVFJVRShbQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2
aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJBVk91dHB1dENvbnRl
eHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIl0pOwotI2VuZGlmIC8vIFBMQVRG
T1JNKFdBVENIT1MpCisgICAgRVhQRUNUX1RSVUUoW1BBTDo6QVZPdXRwdXRDb250ZXh0T3V0cHV0
RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJBVk91dHB1dENv
bnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIl0pOworI2VuZGlmIC8vIEhB
VkUoQVZST1VURVBJQ0tFUlZJRVcpCiAKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0NvcmVNZWRpYVV0aWxpdGllcy5tbSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzgzYTM4MDU1NzUyZWEzMWM5MWQ0ZDQ5Y2UzY2YwNDRkYmE2ZGQ0ZgotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Db3Jl
TWVkaWFVdGlsaXRpZXMubW0KQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEFWRk9VTkRBVElPTikKKworI2luY2x1ZGUgPHBhbC9hdmZv
dW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0
QVBJIHsKKworVEVTVChQQUwsIE1lZGlhVGltZSkKK3sKKyAgICBFWFBFQ1RfRVEoUEFMOjp0b01l
ZGlhVGltZShQQUw6OnRvQ01UaW1lKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkpLCBNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisj
ZW5kaWYK
</data>
<flag name="commit-queue"
          id="481390"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453891</attachid>
            <date>2022-03-04 20:18:35 -0800</date>
            <delta_ts>2022-03-04 21:42:26 -0800</delta_ts>
            <desc>Combined patch for EWS tests</desc>
            <filename>bug-237472-20220305151833.patch</filename>
            <type>text/plain</type>
            <size>175447</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQ5NjA5NzYyYjgwNTJk
ODdiMWUzNjBiNjVhNzhmMzYyZjk1YjM5YS4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDczCisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODE0OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmx5LWJ5IGZpeDogdXBkYXRlIGNhbGwgdG8gQVZPdXRw
dXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbgorICAgICAgICBub3cg
dGhhdCB0aGUgYWNjZXNzIG1hY3JvIGdvdCBmaXhlZC4KKworICAgICAgICBBUEkgVGVzdCBhZGRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1Mu
bW06CisgICAgICAgICgtW1dlYk1lZGlhU2Vzc2lvbkhlbHBlciBzdGFydE1vbml0b3JpbmdBaXJQ
bGF5Um91dGVzXSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpyb3V0ZURldGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpp
bnZhbGlkYXRlUGxheWJhY2tUYXJnZXRzKToKKyAgICAgICAgKC1bV2ViQVZSb3V0ZVBpY2tlclZp
ZXdIZWxwZXIgbm90aWZpY2F0aW9uSGFuZGxlcjpdKToKKworMjAyMi0wMi0yMyAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSB1c2UgU2hhcmVkQnVmZmVyIGludGVybmFsbHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3OAorICAgICAgICByZGFyOi8vODkzNDg3
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGEgcmVmYWN0b3IgdG8gYWxsb3cgU291cmNlQnVmZmVyUGFyc2VyIHRvIHJldHVybiBTaGFy
ZWRCdWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gQ01CbG9ja0J1ZmZlci4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gb2JzZXJ2YWJsZSBiZWhhdmlvdXJzLgorICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpyZWVu
cXVldWVNZWRpYUZvclRpbWUpOiBGbHktYnkgZml4OiB0eXBvLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZSk6IEZseS1ieSBmaXgsICBleGl0
IGVhcmx5CisgICAgICAgIGlmIGVuZCB0aW1lIGlzIGxvd2VyIHRoYW4gc3RhcnQgdGltZSB3aGlj
aCBjYW4gaGFwcGVuIGlmIHRoZSBkdXJhdGlvbiBpcworICAgICAgICBzbWFsbGVyIHRoYW4gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlYWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpkcmFp
blBlbmRpbmdTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVZQOEZy
YW1lSGVhZGVyKTogTWFrZSBtZXRob2RzIGNvbnN0LgorCisyMDIyLTAyLTIzICBKZWFuLVl2ZXMg
QXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29udmVy
dCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorICAgICAgICByZGFyOi8v
ODkzMzg0NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0Q29udGlndW91c0RhdGEgYW5kCisgICAg
ICAgIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tCdWZmZXIgbWV0aG9kcy4K
KworICAgICAgICBBUEkgdGVzdHMgYWRkZWQgZm9yIGdldENvbnRpZ3VvdXNEYXRhLgorICAgICAg
ICBjcmVhdGVDTUJsb2NrQnVmZmVyIHdpbGwgYmUgdXNlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
U2hhcmVkQnVmZmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGcmVlU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxv
Y2tCdWZmZXIgY29uc3QpOgorCiAyMDIyLTAzLTA0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVG9wIGxheWVycyBzaG91bGQgbm90IGJlIG1vdmVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1ZjhlYTk4YWQzMjZlNDQ4MWY1YjE0ZDMwZDMzOGQxZmQ1MDNjYTRmLi43Mzgz
ZmVlMDFhMzE4NzlmZmI0NjExZGI5NDk5NjYxM2E0Nzg5ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUg
cGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEw
OTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNuJ3Qgc29mdC1s
aW5rZWQuCisKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcz
CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NDczCisgICAgICAgIENNVGltZTogY29udmVyc2lvbiBkb2Vzbid0IHdv
cmsgd2l0aCBpbnZhbGlkIG51bWJlcgorCisgICAgICAgICogcGFsL2F2Zm91bmRhdGlvbi9NZWRp
YVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NNVGltZSk6CisgICAgICAg
ICogcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg6CisKKzIwMjItMDMtMDQgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkgY29udmVyc2lvbiB0byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlk
IHRpbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc0NzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTQ5MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGbHktYnkgZml4OiBtYWNybyBkZWZpbml0
aW9uIHRvIGFjY2VzcyBtZXRob2QKKyAgICAgICAgQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNl
c0RpZENoYW5nZU5vdGlmaWNhdGlvbiB3YXMgaW5jb3JyZWN0LgorCisgICAgICAgICogcGFsL2F2
Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NN
VGltZSk6IEVuc3VyZSB0aGF0IGlmIHRoZSBjb252ZXJ0ZWQgdGltZSB3YXMgaW52YWxpZC4gVGhl
CisgICAgICAgIGZsYWcgaXMgY2FycmllZCBhY2Nyb3NzLgorICAgICAgICAqIHBhbC9jb2NvYS9B
VkZvdW5kYXRpb25Tb2Z0TGluay5oOgorCiAyMDIyLTAzLTAyICBEYW4gR2xhc3RvbmJ1cnkgIDxk
amdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBHUFVEZXZpY2VEZXNj
cmlwdG9yLnJlcXVpcmVkTGltaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlYzVjYzI5MDRhZjQ3ZjM4Nzc2ZmMx
MmFhMTdhZjE5Yjk3MzRmOTYuLjM4NWFmZjY2NjJiMGRiYmIyMjkwMGI3NDk3MDhlMDQ5ZjJkNDA1
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVu
YXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8v
cHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisgICAgICAgIGRp
ZG4ndCBuZWVkIHRvIGluaGVyaXQgZnJvbSBNZWRpYVNhbXBsZUFWRk9iakMuIAorCiAyMDIyLTAz
LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWJXZWJS
VENDb2RlY3M6OnNldEVuY29kZVJhdGVzIHNob3VsZCBzZW5kIExpYldlYlJUQ0NvZGVjc1Byb3h5
OjpTZXRFbmNvZGVSYXRlcyBvbmx5IHdoZW4gdGhlIGVuY29kZXIgaXMgbGl2ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5jcHAKaW5kZXggMDY1OTg0MDY4OWU0YWJiNTIyMGU1YmRkODA1MjNkNzQwMmY0
YWNlMi4uNjVjYWMzNDE5NTE0MDRmY2JkOGYyOWYwZjAyMWM3ZmM0ZDc5NjNlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRp
bWVBVkZvdW5kYXRpb24uY3BwCkBAIC02NSw2ICs2NSw4IEBAIENNVGltZSB0b0NNVGltZShjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIGlmIChtZWRpYVRpbWUuaXNWYWxpZCgpKQog
ICAgICAgICB0aW1lLmZsYWdzIHw9IGtDTVRpbWVGbGFnc19WYWxpZDsKKyAgICBlbHNlCisgICAg
ICAgIHRpbWUuZmxhZ3MgJj0gfmtDTVRpbWVGbGFnc19WYWxpZDsKICAgICBpZiAobWVkaWFUaW1l
Lmhhc0JlZW5Sb3VuZGVkKCkpCiAgICAgICAgIHRpbWUuZmxhZ3MgfD0ga0NNVGltZUZsYWdzX0hh
c0JlZW5Sb3VuZGVkOwogICAgIGlmIChtZWRpYVRpbWUuaXNQb3NpdGl2ZUluZmluaXRlKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCmluZGV4
IDg3YjU2MjA3ZTg0ZGYzZjQ5OTliMzZmNTVmMmRmNmY4Yzk5ZDU3NmIuLmQ3NGI4ZDViNmMzMzg1
ZjNkODNjOTNkZjIzMTBmN2NkYTJiMjY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJh
c2VSZW1vdmVUaW1lckQKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JU
KFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZU5leHRGaXJl
VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2Vf
dCB0aW1lclNvdXJjZSwgQ01UaW1lIGZpcmVUaW1lLCB1aW50MzJfdCBmbGFncyksICh0aW1lYmFz
ZSwgdGltZXJTb3VyY2UsIGZpcmVUaW1lLCBmbGFncyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFz
ZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSwgT1NTdGF0dXMsIChDTVRp
bWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2VfdCB0aW1lclNvdXJjZSksICh0aW1l
YmFzZSwgdGltZXJTb3VyY2UpLCBQQUxfRVhQT1JUKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9T
T1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSwgUEFMX0VYUE9SVCkKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
U09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25DcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjVHlwZSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIENGRGljdGlv
bmFyeVJlZiBleHRlbnNpb25zLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERl
c2NyaXB0aW9uT3V0KSwgKGFsbG9jYXRvciwgY29kZWNUeXBlLCB3aWR0aCwgaGVpZ2h0LCBleHRl
bnNpb25zLCBmb3JtYXREZXNjcmlwdGlvbk91dCksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCBDVkltYWdlQnVmZmVyUmVmIGltYWdlQnVmZmVyLCBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYqIG91dERlc2MpLCAoYWxsb2NhdG9yLCBpbWFnZUJ1ZmZlciwgb3V0RGVz
YyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9S
VChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywg
Q01WaWRlb0RpbWVuc2lvbnMsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNj
KSwgKHZpZGVvRGVzYyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0
UHJlc2VudGF0aW9uRGltZW5zaW9ucywgQ0dTaXplLCAoQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIHZpZGVvRGVzYywgQm9vbGVhbiB1c2VQaXhlbEFzcGVjdFJhdGlvLCBCb29sZWFuIHVzZUNs
ZWFuQXBlcnR1cmUpLCAodmlkZW9EZXNjLCB1c2VQaXhlbEFzcGVjdFJhdGlvLCB1c2VDbGVhbkFw
ZXJ0dXJlKSwgUEFMX0VYUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1l
ZGlhU29mdExpbmsuaAppbmRleCA1NzBhNmE5ODUzYzQ0ODE2OGI5OTAyMjA0MjMwMDk2ZGZlOGZl
YjAxLi4zM2NhMWIyNmYzZDM3ZTU5MjVhMjViNmFjZmJkMTU4YTQzMmU3YWIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCkBAIC0yNjMsNiArMjYz
LDggQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGlt
ZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlVG8KICNkZWZpbmUgQ01UaW1lYmFzZVNldFRpbWVy
RGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSBzb2Z0TGlua19Db3JlTWVkaWFfQ01UaW1l
YmFzZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseQogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSkKICNkZWZpbmUgQ01UaW1lQ29weUFzRGljdGlvbmFyeSBzb2Z0
TGlua19Db3JlTWVkaWFfQ01UaW1lQ29weUFzRGljdGlvbmFyeQorU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUg
Y29kZWNUeXBlLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVm
IGV4dGVuc2lvbnMsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRp
b25PdXQpLCAoYWxsb2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMs
IGZvcm1hdERlc2NyaXB0aW9uT3V0KSkKKyNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
Q3JlYXRlIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXRE
ZXNjKSkKICNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZm
ZXIgc29mdExpbmtfQ29yZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywgQ01WaWRlb0RpbWVuc2lvbnMs
IChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjKSwgKHZpZGVvRGVzYykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRM
aW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
LmgKaW5kZXggNWJkNTEyZjE1YmY4MDUzNzdjZjkxM2FiZjY5ZDAwY2M5ODc1NzdkYy4uMjVkNzU1
ZjUxNTFjYThlNWNjOTBjMzU4M2MyZWRlNGMzZGEzMWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaApAQCAtMzM4LDExICsz
MzgsMTIgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25TZXRBdXRob3JpemVkVG8KIAogI2lmICFQTEFURk9STShXQVRDSE9T
KQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24sIEFWUm91
dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5T
U3RyaW5nICopCi0jZGVmaW5lIEFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWRE
aWRDaGFuZ2VOb3RpZmljYXRpb24gUEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rv
ck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKQorI2RlZmluZSBB
VlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IGdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERp
ZENoYW5nZU5vdGlmaWNhdGlvbigpCiAjZW5kaWYgLy8gSEFWRShXQVRDSE9TKQogCiAjaWYgSEFW
RShBVlJPVVRFUElDS0VSVklFVykKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFBBTCwg
QVZGb3VuZGF0aW9uLCBBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZp
Y2F0aW9uLCBOU05vdGlmaWNhdGlvbk5hbWUpCisjZGVmaW5lIEFWT3V0cHV0Q29udGV4dE91dHB1
dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENv
bnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKICNlbmRpZiAvLyBIQVZF
KEFWUk9VVEVQSUNLRVJWSUVXKQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDk4YjAzNTc5MWE2ZWJiMGQ5ZjE1NzFhNTdhNDJlY2Q1ZjE1NWNmYjku
LjVkZWU3NTQwNTM1NzlmNTViNTVmMmZlNGFkMGRkMGE2OWRlYmZkNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zMTIsNiArMzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRmxvYXRSZWN0Q29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLmNwcApAQCAtNjQ5LDYgKzY1MCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKIAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhYTQ0ZjVmNTMxNjdi
OWJjMGYxNDIzZjI3YmZjMjRkNzE3ZWJhY2ZhLi5mOWUwYWJhZjRiOTIyYjg5MzcyZjliYTk3MjU0
MDlmYmM3YjdmODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM4MSw2ICszODEsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0g
QG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Db2xvckNvY29hLm1tCiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWEyMjdkNTk4ZTQyOWQ4NTViYjNkZWVkYTli
MWQ0NzI4MGQ2MjQzYi4uMTgxOTc0NDllZWQ2NDkzNzlmZjFmNDI3MTY4ZGFiNWRmODdkOWZkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU3OSw2ICsxNTc5LDggQEAKIAkJNTE0Qzc2N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjY2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmggKi87IH07CiAJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdGMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTE1MEI1REQyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQjVE
QzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTUwQjVERjI3Q0RGNDk5MDA0RkM4MUUgLyog
Q01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi87IH07CiAJ
CTUxNTFGMDdFMjYxNTQzNUEwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTFGMDdCMjYxNTM2
M0YwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg5MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQ
cm92aWRlci5oICovOyB9OwogCQk1MTVCRTE5MjFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NzcsNiArOTc3OSw4IEBA
CiAJCTUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNTBCNURDMjdDREYyRTAwMDRGQzgxRSAvKiBD
TVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDTVV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVVuaXF1ZUlk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODgxRDU0RjVG
NjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTI4OSw2ICsyOTI5
Myw4IEBACiAJCQkJN0JDRDQyREMyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29j
b2EuaCAqLywKIAkJCQlDREY5OTUwMTI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFja1ByaXZh
dGVXZWJNLmNwcCAqLywKIAkJCQlDREY5OTUwMDI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmggKi8sCisJCQkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRp
bGl0aWVzLmggKi8sCisJCQkJNTE1MEI1REUyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVz
Lm1tICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi8s
CiAJCQkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EubW0gKi8sCiAJCQkJ
QjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENvY29hLm1tICovLApAQCAtMzM4
OTcsNiArMzM5MDMsNyBAQAogCQkJCUY0RDA3NTU5MjM0RDgyMzMwMDg4MUU3MyAvKiBDbGlwYm9h
cmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MDM3MTYy
MUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJE
MTMxNEZBMDlENTAwNzQ1N0FFIC8qIENsb3NlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NTBCNUREMjdDREYyRTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzBDMDU0Q0IxMTE4QzhFNDAwQ0UyNjM2IC8qIENvZGVHZW5lcmF0b3IucG0gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjVERjBFODFCOUFCMDBCMjU5NjUgLyogQ29sbGFwc2VkQm9yZGVyVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MjVBNDlBMTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xs
ZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODgwNCw2ICszODgxMSw3IEBA
CiAJCQkJQ0RGNEI3MTUxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREI3MDQ1QjFGNzQ2NUExMDAzOTIzREYgLyogQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMjI0MjgxRjc1Njk2NjAwNUYwNzdCIC8qIENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1MEI1
REYyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlckNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQ
VU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2Q0ExMUQyMEU1MDAwNEMyMDFD
IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAppbmRleCAwYTZmMjhhMjAxMzEzNTUzNThiNmU3ZjljZGMxMjZhNGQ1
YzBlNmFjLi43MTQ0MmE3YjNlNzkxNmIyYTI0N2ZkZTYyNzliNzRkYTBjNjBmYzU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI2LDYgKzI2LDkgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgpAQCAtNDAsOCArNDMs
MTAgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyOwogY2xhc3MgTW9ja1NhbXBsZUJveDsKIGNsYXNzIFByb2Nlc3NJ
ZGVudGl0eTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsK
ICAgICBlbnVtIFR5cGUgewpAQCAtMTE5LDcgKzEyNCwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNBbHBoYTsgfQogICAgIGJvb2wg
aGFzU3luY0luZm8oKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgSGFzU3luY0luZm87IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBvdXQu
cHJpbnQoIntQVFMoIiwgcHJlc2VudGF0aW9uVGltZSgpLCAiKSwgRFRTKCIsIGRlY29kZVRpbWUo
KSwgIiksIGR1cmF0aW9uKCIsIGR1cmF0aW9uKCksICIpLCBmbGFncygiLCAoaW50KWZsYWdzKCks
ICIpLCBwcmVzZW50YXRpb25TaXplKCIsIHByZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCAieCIs
IHByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSwgIil9Iik7CisgICAgfQorCiAgICAgU3RyaW5n
IHRvSlNPTlN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBhdXRvIG9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CkBAIC0xMzQsOCArMTQzLDEyOCBAQCBwdWJsaWM6CiAgICAgfQog
fTsKIAorc3RydWN0IEF1ZGlvSW5mbzsKK3N0cnVjdCBWaWRlb0luZm87CisKK3N0cnVjdCBUcmFj
a0luZm8gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VHJhY2tJbmZvPiB7CisgICAgZW51
bSBjbGFzcyBUcmFja1R5cGUgeyBVbmtub3duLCBBdWRpbywgVmlkZW8gfTsKKworICAgIGJvb2wg
aXNBdWRpbygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUcmFja1R5cGU6OkF1ZGlvOyB9Cisg
ICAgYm9vbCBpc1ZpZGVvKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6Vmlk
ZW87IH0KKworICAgIFRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhY2tJbmZvJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpIHx8IGNvZGVjTmFtZSAhPSBvdGhl
ci5jb2RlY05hbWUgfHwgdHJhY2tJRCAhPSBvdGhlci50cmFja0lEKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZXF1YWxUbyhvdGhlcik7CisgICAgfQorICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsgfQorCisgICAgRm91ckNDIGNvZGVjTmFtZTsKKyAgICB1aW50NjRfdCB0
cmFja0lEIHsgMCB9OworCisgICAgdmlydHVhbCB+VHJhY2tJbmZvKCkgPSBkZWZhdWx0OworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZvJiBvdGhl
cikgY29uc3QgPSAwOworICAgIFRyYWNrSW5mbyhUcmFja1R5cGUgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUodHlwZSkgeyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVHJhY2tUeXBlIG1fdHlwZSB7
IFRyYWNrVHlwZTo6VW5rbm93biB9OworfTsKKworc3RydWN0IFZpZGVvSW5mbyA6IHB1YmxpYyBU
cmFja0luZm8geworICAgIHN0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IFZpZGVvSW5mbygpKTsgfQorCisgICAgRmxvYXRTaXplIHNpemU7CisgICAg
Ly8gU2l6ZSBpbiBwaXhlbHMgYXQgd2hpY2ggdGhlIHZpZGVvIGlzIHJlbmRlcmVkLiBUaGlzIGlz
IGFmdGVyIGl0IGhhcworICAgIC8vIGJlZW4gc2NhbGVkIGJ5IGl0cyBhc3BlY3QgcmF0aW8uCisg
ICAgRmxvYXRTaXplIGRpc3BsYXlTaXplOworICAgIHVpbnQ4X3QgYml0RGVwdGggeyA4IH07Cisg
ICAgUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICBNZWRpYVNhbXBsZTo6
VmlkZW9Sb3RhdGlvbiByb3RhdGlvbiB7IE1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uOjpOb25l
IH07CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhdG9tRGF0YTsKKworcHJpdmF0ZToKKyAg
ICBWaWRlb0luZm8oKQorICAgICAgICA6IFRyYWNrSW5mbyhUcmFja1R5cGU6OlZpZGVvKSB7IH0K
KyAgICBib29sIGVxdWFsVG8oY29uc3QgVHJhY2tJbmZvJiBvdGhlclZpZGVvSW5mbykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8Y29uc3QgVmlkZW9J
bmZvPihvdGhlclZpZGVvSW5mbyk7CisgICAgICAgIHJldHVybiBzaXplID09IG90aGVyLnNpemUg
JiYgZGlzcGxheVNpemUgPT0gb3RoZXIuZGlzcGxheVNpemUgJiYgYml0RGVwdGggPT0gb3RoZXIu
Yml0RGVwdGggJiYgY29sb3JTcGFjZSA9PSBvdGhlci5jb2xvclNwYWNlICYmIHJvdGF0aW9uID09
IG90aGVyLnJvdGF0aW9uICYmICgoIWF0b21EYXRhICYmICFvdGhlci5hdG9tRGF0YSkgfHwgKGF0
b21EYXRhICYmIG90aGVyLmF0b21EYXRhICYmICphdG9tRGF0YSA9PSAqb3RoZXIuYXRvbURhdGEp
KTsKKyAgICB9Cit9OworCitzdHJ1Y3QgQXVkaW9JbmZvIDogcHVibGljIFRyYWNrSW5mbyB7Cisg
ICAgc3RhdGljIFJlZjxBdWRpb0luZm8+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
QXVkaW9JbmZvKCkpOyB9CisKKyAgICB1aW50MzJfdCByYXRlIHsgMCB9OworICAgIHVpbnQzMl90
IGNoYW5uZWxzIHsgMCB9OworICAgIHVpbnQzMl90IGZyYW1lc1BlclBhY2tldCB7IDAgfTsKKyAg
ICB1aW50MzJfdCBiaXREZXB0aCB7IDE2IH07CisgICAgaW50OF90IHByb2ZpbGUgeyAwIH07Cisg
ICAgaW50OF90IGV4dGVuZGVkUHJvZmlsZSB7IDAgfTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGNvb2tpZURhdGE7CisKK3ByaXZhdGU6CisgICAgQXVkaW9JbmZvKCkKKyAgICAgICAgOiBU
cmFja0luZm8oVHJhY2tUeXBlOjpBdWRpbykgeyB9CisgICAgYm9vbCBlcXVhbFRvKGNvbnN0IFRy
YWNrSW5mbyYgb3RoZXJBdWRpb0luZm8pIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRv
JiBvdGhlciA9IGRvd25jYXN0PGNvbnN0IEF1ZGlvSW5mbz4ob3RoZXJBdWRpb0luZm8pOworICAg
ICAgICByZXR1cm4gcmF0ZSA9PSBvdGhlci5yYXRlICYmIGNoYW5uZWxzID09IG90aGVyLmNoYW5u
ZWxzICYmIGJpdERlcHRoID09IG90aGVyLmJpdERlcHRoICYmIGZyYW1lc1BlclBhY2tldCA9PSBv
dGhlci5mcmFtZXNQZXJQYWNrZXQgJiYgcHJvZmlsZSA9PSBvdGhlci5wcm9maWxlICYmIGV4dGVu
ZGVkUHJvZmlsZSA9PSBvdGhlci5leHRlbmRlZFByb2ZpbGUgJiYgKCghY29va2llRGF0YSAmJiAh
b3RoZXIuY29va2llRGF0YSkgfHwgKGNvb2tpZURhdGEgJiYgb3RoZXIuY29va2llRGF0YSAmJiAq
Y29va2llRGF0YSA9PSAqb3RoZXIuY29va2llRGF0YSkpOworICAgIH0KK307CisKK2NsYXNzIE1l
ZGlhU2FtcGxlc0Jsb2NrIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTWVkaWFTYW1wbGVJdGVtIHsK
KyAgICAgICAgTWVkaWFUaW1lIHByZXNlbnRhdGlvblRpbWU7CisgICAgICAgIE1lZGlhVGltZSBk
ZWNvZGVUaW1lOworICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb247CisgICAgICAgIHN0ZDo6dmFy
aWFudDxNZWRpYVNhbXBsZTo6Qnl0ZVJhbmdlLCBSZWY8Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4+IGRhdGE7CisgICAgICAgIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFncyBmbGFnczsKKyAg
ICB9OworCisgICAgdm9pZCBzZXRJbmZvKFJlZlB0cjxjb25zdCBUcmFja0luZm8+JiYgaW5mbykg
eyBtX2luZm8gPSBXVEZNb3ZlKGluZm8pOyB9CisgICAgY29uc3QgVHJhY2tJbmZvKiBpbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmZvLmdldCgpOyB9CisgICAgYm9vbCBpc1ZpZGVvKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZvICYmIG1faW5mby0+aXNWaWRlbygpOyB9CisgICAgYm9vbCBpc0F1ZGlv
KCkgY29uc3QgeyByZXR1cm4gbV9pbmZvICYmIG1faW5mby0+aXNBdWRpbygpOyB9CisgICAgVHJh
Y2tJbmZvOjpUcmFja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mbyA/IG1faW5mby0+
dHlwZSgpIDogVHJhY2tJbmZvOjpUcmFja1R5cGU6OlVua25vd247IH0KKyAgICB2b2lkIGFwcGVu
ZChNZWRpYVNhbXBsZUl0ZW0mJiBpdGVtKSB7IG1fc2FtcGxlcy5hcHBlbmQoV1RGTW92ZShpdGVt
KSk7IH0KKyAgICB2b2lkIGFwcGVuZChNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrKSB7IG1fc2Ft
cGxlcy5hcHBlbmRWZWN0b3Ioc3RkOjpleGNoYW5nZShibG9jay5tX3NhbXBsZXMsIHsgfSkpOyB9
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuc2l6ZSgpOyB9Owor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5pc0VtcHR5KCk7IH0K
KyAgICB2b2lkIGNsZWFyKCkgeyBtX3NhbXBsZXMuY2xlYXIoKTsgfQorICAgIHVzaW5nIFNhbXBs
ZXNWZWN0b3IgPSBWZWN0b3I8TWVkaWFTYW1wbGVJdGVtPjsKKyAgICBTYW1wbGVzVmVjdG9yIHRh
a2VTYW1wbGVzKCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX3NhbXBsZXMsIHsgfSk7IH0KKwor
ICAgIGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlc1tpbmRleF07IH0KKyAgICBjb25zdCBNZWRpYVNhbXBsZUl0ZW0m
IGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmZpcnN0KCk7IH0KKyAgICBjb25zdCBN
ZWRpYVNhbXBsZUl0ZW0mIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMubGFzdCgpOyB9
CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZXMuYmVnaW4oKTsgfQorICAgIFNhbXBsZXNWZWN0b3I6OmNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5lbmQoKTsgfQorCitwcml2YXRlOgorICAg
IFJlZlB0cjxjb25zdCBUcmFja0luZm8+IG1faW5mbzsKKyAgICBTYW1wbGVzVmVjdG9yIG1fc2Ft
cGxlczsKK307CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpWaWRlb0luZm8pCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OlRyYWNrSW5mbyYgaW5mbykgeyByZXR1cm4gaW5mby5pc1ZpZGVvKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpBdWRpb0luZm8pCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OlRyYWNrSW5mbyYgaW5mbykgeyByZXR1cm4gaW5mby5pc0F1ZGlvKCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6TWVkaWFTYW1wbGU6OlZpZGVvUm90YXRpb24+IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCmluZGV4IGY4N2I2YTRmNjNi
MjZhMjE4ODIwNmU5MzhhYTU4NTc5N2FiMzk1ZTQuLjFlNjFkMGI2ZmFiNzUxMDRiN2ZhMDAyYThi
ZDA0NTZjYjQ2ZjhlNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cApAQCAtMTUyLDYgKzE1MiwyNSBAQCBTaGFyZWRCdWZmZXJEYXRhVmlldyBGcmFnbWVudGVkU2hh
cmVkQnVmZmVyOjpnZXRTb21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0CiAgICAgcmV0dXJu
IHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIHBvc2l0aW9uIC0gZWxlbWVudC0+YmVnaW5Q
b3NpdGlvbiB9OwogfQogCitSZWY8U2hhcmVkQnVmZmVyPiBGcmFnbWVudGVkU2hhcmVkQnVmZmVy
OjpnZXRDb250aWd1b3VzRGF0YShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpIGNvbnN0
Cit7CisgICAgaWYgKHBvc2l0aW9uID49IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7CisgICAgbGVuZ3RoID0gc3RkOjptaW4obV9zaXplIC0gcG9zaXRpb24s
IGxlbmd0aCk7CisgICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogZWxlbWVudCA9IGdl
dFNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7CisgICAgc2l6ZV90IG9mZnNldEluU2VnbWVu
dCA9IHBvc2l0aW9uIC0gZWxlbWVudC0+YmVnaW5Qb3NpdGlvbjsKKyAgICBpZiAoZWxlbWVudC0+
c2VnbWVudC0+c2l6ZSgpIC0gb2Zmc2V0SW5TZWdtZW50ID49IGxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIG9m
ZnNldEluU2VnbWVudCwgbGVuZ3RoIH0uY3JlYXRlU2hhcmVkQnVmZmVyKCk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGNvbWJpbmVkRGF0YTsKKyAgICBjb21iaW5lZERhdGEucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGgpOworICAgIGNvbWJpbmVkRGF0YS5hcHBlbmQoZWxlbWVudC0+c2VnbWVu
dC0+ZGF0YSgpICsgb2Zmc2V0SW5TZWdtZW50LCBlbGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBv
ZmZzZXRJblNlZ21lbnQpOworICAgIGZvciAoKytlbGVtZW50OyBjb21iaW5lZERhdGEuc2l6ZSgp
IDwgbGVuZ3RoICYmIGVsZW1lbnQgIT0gbV9zZWdtZW50cy5lbmQoKTsgZWxlbWVudCsrKSB7Cisg
ICAgICAgIGF1dG8gY2FuQ29weSA9IHN0ZDo6bWluKGxlbmd0aCAtIGNvbWJpbmVkRGF0YS5zaXpl
KCksIGVsZW1lbnQtPnNlZ21lbnQtPnNpemUoKSk7CisgICAgICAgIGNvbWJpbmVkRGF0YS5hcHBl
bmQoZWxlbWVudC0+c2VnbWVudC0+ZGF0YSgpLCBjYW5Db3B5KTsKKyAgICB9CisgICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoY29tYmluZWREYXRhKSk7Cit9CisKIGNvbnN0
IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50VmVjdG9yRW50cnkqIEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXI6OmdldFNlZ21lbnRGb3JQb3NpdGlvbihzaXplX3QgcG9zaXRpb24pIGNv
bnN0CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQocG9zaXRpb24gPCBtX3NpemUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCBjYWVmM2YyNjIwMDMzZGQ4Y2ZmMTU2MjNm
MjNjNmI2YzliNTM0YjM3Li4zYmY4YTZkMTdlMjJmYTJlNzk0YmY0ZmY2ODE2YTU4MmU5MGY5OTY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtNTQsNiArNTQsNyBA
QCB0eXBlZGVmIHN0cnVjdCBfR0J5dGVzIEdCeXRlczsKICNpZiBVU0UoRk9VTkRBVElPTikKIE9C
SkNfQ0xBU1MgTlNBcnJheTsKIE9CSkNfQ0xBU1MgTlNEYXRhOwordHlwZWRlZiBzdHJ1Y3QgT3Bh
cXVlQ01CbG9ja0J1ZmZlciogQ01CbG9ja0J1ZmZlclJlZjsKICNlbmRpZgogCiBuYW1lc3BhY2Ug
V1RGIHsKQEAgLTE0OSw2ICsxNTAsNyBAQCBwdWJsaWM6CiAjaWYgVVNFKEZPVU5EQVRJT04pCiAg
ICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXJyYXk+IGNyZWF0ZU5TRGF0YUFycmF5KCkg
Y29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxGcmFnbWVudGVkU2hhcmVkQnVm
ZmVyPiBjcmVhdGUoTlNEYXRhKik7CisgICAgV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENNQmxv
Y2tCdWZmZXJSZWY+IGNyZWF0ZUNNQmxvY2tCdWZmZXIoKSBjb25zdDsKICNlbmRpZgogI2lmIFVT
RShDRikKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZm
ZXI+IGNyZWF0ZShDRkRhdGFSZWYpOwpAQCAtMTk0LDYgKzE5Niw3IEBAIHB1YmxpYzoKIAogICAg
IC8vIGJlZ2luIGFuZCBlbmQgdGFrZSBPKDEpIHRpbWUsIHRoaXMgdGFrZXMgTyhsb2coTikpIHRp
bWUuCiAgICAgV0VCQ09SRV9FWFBPUlQgU2hhcmVkQnVmZmVyRGF0YVZpZXcgZ2V0U29tZURhdGEo
c2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2hhcmVkQnVm
ZmVyPiBnZXRDb250aWd1b3VzRGF0YShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpIGNv
bnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvSGV4U3RyaW5nKCkgY29uc3Q7CiAK
QEAgLTI0Niw3ICsyNDksNyBAQCBwcml2YXRlOgogCiAgICAgLy8gQ29tYmluZXMgYWxsIHRoZSBz
ZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVyIGNsZWFy
aW5nIHRoZSBGcmFnbWVudGVkU2hhcmVkQnVmZmVyLgogICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rv
cjx1aW50OF90PiB0YWtlRGF0YSgpOwotICAgIGNvbnN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkq
IGdldFNlZ21lbnRGb3JQb3NpdGlvbihzaXplX3QgcG9zaXRpdGlvbikgY29uc3Q7CisgICAgY29u
c3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBw
b3NpdGlvbikgY29uc3Q7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgaW50ZXJuYWxs
eUNvbnNpc3RlbnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcAppbmRleCBiNzAzY2Zl
Y2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4ZjBkZmYwYjM0YzY4
YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwCkBAIC0yMTksNyAr
MjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPiBBdWRpb0Zp
bGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXItPmFwcGVuZERhdGEo
V1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAgICBwYXJzZXIt
PmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlv
RmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7IFdURk1vdmUoYnVm
ZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlvbiksIFdURk1vdmUo
c2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uSGVscGVySU9TLm1tCmluZGV4IGE0MGVjYmI4YjgyZTg5
YTRkZGRjNDExMjY0YWI3Y2NmYzk2MGY5ZTIuLjlhOGU5MWZlZTliMzMzYmE1OWE3ZGY3NjljZDI3
MDJjOGMzNzRhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9NZWRpYVNlc3Npb25IZWxwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vaW9zL01lZGlhU2Vzc2lvbkhlbHBlcklPUy5tbQpAQCAtNDYwLDcgKzQ2MCw3IEBAIC0g
KHZvaWQpc3RhcnRNb25pdG9yaW5nQWlyUGxheVJvdXRlcwogICAgICAgICAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TCiAgICAgICAgICAgICBwcm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRl
Y3RvciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NBVlJvdXRlRGV0ZWN0b3JJbnN0YW5jZSgpIGluaXRd
KTsKICAgICAgICAgICAgIHByb3RlY3RlZFNlbGYtPl9yb3V0ZURldGVjdG9yLmdldCgpLnJvdXRl
RGV0ZWN0aW9uRW5hYmxlZCA9IHByb3RlY3RlZFNlbGYtPl9tb25pdG9yaW5nQWlyUGxheVJvdXRl
czsKLSAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRk
T2JzZXJ2ZXI6cHJvdGVjdGVkU2VsZi5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iod2lyZWxlc3NS
b3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2U6KSBuYW1lOkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91
dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnByb3RlY3RlZFNlbGYtPl9y
b3V0ZURldGVjdG9yLmdldCgpXTsKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6cHJvdGVjdGVkU2VsZi5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3Iod2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2U6KSBuYW1lOlBBTDo6QVZS
b3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbiBv
YmplY3Q6cHJvdGVjdGVkU2VsZi0+X3JvdXRlRGV0ZWN0b3IuZ2V0KCldOwogCiAgICAgICAgICAg
ICBwcm90ZWN0ZWRTZWxmLT5fY2FsbGJhY2stPmV4dGVybmFsT3V0cHV0RGV2aWNlQXZhaWxhYmxl
RGlkQ2hhbmdlKCk7CiAgICAgICAgICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCmlu
ZGV4IDY2NDI3ZGZiZjA1ZmQ3MjZhZmQ5OWEzMjljNmFjMTFhYzllZDdhNTUuLjE5MDhiNDZhZmI1
ZDYxMDQxMmZhZWNkYzEyNDIxNjRlZmE2MTk0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1NoYXJlZEJ1ZmZlckNvY29hLm1tCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW1wb3J0ICJXZWJDb3JlSklUT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2ViQ29yZU9iakNFeHRy
YXMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKyNp
bXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgogI2ltcG9ydCA8c3RyaW5nLmg+CiAj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgogI2ltcG9ydCA8d3RmL2NvY29hL1R5cGVDYXN0c0Nv
Y29hLmg+CkBAIC05OSw2ICsxMDAsNTUgQEAgdm9pZCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjph
cHBlbmQoTlNEYXRhICpkYXRhKQogICAgIHJldHVybiBhcHBlbmQoYnJpZGdlX2Nhc3QoZGF0YSkp
OwogfQogCitzdGF0aWMgdm9pZCBGcmVlRGF0YVNlZ21lbnQodm9pZCogcmVmY29uLCB2b2lkKiwg
c2l6ZV90KQoreworICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRGF0
YVNlZ21lbnQqPihyZWZjb24pOworICAgIGJ1ZmZlci0+ZGVyZWYoKTsKK30KKworUmV0YWluUHRy
PENNQmxvY2tCdWZmZXJSZWY+IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tC
dWZmZXIoKSBjb25zdAoreworICAgIGF1dG8gc2VnbWVudFRvQ01CbG9ja0J1ZmZlciA9IFtdIChj
b25zdCBEYXRhU2VnbWVudCYgc2VnbWVudCkgLT4gUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+
IHsKKyAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgZG9jdW1l
bnRhdGlvbjoKKyAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJjaGl0ZWN0dXJlcywg
dGhpcyBzdHJ1Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2ludGVycy4KKyAgICAg
ICAgLy8gVG8gYXZvaWQgbGluay10aW1lIGlzc3VlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBj
bGllbnRzIGZpbGwgQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlJ3MgZnVuY3Rpb24gcG9p
bnRlciBmaWVsZHMKKyAgICAgICAgLy8gYnkgdXNpbmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBy
YXRoZXIgdGhhbiBkZWNsYXJpbmcgdGhlbSBhcyBnbG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCisg
ICAgICAgIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSBhbGxvY2F0b3I7CisgICAgICAg
IGFsbG9jYXRvci52ZXJzaW9uID0gMDsKKyAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxvY2sg
PSBudWxscHRyOworICAgICAgICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZURhdGFTZWdtZW50
OworICAgICAgICBhbGxvY2F0b3IucmVmQ29uID0gY29uc3RfY2FzdDxEYXRhU2VnbWVudCo+KCZz
ZWdtZW50KTsKKyAgICAgICAgc2VnbWVudC5yZWYoKTsKKyAgICAgICAgQ01CbG9ja0J1ZmZlclJl
ZiBwYXJ0aWFsQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKFBBTDo6Q01CbG9ja0J1ZmZl
ckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxscHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc2VnbWVudC5kYXRhKCkpKSwgc2VnbWVudC5zaXplKCksIG51bGxwdHIs
ICZhbGxvY2F0b3IsIDAsIHNlZ21lbnQuc2l6ZSgpLCAwLCAmcGFydGlhbEJ1ZmZlcikgIT0ga0NN
QmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gYWRvcHRDRihwYXJ0aWFsQnVmZmVyKTsKKyAgICB9OworCisgICAgaWYgKGhhc09uZVNl
Z21lbnQoKSAmJiAhaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gc2VnbWVudFRvQ01CbG9ja0J1
ZmZlcihtX3NlZ21lbnRzWzBdLnNlZ21lbnQpOworCisgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdC
bG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJD
cmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpc0VtcHR5KCkgPyAwIDogbV9zZWdtZW50
cy5zaXplKCksIDAsICZyYXdCbG9ja0J1ZmZlcik7CisgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1
ZmZlck5vRXJyIHx8ICFyYXdCbG9ja0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgYXV0byBibG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOworCisgICAgaWYg
KGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGJsb2NrQnVmZmVyOworCisgICAgZm9yIChhdXRv
JiBzZWdtZW50IDogbV9zZWdtZW50cykgeworICAgICAgICBpZiAoIXNlZ21lbnQuc2VnbWVudC0+
c2l6ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gcGFydGlhbEJ1ZmZl
ciA9IHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIoc2VnbWVudC5zZWdtZW50KTsKKyAgICAgICAgaWYg
KCFwYXJ0aWFsQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGlm
IChQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UocmF3QmxvY2tCdWZmZXIs
IHBhcnRpYWxCdWZmZXIuZ2V0KCksIDAsIDAsIDApICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGJsb2NrQnVmZmVy
OworfQorCiBSZXRhaW5QdHI8TlNEYXRhPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZU5TRGF0YSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGJyaWRnZV9jYXN0KGNyZWF0ZUNGRGF0YSgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzLmgKaW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBl
MzM5NDQ1Yy4uYWZjMzEyNTRlYjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0
NzBiZywKICAgICBTbXB0ZTE3MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBG
aWxtLAorICAgIEJ0MjAyMCwKKyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAg
IFNtcHRlRWc0MzIsCisgICAgSmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4g
ewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQK
ICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5
MDczNWM4OGQ3ZmU1MWYzNzc1NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkx
MWViMDA4Yjc1NmM4ZGVhNzc0ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzLmgKQEAgLTM0LDYgKzM0LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50cyA6IHVpbnQ4X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21w
dGUxNzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIw
Tm9uY29uc3RhbnRMdW1pbmFuY2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAg
VW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1Miwx
MyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM+IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6UmdiLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5j
ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQy
MDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFl
NjJhYjI0NDYyODhhODQwZDRlYi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2Jj
MmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAg
LTMzLDYgKzMzLDIwIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYx
OTY2MjEsCisgICAgR2FtbWEyMmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0
MG0sCisgICAgTGluZWFyLAorICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQs
CisgICAgQnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAg
QnQyMDIwXzEyYml0LAorICAgIFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFy
aWJTdGRCNjdIbGcsCisgICAgVW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKQEAgLTQ0LDcgKzU4LDIxIEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0s
Ci0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
SWVjNjE5NjYyMQorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkllYzYxOTY2MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0s
CisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
TGluZWFyLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkxvZywKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpMb2dTcXJ0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwK
KyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
dDIwMjBfMTBiaXQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQyMDIwXzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRC
NjdIbGcsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwNGNi
ZTRkMjdmMTkwYjdiMjdiOWNhN2U5OGE5YzQ3MTczZDJmODliLi5iZjQ3ZmNlYmI1NmUyZjlkZTU0
YTQyMGRlMmQyMTZhNDdlY2EyZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtMzk4LDcgKzM5OCw3
IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6cmVlbnF1ZXVlTWVkaWFGb3JUaW1lKFRyYWNr
QnVmZmVyJiB0cmFja0J1ZmZlciwgY29uc3QKICAgICAgICAgfHwgKGN1cnJlbnRTYW1wbGVQVFNJ
dGVyYXRvci0+Zmlyc3QgLSB0aW1lKSA+IHRpbWVGdWRnZUZhY3RvcigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBTZWFjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxl
LgorICAgIC8vIFNlYXJjaCBiYWNrd2FyZCBmb3IgdGhlIHByZXZpb3VzIHN5bmMgc2FtcGxlLgog
ICAgIERlY29kZU9yZGVyU2FtcGxlTWFwOjpLZXlUeXBlIGRlY29kZUtleShjdXJyZW50U2FtcGxl
UFRTSXRlcmF0b3ItPnNlY29uZC0+ZGVjb2RlVGltZSgpLCBjdXJyZW50U2FtcGxlUFRTSXRlcmF0
b3ItPnNlY29uZC0+cHJlc2VudGF0aW9uVGltZSgpKTsKICAgICBhdXRvIGN1cnJlbnRTYW1wbGVE
VFNJdGVyYXRvciA9IHRyYWNrQnVmZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5maW5kU2FtcGxl
V2l0aERlY29kZUtleShkZWNvZGVLZXkpOwogICAgIEFTU0VSVChjdXJyZW50U2FtcGxlRFRTSXRl
cmF0b3IgIT0gdHJhY2tCdWZmZXIuc2FtcGxlcy5kZWNvZGVPcmRlcigpLmVuZCgpKTsKQEAgLTEx
NzEsNiArMTE3MSw5IEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBs
ZShSZWY8TWVkaWFTYW1wbGU+JiYgb3JpZ2luYWxTYW1wbGUpCiAgICAgICAgICAgICAgICAgTWVk
aWFUaW1lIGVyYXNlQmVnaW5UaW1lID0gdHJhY2tCdWZmZXIuaGlnaGVzdFByZXNlbnRhdGlvblRp
bWVzdGFtcDsKICAgICAgICAgICAgICAgICBNZWRpYVRpbWUgZXJhc2VFbmRUaW1lID0gZnJhbWVF
bmRUaW1lc3RhbXAgLSBjb250aWd1b3VzRnJhbWVUb2xlcmFuY2U7CiAKKyAgICAgICAgICAgICAg
ICBpZiAoZXJhc2VFbmRUaW1lIDw9IGVyYXNlQmVnaW5UaW1lKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICAgICAgICAgIFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjpp
dGVyYXRvcl9yYW5nZSByYW5nZTsKICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdEJ1ZmZlcmVk
VGltZSAtIHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAgPCB0cmFja0J1
ZmZlci5sYXN0RnJhbWVEdXJhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUg
bmV3IGZyYW1lIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlcmVkIHJhbmdlcywgcGVyZm9ybSBh
IHNlcXVlbnRpYWwgc2NhbiBmcm9tIGVuZCAoTygxKSkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJvdXRlUGlja2VyVmll
d1RhcmdldFBpY2tlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyLm1tCmluZGV4IGRiODgy
NTExYjFhZGViNjFmNzE5OWViOTI1NGI4ODMyMmU4OWE0ZWQuLmEyMjg4NmU0OWE5YTRkMDk0MTY1
ZmMxNGM1YzIxNzYzN2Q1ZjIxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2Vy
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL0FWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyLm1tCkBAIC05MSw3ICs5MSw3IEBAIEFW
T3V0cHV0Q29udGV4dCAqIEFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpvdXRwdXRDb250
ZXh0SW50ZXJuYWwoYm9vbCB1c2VpCiAgICAgICAgICAgICBtX291dHB1dENvbnRleHQgPSBbUEFM
OjpnZXRBVk91dHB1dENvbnRleHRDbGFzcygpIG91dHB1dENvbnRleHRdOwogICAgICAgICBBU1NF
UlQobV9vdXRwdXRDb250ZXh0KTsKICAgICAgICAgaWYgKG1fb3V0cHV0Q29udGV4dCkKLSAgICAg
ICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iobm90aWZp
Y2F0aW9uSGFuZGxlcjopIG5hbWU6UEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4
dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24oKSBvYmplY3Q6bV9vdXRwdXRDb250
ZXh0LmdldCgpXTsKKyAgICAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gYWRkT2JzZXJ2ZXI6bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3Rv
cjpAc2VsZWN0b3Iobm90aWZpY2F0aW9uSGFuZGxlcjopIG5hbWU6UEFMOjpBVk91dHB1dENvbnRl
eHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX291dHB1dENvbnRl
eHQuZ2V0KCldOwogICAgIH0KIAogICAgIHJldHVybiBtX291dHB1dENvbnRleHQuZ2V0KCk7CkBA
IC0xMTEsNyArMTExLDcgQEAgQVZSb3V0ZURldGVjdG9yICpBVlJvdXRlUGlja2VyVmlld1Rhcmdl
dFBpY2tlcjo6cm91dGVEZXRlY3RvcigpCiB7CiAgICAgaWYgKCFtX3JvdXRlRGV0ZWN0b3IpIHsK
ICAgICAgICAgbV9yb3V0ZURldGVjdG9yID0gYWRvcHROUyhbUEFMOjphbGxvY0FWUm91dGVEZXRl
Y3Rvckluc3RhbmNlKCkgaW5pdF0pOwotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
c2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6Z2V0X0FW
Rm91bmRhdGlvbl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uKCkgb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CisgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9yb3V0ZVBp
Y2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3Iobm90aWZpY2F0aW9uSGFu
ZGxlcjopIG5hbWU6UEFMOjpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX3JvdXRlRGV0ZWN0b3IuZ2V0KCldOwogICAgICAg
ICBpZiAoW21fcm91dGVEZXRlY3RvciBtdWx0aXBsZVJvdXRlc0RldGVjdGVkXSkKICAgICAgICAg
ICAgIGF2YWlsYWJsZURldmljZXNEaWRDaGFuZ2UoKTsKICAgICB9CkBAIC0xNzAsMTMgKzE3MCwx
MyBAQCBBVk91dHB1dENvbnRleHQgKiBBVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0
cHV0Q29udGV4dCgpCiB2b2lkIEFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjppbnZhbGlk
YXRlUGxheWJhY2tUYXJnZXRzKCkKIHsKICAgICBpZiAobV9yb3V0ZURldGVjdG9yKSB7Ci0gICAg
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
bV9yb3V0ZVBpY2tlclZpZXdEZWxlZ2F0ZS5nZXQoKSBuYW1lOlBBTDo6Z2V0X0FWRm91bmRhdGlv
bl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0
aW9uKCkgb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CisgICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9yb3V0ZVBpY2tlclZp
ZXdEZWxlZ2F0ZS5nZXQoKSBuYW1lOlBBTDo6QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNE
ZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9yb3V0ZURldGVjdG9yLmdldCgp
XTsKICAgICAgICAgW21fcm91dGVEZXRlY3RvciBzZXRSb3V0ZURldGVjdGlvbkVuYWJsZWQ6Tk9d
OwogICAgICAgICBtX3JvdXRlUGlja2VyVmlldyA9IG51bGxwdHI7CiAgICAgfQogCiAgICAgaWYg
KG1fb3V0cHV0Q29udGV4dCkgewotICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
bmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbigpIG9iamVjdDptX291dHB1dENvbnRleHQuZ2V0KCldOworICAg
ICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVy
Om1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkgbmFtZTpQQUw6OkFWT3V0cHV0Q29udGV4
dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0Om1fb3V0cHV0Q29udGV4
dC5nZXQoKV07CiAgICAgICAgIG1fb3V0cHV0Q29udGV4dCA9IG51bGxwdHI7CiAgICAgfQogCkBA
IC0yODIsOSArMjgyLDkgQEAgLSAodm9pZClub3RpZmljYXRpb25IYW5kbGVyOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgogICAgICAgICBpZiAoIW1fY2FsbGJhY2spCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKFtbbm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0
cmluZzpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbigpXSkKKyAgICAgICAgaWYgKFtbbm90aWZpY2F0aW9uIG5hbWVd
IGlzRXF1YWxUb1N0cmluZzpQQUw6OkFWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFu
Z2VOb3RpZmljYXRpb25dKQogICAgICAgICAgICAgbV9jYWxsYmFjay0+Y3VycmVudERldmljZURp
ZENoYW5nZSgpOwotICAgICAgICBlbHNlIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFs
VG9TdHJpbmc6UEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91
dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKV0pCisgICAgICAgIGVsc2UgaWYgKFtb
bm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpQQUw6OkFWUm91dGVEZXRlY3Rvck11
bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb25dKQogICAgICAgICAgICAg
bV9jYWxsYmFjay0+YXZhaWxhYmxlRGV2aWNlc0RpZENoYW5nZSgpOwogICAgIH0pOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAppbmRleCA2Y2NmZmIwZDZh
OTJlZjA2YWU3NmY4OGEwYjI4NTY5NzVkYTNiMmY3Li4wMjVkMGQzNDRmM2FlYTQyOGE2ZWQ4NzY4
Njg4Y2NhYmZkMzdhMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFW
Rk9iakMuaApAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxh
dGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0Zm9ybVNhbXBsZTo6VHlwZSBw
bGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0Zm9ybVNhbXBs
ZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9CiAgICAgc3RkOjpvcHRpb25hbDxCeXRlUmFuZ2U+IGJ5
dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5
KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBs
ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KaW5kZXggZTgzOGVjZTMxN2U5MDQ0YmJhYzll
Yzc3MGI4OTFmYzlhZDMxY2RmMC4uOWNhZDg5ZDFjNzZjOWNjMTE4YjQ3MTIyYTU2Y2JkNTdhMTMx
MmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZGT2JqQy5tbQpA
QCAtMjQ1LDExICsyNDUsNiBAQCBGbG9hdFNpemUgTWVkaWFTYW1wbGVBVkZPYmpDOjpwcmVzZW50
YXRpb25TaXplKCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRTaXplKFBBTDo6Q01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucyhmb3JtYXREZXNjcmlwdGlvbiwg
dHJ1ZSwgdHJ1ZSkpOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQVZGT2JqQzo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25U
aW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24o
KSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJl
c2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgp
LCAiKX0iKTsKLX0KLQogdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6Om9mZnNldFRpbWVzdGFtcHNC
eShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKIHsKICAgICBDTUl0ZW1Db3VudCBpdGVtQ291bnQg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Q01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NN
VXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzc2OGQ1YmFkZjU4ZWJkYzI1ZjA1YTQxMzlkOGE2MTk5
MGRlM2IyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24q
IENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFRyYWNrSW5mbzsKKworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbyhjb25zdCBUcmFja0lu
Zm8mKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk2ZDE0ZDEwMjJkM2Iw
MTIwYmZkYWJmZTQ4MWNmOTMwZGYyMGE3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsMjAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNNVXRp
bGl0aWVzLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBs
ZS5oIgorI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5o
IgorI2ltcG9ydCAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKKyNpbXBvcnQgPENvcmVNZWRp
YS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgor
I2ltcG9ydCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKKyNpbXBvcnQgPHBhbC9jb2NvYS9BVkZv
dW5kYXRpb25Tb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+
CisjaW1wb3J0IDxwYWwvY2YvQXVkaW9Ub29sYm94U29mdExpbmsuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjaWYgRU5BQkxFKE9QVVMpIHx8IEVOQUJMRShWT1JCSVMpCisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbihjb25zdCBBdWRpb0luZm8mIGluZm8pCit7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uIGFzYmQgeyB9OworICAgIGFzYmQubUZvcm1hdElEID0gaW5mby5jb2RlY05hbWUudmFs
dWU7CisgICAgVUludDMyIHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAgYXV0byBlcnJvciA9IFBB
TDo6QXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eShrQXVkaW9Gb3JtYXRQcm9wZXJ0eV9Gb3JtYXRJbmZv
LCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCksICZzaXpl
LCAmYXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1l
ZGlhLCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZCAo
JS40cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIGluZm8uY29va2llRGF0YS0+c2l6ZSgpLCBpbmZvLmNv
b2tpZURhdGEtPmRhdGEoKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29u
dmVydFRvQ01Db2xvclByaW1hcmllcyhQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMgcHJpbWFy
aWVzKQoreworICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xv
clByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllczo6SmVkZWNQMjJQaG9zcGhvcnM6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNv
bG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpTbXB0ZTE3MG06CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNt
cHRlMjQwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01Q
VEVfQzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVScDQzMToK
KyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19E
Q0lfUDM7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzI6
CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNf
UDNfRDY1OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDIwMjA6Cisg
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfSVRV
X1JfMjAyMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9
CisKKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzKQoreworICAg
IHN3aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJU
cmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgUGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJu
IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzIwODRf
UFE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAy
MF8xMGJpdDoKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQyMDIwXzEyYml0OgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDQyODE6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZv
cm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2N0hsZzoKKyAg
ICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lU
VV9SXzIxMDBfSExHOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpJZWM2MTk2NjIxOgorICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9r
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRfQ29y
ZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxs
cHRyOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5l
YXI6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9MaW5lYXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeChQbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzIGNvZWZmaWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNv
ZWZmaWNpZW50cykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NDcwYmc6CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4X0lUVV9SXzYwMV80OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50czo6QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0
cml4X0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9T
TVBURV8yNDBNXzE5OTU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0
RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYgaW5mbykKK3sKKyAgICBp
ZiAoaW5mby5pc0F1ZGlvKCkpIHsKKyAgICAgICAgYXV0byYgYXVkaW9JbmZvID0gZG93bmNhc3Q8
Y29uc3QgQXVkaW9JbmZvPihpbmZvKTsKKyAgICAgICAgaWYgKCFhdWRpb0luZm8uY29va2llRGF0
YSB8fCAhYXVkaW9JbmZvLmNvb2tpZURhdGEtPnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHN3aXRjaCAoYXVkaW9JbmZvLmNvZGVjTmFtZS52YWx1ZSkgewor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBjYXNlICdvcHVzJzoKKyAgICAgICAgICAgIGlmICgh
aXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oYXVkaW9J
bmZvKTsKKyNlbmRpZgorI2lmIEVOQUJMRShWT1JCSVMpCisgICAgICAgIGNhc2UgJ3ZvcmInOgor
ICAgICAgICAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1h
dERlc2NyaXB0aW9uKGF1ZGlvSW5mbyk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChpbmZvLmlz
VmlkZW8oKSkgeworICAgICAgICBhdXRvJiB2aWRlb0luZm8gPSBkb3duY2FzdDxjb25zdCBWaWRl
b0luZm8+KGluZm8pOworCisgICAgICAgIGF1dG8gZGF0YSA9IHZpZGVvSW5mby5hdG9tRGF0YS0+
Y3JlYXRlQ0ZEYXRhKCk7CisgICAgICAgIEFTU0VSVCh2aWRlb0luZm8uY29kZWNOYW1lID09ICd2
cDA5JyB8fCB2aWRlb0luZm8uY29kZWNOYW1lID09ICd2cDA4Jyk7CisgICAgICAgIENGVHlwZVJl
ZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgICAgIENGVHlw
ZVJlZiBjb25maWd1cmF0aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKKyAgICAgICAgYXV0
byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgICAgIFZl
Y3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlv
bkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07CisgICAgICAgIFZl
Y3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0Lmdl
dCgpIH07CisKKyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxSYW5nZSAmJiAq
dmlkZW9JbmZvLmNvbG9yU3BhY2UuZnVsbFJhbmdlKSB7CisgICAgICAgICAgICBleHRlbnNpb25z
S2V5cy5hcHBlbmQoUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VW
aWRlbyk7CisgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UucHJpbWFy
aWVzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRv
Q01Db2xvclByaW1hcmllcygqdmlkZW9JbmZvLmNvbG9yU3BhY2UucHJpbWFyaWVzKSkgeworICAg
ICAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJp
bWFyaWVzS2V5KTsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNv
bG9yUHJpbWFyaWVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAodmlk
ZW9JbmZvLmNvbG9yU3BhY2UudHJhbnNmZXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNtVHJh
bnNmZXJGdW5jdGlvbiA9IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbigqdmlkZW9JbmZvLmNv
bG9yU3BhY2UudHJhbnNmZXIpKSB7CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBw
ZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAgICAgICAgICAg
ZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2ZlckZ1bmN0aW9uKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVydFRvQ01ZQ2JDUk1hdHJp
eCgqdmlkZW9JbmZvLmNvbG9yU3BhY2UubWF0cml4KSkgeworICAgICAgICAgICAgICAgIGV4dGVu
c2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAg
ICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4
dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRlbnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KworICAgICAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24g
PSBudWxscHRyOworICAgICAgICBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjID0gdmlkZW9JbmZvLmNv
ZGVjTmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgOiAndnAwOCc7CisgICAg
ICAgIGlmIChub0VyciAhPSBQQUw6OkNNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBjb2RlYywgdmlkZW9JbmZvLnNpemUud2lkdGgoKSwgdmlkZW9JbmZv
LnNpemUuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0
RGVzY3JpcHRpb24pOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
fQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0uY3BwCmluZGV4IGFlMTY0MTRmMjFjNjg0NmMxODk3NzA5ZTE0MjRlNGE2YTRiNzYxYTAuLmI1
Mjg5ZGNjODQyZjg0OWMwNTBiYWNmZGQ5YzNlOWIwMDkxNzc0MDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NP
VVJDRSkKIAogI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlV2ViTS5oIgorI2luY2x1ZGUgIkNN
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMzYsNyArMzcsNiBA
QAogI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZVdlYk0uaCIKICNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5oIgpAQCAtMjM1LDI1ICsyMzUsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1
bWVudDx3ZWJtOjpJZD4gewogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3Vt
ZW50PFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlPiB7Ci0gICAgc3RhdGlj
IEFTQ0lJTGl0ZXJhbCB0b1N0cmluZyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpT
dGF0ZSBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6Tm9uZTogcmV0dXJuICJO
b25lIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0
YXRlOjpSZWFkaW5nRWJtbDogcmV0dXJuICJSZWFkaW5nRWJtbCJfczsKLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEVibWw6IHJldHVybiAi
UmVhZEVibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRpbmdTZWdtZW50OiByZXR1cm4gIlJlYWRpbmdTZWdtZW50Il9zOwotICAg
ICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5n
SW5mbzogcmV0dXJuICJSZWFkaW5nSW5mbyJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEluZm86IHJldHVybiAiUmVhZEluZm8iX3M7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJl
YWRpbmdUcmFja3M6IHJldHVybiAiUmVhZGluZ1RyYWNrcyJfczsKLSAgICAgICAgY2FzZSBXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1RyYWNrOiByZXR1cm4g
IlJlYWRpbmdUcmFjayJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpTdGF0ZTo6UmVhZFRyYWNrOiByZXR1cm4gIlJlYWRUcmFjayJfczsKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0NsdXN0
ZXI6IHJldHVybiAiUmVhZGluZ0NsdXN0ZXIiX3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICJVbmtub3duIl9zOwotICAgIH0KLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0yNzcsMTQgKzI1OCwxNCBAQCBzdGF0aWMgU3RhdHVzIHNlZ21lbnRS
ZWFkRXJyb3JUb1dlYm1TdGF0dXMoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJy
bwogewogICAgIHN3aXRjaCAoZXJyb3IpIHsKICAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6
U2VnbWVudDo6UmVhZEVycm9yOjpFbmRPZkZpbGU6IHJldHVybiBTdGF0dXMoU3RhdHVzOjprRW5k
T2ZGaWxlKTsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm9y
OjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOworICAgIGNhc2UgU291cmNlQnVmZmVy
UGFyc2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkZhdGFsRXJyb3I6IHJldHVybiBTdGF0dXMoU3Rh
dHVzOjpDb2RlKFdlYk1QYXJzZXI6OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVkKSk7CiAgICAgfQog
fQogCi1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTZWdtZW50UmVhZGVyIGZpbmFsIDog
cHVibGljIHdlYm06OlJlYWRlciB7CitjbGFzcyBXZWJNUGFyc2VyOjpTZWdtZW50UmVhZGVyIGZp
bmFsIDogcHVibGljIHdlYm06OlJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRTZWdtZW50KFNlZ21lbnQmJiBzZWdtZW50KQorICAg
IHZvaWQgYXBwZW5kU2VnbWVudChTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdtZW50
KQogICAgIHsKICAgICAgICAgbV9kYXRhLnB1c2hfYmFjayhXVEZNb3ZlKHNlZ21lbnQpKTsKICAg
ICAgICAgaWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9kYXRhLmVuZCgpKQpAQCAtMzY1LDIxICsz
NDYsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a1dvdWxkQmxv
Y2spOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIEZyZWVTaGFyZWRCdWZmZXIodm9pZCogcmVm
Y29uLCB2b2lkKiwgc2l6ZV90KQotICAgIHsKLSAgICAgICAgYXV0byogYnVmZmVyID0gcmVpbnRl
cnByZXRfY2FzdDxTaGFyZWRCdWZmZXIqPihyZWZjb24pOwotICAgICAgICBidWZmZXItPmRlcmVm
KCk7Ci0gICAgfQotCi0gICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwg
Q01CbG9ja0J1ZmZlclJlZiBvdXRwdXRCdWZmZXIsIHVpbnQ2NF90KiBudW1BY3R1YWxseVJlYWQp
CisgICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgU2hhcmVkQnVmZmVy
QnVpbGRlciYgb3V0cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKG91dHB1dEJ1ZmZlciAmJiBudW1BY3R1YWxseVJlYWQpOworICAgICAg
ICBBU1NFUlQobnVtQWN0dWFsbHlSZWFkKTsKICAgICAgICAgaWYgKCFudW1BY3R1YWxseVJlYWQp
CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CiAK
ICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCA9IDA7Ci0gICAgICAgIGlmICghb3V0cHV0QnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwog
CiAgICAgICAgIHdoaWxlIChudW1Ub1JlYWQgJiYgbV9jdXJyZW50U2VnbWVudCAhPSBtX2RhdGEu
ZW5kKCkpIHsKICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRTZWdtZW50ID0gKm1fY3VycmVudFNl
Z21lbnQ7CkBAIC0zODksNDQgKzM2MiwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBz
aGFyZWRCdWZmZXIgPSBjdXJyZW50U2VnbWVudC5nZXRTaGFyZWRCdWZmZXIoKTsKLSAgICAgICAg
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAg
ICAgdWludDY0X3QgbGFzdFJlYWQgPSAwOworICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gcmF3QmxvY2tCdWZmZXI7CiAgICAgICAgICAgICBpZiAoIXNoYXJlZEJ1ZmZlcikgewogICAg
ICAgICAgICAgICAgIC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IGFsbG9jYXRlIG1vcmUgbWVtb3J5
IHRoYW4gbmVlZGVkIGlmIHRoZSByZWFkIGlzIHBhcnRpYWwuCi0gICAgICAgICAgICAgICAgYXV0
byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgbnVsbHB0ciwgbnVtVG9SZWFkLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxs
cHRyLCAwLCBudW1Ub1JlYWQsIGtDTUJsb2NrQnVmZmVyQXNzdXJlTWVtb3J5Tm93RmxhZywgJnJh
d0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVy
Tm9FcnIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5v
dWdoTWVtb3J5KTsKLSAgICAgICAgICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAw
OwotICAgICAgICAgICAgICAgIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVy
KHJhd0Jsb2NrQnVmZmVyLCAwLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hh
cioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxv
Y2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwor
ICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLnRyeVJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVt
VG9SZWFkKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RF
bm91Z2hNZW1vcnkpOwotICAgICAgICAgICAgICAgIGF1dG8gcmVhZFJlc3VsdCA9IGN1cnJlbnRT
ZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVhZCwgYmxvY2tCdWZm
ZXJEYXRhKTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKG51bVRvUmVhZCk7CisgICAg
ICAgICAgICAgICAgYXV0byByZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bvc2l0
aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkLCBidWZmZXIuZGF0YSgpKTsKICAgICAgICAgICAg
ICAgICBpZiAoIXJlYWRSZXN1bHQuaGFzX3ZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3RhdHVzKHJlYWRSZXN1bHQuZXJyb3IoKSk7Ci0g
ICAgICAgICAgICAgICAgbGFzdFJlYWQgPSByZWFkUmVzdWx0LnZhbHVlKCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGNvdWxkIHdlIG9ubHkgY3JlYXRl
IGEgbmV3IENNQmxvY2tCdWZmZXIgaWYgdGhlIGJhY2tlbmQgbWVtb3J5IGNoYW5nZWQgc2luY2Ug
dGhlIHByZXZpb3VzIG9uZT8KLSAgICAgICAgICAgICAgICBzaXplX3QgY2FuUmVhZCA9IHN0ZDo6
bWluPHNpemVfdD4obnVtVG9SZWFkLCBzaGFyZWRCdWZmZXItPnNpemUoKSAtIG1fcG9zaXRpb25X
aXRoaW5TZWdtZW50KTsKLSAgICAgICAgICAgICAgICAvLyBGcm9tIENNQmxvY2tCdWZmZXJDdXN0
b21CbG9ja1NvdXJjZSBkb2N1bWVudGF0aW9uOgotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRhaW5zIG1pc2FsaWdu
ZWQgZnVuY3Rpb24gcG9pbnRlcnMuCi0gICAgICAgICAgICAgICAgLy8gVG8gYXZvaWQgbGluay10
aW1lIGlzc3VlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBjbGllbnRzIGZpbGwgQ01CbG9ja0J1
ZmZlckN1c3RvbUJsb2NrU291cmNlJ3MgZnVuY3Rpb24gcG9pbnRlciBmaWVsZHMKLSAgICAgICAg
ICAgICAgICAvLyBieSB1c2luZyBhc3NpZ25tZW50IHN0YXRlbWVudHMsIHJhdGhlciB0aGFuIGRl
Y2xhcmluZyB0aGVtIGFzIGdsb2JhbCBvciBzdGF0aWMgc3RydWN0cy4KLSAgICAgICAgICAgICAg
ICBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOwotICAgICAgICAgICAg
ICAgIGFsbG9jYXRvci52ZXJzaW9uID0gMDsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IuQWxs
b2NhdGVCbG9jayA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkZyZWVCbG9j
ayA9IEZyZWVTaGFyZWRCdWZmZXI7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlZkNvbiA9
IHNoYXJlZEJ1ZmZlci5nZXQoKTsKLSAgICAgICAgICAgICAgICBzaGFyZWRCdWZmZXItPnJlZigp
OwotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0
aE1lbW9yeUJsb2NrKG51bGxwdHIsIHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PHVpbnQ4
X3QqPihzaGFyZWRCdWZmZXItPmRhdGEoKSkpLCBzaGFyZWRCdWZmZXItPnNpemUoKSwgbnVsbHB0
ciwgJmFsbG9jYXRvciwgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIGNhblJlYWQsIDAsICZyYXdC
bG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5v
RXJyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3Vn
aE1lbW9yeSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJlYWQgPSBjYW5SZWFkOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYXV0byBibG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZm
ZXIpOwotICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZm
ZXJSZWZlcmVuY2Uob3V0cHV0QnVmZmVyLCByYXdCbG9ja0J1ZmZlciwgMCwgMCwgMCk7Ci0gICAg
ICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOworICAgICAgICAgICAgICAg
IGJ1ZmZlci5yZXNpemUocmVhZFJlc3VsdC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByYXdC
bG9ja0J1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByYXdCbG9ja0J1ZmZlciA9IHNoYXJlZEJ1
ZmZlci0+Z2V0Q29udGlndW91c0RhdGEobV9wb3NpdGlvbldpdGhpblNlZ21lbnQsIG51bVRvUmVh
ZCk7CisgICAgICAgICAgICBhdXRvIGxhc3RSZWFkID0gcmF3QmxvY2tCdWZmZXItPnNpemUoKTsK
KyAgICAgICAgICAgIG91dHB1dEJ1ZmZlci5hcHBlbmQoKnJhd0Jsb2NrQnVmZmVyKTsKICAgICAg
ICAgICAgIG1fcG9zaXRpb24gKz0gbGFzdFJlYWQ7CiAgICAgICAgICAgICAqbnVtQWN0dWFsbHlS
ZWFkICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQgKz0g
bGFzdFJlYWQ7CkBAIC00OTEsOCArNDQyLDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9wb3NpdGlv
bldpdGhpblNlZ21lbnQgPSAwOwogICAgIH0KIAotICAgIFN0ZExpc3Q8U2VnbWVudD4gbV9kYXRh
OwotICAgIFN0ZExpc3Q8U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQgeyBtX2Rh
dGEuZW5kKCkgfTsKKyAgICBTdGRMaXN0PFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD4gbV9k
YXRhOworICAgIFN0ZExpc3Q8U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50Pjo6aXRlcmF0b3Ig
bV9jdXJyZW50U2VnbWVudCB7IG1fZGF0YS5lbmQoKSB9OwogICAgIHNpemVfdCBtX3Bvc2l0aW9u
IHsgMCB9OwogICAgIHNpemVfdCBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCB7IDAgfTsKIH07CkBA
IC01ODQsMTM5ICs1MzUsNDggQEAgc3RhdGljIGJvb2wgY2FuTG9hZEZvcm1hdFJlYWRlcigpCiAj
ZW5kaWYgLy8gIVVTRShBUFBMRV9JTlRFUk5BTF9TREspCiB9CiAKLWJvb2wgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCkKLXsKLSAgICByZXR1cm4g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9ybWF0UmVhZGVyRW5hYmxlZCgpICYm
IGNhbkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJzZXJBdmFpbGFibGUoKTsKLX0KLQot
TWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Omlz
Q29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCitXZWJNUGFyc2Vy
OjpXZWJNUGFyc2VyKENhbGxiYWNrJiBjYWxsYmFjaykKKyAgICA6IG1fcGFyc2VyKG1ha2VVbmlx
dWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdlYm1QYXJzZXI+KCkpCisgICAgLCBtX3JlYWRlciht
YWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+KCkpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNr
KQogewotI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQot
ICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVBs
YXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgYXV0byBjb250
YWluZXJUeXBlID0gdHlwZS5jb250YWluZXJUeXBlKCk7Ci0gICAgYm9vbCBpc0F1ZGlvQ29udGFp
bmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgImF1ZGlvL3dl
Ym0iKTsKLSAgICBib29sIGlzVmlkZW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJ
Q2FzZShjb250YWluZXJUeXBlLCAidmlkZW8vd2VibSIpOwotICAgIGlmICghaXNBdWRpb0NvbnRh
aW5lclR5cGUgJiYgIWlzVmlkZW9Db250YWluZXJUeXBlKQotICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSAgICAKLSAgICBib29s
IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZhbHNlOwotI2lmIEVOQUJMRShWT1JCSVMpCi0g
ICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgp
OwotI2VuZGlmCi0jaWYgRU5BQkxFKE9QVVMpCi0gICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxl
IHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKGlzQXVkaW9D
b250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUpCi0gICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAg
Ym9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlOwotI2lm
IEVOQUJMRShWUDkpCi0gICAgaXNBbnlDb2RlY0F2YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFp
bGFibGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFpc0FueUNvZGVjQXZhaWxhYmxlKQotICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
LQotICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2RlY3MoKTsKLSAgICBpZiAoY29kZWNzLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5
QmVTdXBwb3J0ZWQ7Ci0KLSAgICBmb3IgKGF1dG8mIGNvZGVjIDogY29kZWNzKSB7Ci0jaWYgRU5B
QkxFKFZQOSkKLSAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5z
dGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywg
InZwOSIpKSB7Ci0KLSAgICAgICAgICAgIGlmICghaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNO
b3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGF1dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VW
UENvZGVjUGFyYW1ldGVycyhjb2RlYyk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVy
cykKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0
aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFtZXRlcnMpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShWUDkpCi0K
LSNpZiBFTkFCTEUoVk9SQklTKQotICAgICAgICBpZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKLSAg
ICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZP
UkJJUykKLQotI2lmIEVOQUJMRShPUFVTKQotICAgICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRl
ZDsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUo
T1BVUykKLQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJ
c05vdFN1cHBvcnRlZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3Vw
cG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKLQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7
Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKLSNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUo
T1BVUykKIH0KIAotUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK1dlYk1QYXJzZXI6On5X
ZWJNUGFyc2VyKCkKIHsKLSAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7Ci0gICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLVNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKQotICAgIDogbV9yZWFkZXIobWFrZVVuaXF1ZVJlZjxTZWdtZW50UmVhZGVyPigpKQor
dm9pZCBXZWJNUGFyc2VyOjpyZXNldFN0YXRlKCkKIHsKLSAgICBpZiAoaXNXZWJtUGFyc2VyQXZh
aWxhYmxlKCkpCi0gICAgICAgIG1fcGFyc2VyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9j
Q2hlY2s8V2VibVBhcnNlcj4oKTsKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSKTsKKyAgICBpZiAobV9wYXJzZXIpCisgICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Cisg
ICAgbV9yZWFkZXItPnJlc2V0KCk7CisgICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7CisgICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOworICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKKyAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwor
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKKyAgICAgICAgdHJhY2stPnJlc2V0KCk7
CiB9CiAKLVNvdXJjZUJ1ZmZlclBhcnNlcldlYk06On5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkK
K3ZvaWQgV2ViTVBhcnNlcjo6cmVzZXQoKQogeworICAgIG1fcmVhZGVyLT5yZXNldCgpOworICAg
IG1fcGFyc2VyLT5EaWRTZWVrKCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFncyBhcHBlbmRGbGFncykKK2ludCBXZWJNUGFy
c2VyOjpwYXJzZShTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdtZW50KQogewotICAg
IGlmICghbV9wYXJzZXIpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIs
ICJmbGFncygiLCBhcHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSA/ICJE
aXNjb250aW51aXR5IiA6ICIiLCAiKSwgc2l6ZSgiLCBzZWdtZW50LnNpemUoKSwgIikiKTsKLQot
ICAgIGlmIChhcHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSkgewotICAg
ICAgICBtX3JlYWRlci0+cmVzZXQoKTsKLSAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKLSAg
ICB9CisgICAgaWYgKCFtX3BhcnNlcikKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIG1fcmVhZGVy
LT5hcHBlbmRTZWdtZW50KFdURk1vdmUoc2VnbWVudCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICAgbV9zdGF0dXMgPSBtX3BhcnNlci0+RmVlZCh0aGlzLCAmbV9yZWFkZXIpOwogICAg
ICAgICBpZiAobV9zdGF0dXMub2soKSB8fCBtX3N0YXR1cy5jb2RlID09IFN0YXR1czo6a0VuZE9m
RmlsZSB8fCBtX3N0YXR1cy5jb2RlID09IFN0YXR1czo6a1dvdWxkQmxvY2spIHsKICAgICAgICAg
ICAgIG1fcmVhZGVyLT5yZWNsYWltU2VnbWVudHMoKTsKLQotICAgICAgICAgICAgLy8gQXVkaW8g
dHJhY2tzIGFyZSBncm91cGVkIGludG8gbWV0YS1zYW1wbGVzIG9mIGEgZHVyYXRpb24gbm8gbW9y
ZSB0aGFuIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uLgotICAgICAgICAgICAgLy8gQnV0IGF0IHRo
ZSBlbmQgb2YgYSBmaWxlLCBubyBtb3JlIGF1ZGlvIGRhdGEgbWF5IGJlIGluY29taW5nLCBzbyBm
bHVzaCBhbmQgZW1pdCBhbnkgcGVuZGluZwotICAgICAgICAgICAgLy8gYXVkaW8gYnVmZmVycy4K
LSAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwotCi0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobV9zdGF0dXMuY29kZSAhPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihFcnJvckNvZGU6OlJlY2VpdmVkRWJtbEluc2lkZVNlZ21lbnQpKQpAQCAt
NzQxLDYxICs2MDEsMjQgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRh
KFNlZ21lbnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgY29udGlu
dWU7CiAgICAgfQogCi0gICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJz
dGF0dXMuY29kZSgiLCBtX3N0YXR1cy5jb2RlLCAiKSIpOwotICAgIG1fY2FsbE9uQ2xpZW50VGhy
ZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0g
bV9zdGF0dXMuY29kZV0gewotICAgICAgICBpZiAobV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1Bh
cnNpbmdDYWxsYmFjaykKLSAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJz
aW5nQ2FsbGJhY2soY29kZSk7Ci0gICAgfSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwot
fQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSgp
Ci17CisgICAgcmV0dXJuIG1fc3RhdHVzLmNvZGU7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0
X3QpCit2b2lkIFdlYk1QYXJzZXI6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29u
c3Qgdm9pZCogbG9nSWRlbnRpZmllcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1i
b29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFj
a0lEKHVpbnQ2NF90KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUoKQot
ewotICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotICAgIGlmIChtX3Bh
cnNlcikKLSAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKLSAgICBtX3JlYWRlci0+cmVzZXQo
KTsKLSAgICBtX3N0YXRlID0gbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9jZXNzZWQgPyBTdGF0
ZTo6UmVhZGluZ1NlZ21lbnQgOiBTdGF0ZTo6Tm9uZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2Vn
bWVudCA9IG51bGxwdHI7Ci0gICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9
IGZhbHNlOwotICAgIG1fY3VycmVudEJsb2NrLnJlc2V0KCk7Ci0gICAgZm9yIChhdXRvJiB0cmFj
ayA6IG1fdHJhY2tzKQotICAgICAgICB0cmFjay0+cmVzZXQoKTsKKyAgICBtX2xvZ2dlciA9ICZs
b2dnZXI7CisgICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKIH0KIAotdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRlKCkKK3ZvaWQgV2ViTVBhcnNlcjo6aW52
YWxpZGF0ZSgpCiB7Ci0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0K
ICAgICBtX3BhcnNlciA9IG51bGxwdHI7CiAgICAgbV90cmFja3MuY2xlYXIoKTsKICAgICBtX2lu
aXRpYWxpemF0aW9uU2VnbWVudCA9IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sucmVzZXQo
KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9n
Z2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCi17Ci0gICAgbV9sb2dnZXIg
PSAmbG9nZ2VyOwotICAgIG1fbG9nSWRlbnRpZmllciA9IGxvZ0lkZW50aWZpZXI7Ci19Ci0KLWF1
dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0
X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKK2F1dG8gV2ViTVBhcnNlcjo6dHJhY2tEYXRh
Rm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKIHsKICAg
ICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKICAgICAgICAgaWYgKHRyYWNrLT50cmFj
aygpLnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVt
YmVyLnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCkBAIC04MDQsNyArNjI3LDcgQEAgYXV0byBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFj
a051bWJlcikgLT4gVHIKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0
YWRhdGEsIEFjdGlvbiogYWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWxlbWVudEJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIEFjdGlvbiogYWN0aW9uKQogewogICAg
IEFTU0VSVChhY3Rpb24pOwogICAgIGlmICghYWN0aW9uKQpAQCAtODc2LDcgKzY5OSw3IEBAIFN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50
TWV0YWRhdGEmIG1ldGFkYXRhLCBBCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBs
ZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQo
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkVs
ZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKICAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtODkyLDI0ICs3MTUsMjAgQEAgU3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50TWV0
YWRhdGEmIG1ldGFkYXRhKQogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIs
ICJzdGF0ZSgiLCBvbGRTdGF0ZSwgIi0+IiwgbV9zdGF0ZSwgIiksIGlkKCIsIG1ldGFkYXRhLmlk
LCAiKSwgc2l6ZSgiLCBtZXRhZGF0YS5zaXplLCAiKSIpOwogCiAgICAgaWYgKG1ldGFkYXRhLmlk
ID09IElkOjprVHJhY2tzKSB7Ci0gICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFt
X2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURD
YWxsYmFjaykgeworICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSAmJiAhbV9jYWxsYmFj
ay5jYW5EZWNyeXB0KCkpIHsKICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJ
REVOVElGSUVSLCAiRW5jb3VudGVyZWQgZW5jcnlwdGVkIGNvbnRlbnQgd2l0aG91dCBhbiBrZXkg
cmVxdWVzdCBjYWxsYmFjayIpOwogICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNv
ZGUoRXJyb3JDb2RlOjpDb250ZW50RW5jcnlwdGVkKSk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAobV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCkgewotICAgICAgICAgICAgbV9j
YWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0
aGlzIH0sIGluaXRpYWxpemF0aW9uU2VnbWVudCA9IFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25T
ZWdtZW50KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZUluaXRp
YWxpemF0aW9uRGF0YUNhbGxiYWNrKQotICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlSW5p
dGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIGlmIChtX2luaXRpYWxpemF0aW9u
U2VnbWVudEVuY291bnRlcmVkKQorICAgICAgICAgICAgbV9jYWxsYmFjay5wYXJzZWRJbml0aWFs
aXphdGlvbkRhdGEoV1RGTW92ZSgqbV9pbml0aWFsaXphdGlvblNlZ21lbnQpKTsKICAgICAgICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgICAgICBtX2lu
aXRpYWxpemF0aW9uU2VnbWVudCA9IG51bGxwdHI7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50UHJvY2Vzc2VkID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBrZXlJZFBhaXIgOiBtX2tleUlkcykKLSAgICAg
ICAgICAgICAgICBtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0
YUZvclRyYWNrSURDYWxsYmFjayhXVEZNb3ZlKGtleUlkUGFpci5zZWNvbmQpLCBrZXlJZFBhaXIu
Zmlyc3QpOworICAgICAgICAgICAgICAgIG1fY2FsbGJhY2suY29udGVudEtleVJlcXVlc3RJbml0
aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlk
UGFpci5maXJzdCk7CiAgICAgICAgIH0KICAgICAgICAgbV9rZXlJZHMuY2xlYXIoKTsKICAgICB9
CkBAIC05MTcsNyArNzM2LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxl
bWVudEVuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCitT
dGF0dXMgV2ViTVBhcnNlcjo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVi
bWwmIGVibWwpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAK
QEAgLTkyNSw3ICs3NDQsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FYm1s
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCiAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6SW52YWxpZERvY1R5cGUpKTsKIAogICAg
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSB0cnVlOwotICAgIG1faW5pdGlh
bGl6YXRpb25TZWdtZW50ID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8SW5pdGlh
bGl6YXRpb25TZWdtZW50PigpOworICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbWFrZVVu
aXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8U291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXph
dGlvblNlZ21lbnQ+KCk7CiAgICAgLy8gVE9ETzogU2V0dGluZyB0aGlzIHRvIGZhbHNlIGhlcmUs
IHdpbGwgcHJldmVudCBhZGRpbmcgYSBuZXcgbWVkaWEgc2VnbWVudCBzaG91bGQgYQogICAgIC8v
IHBhcnRpYWwgaW5pdCBzZWdtZW50IGJlIGVuY291bnRlcmVkIGFmdGVyIGEgY2FsbCB0byBzb3Vy
Y2VCdWZmZXIuYWJvcnQoKS4KICAgICAvLyBJdCdzIHByb2JhYmx5IGZpbmUgYXMgbm8tb25lIGlu
IHRoZWlyIHJpZ2h0IG1pbmQgc2hvdWxkIHNlbmQgcGFydGlhbCBpbml0IHNlZ21lbnQgb25seQpA
QCAtOTM2LDcgKzc1NSw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwo
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICByZXR1cm4gU3Rh
dHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWN0
aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRh
ZGF0YSYsIEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lE
RU5USUZJRVIpOwogCkBAIC05NTMsNyArNzcyLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWMK
ICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25z
dCBJbmZvJiBpbmZvKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCBJbmZvJiBpbmZvKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIpOwogCkBAIC05NjksNyArNzg4LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZvJiBpbmZv
KQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFk
YXRhJiwgY29uc3QgQ2x1c3RlciYgY2x1c3RlciwgQWN0aW9uKiBhY3Rpb24pCitTdGF0dXMgV2Vi
TVBhcnNlcjo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1
c3RlciYgY2x1c3RlciwgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTk4NSw3ICs4MDQsNyBAQCBTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29u
c3QgQ2x1cwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1T
dGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IFRyYWNrRW50cnkmIHRyYWNrRW50cnkpCitTdGF0dXMgV2ViTVBhcnNl
cjo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNrRW50cnkm
IHRyYWNrRW50cnkpCiB7CiAgICAgaWYgKCF0cmFja0VudHJ5LnRyYWNrX3R5cGUuaXNfcHJlc2Vu
dCgpIHx8ICF0cmFja0VudHJ5LmNvZGVjX2lkLmlzX3ByZXNlbnQoKSkKICAgICAgICAgcmV0dXJu
IFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CkBAIC0xMDUwLDE0ICs4NjksMTQgQEAgU3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCBUcmFja0UKIAogI2lmIEVOQUJMRShWT1JCSVMpCiAgICAgaWYgKGNvZGVj
U3RyaW5nID09ICJBX1ZPUkJJUyIgJiYgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAg
ICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpW
b3JiaXMsIHRyYWNrRW50cnksICp0aGlzLCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKSk7
CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlw
ZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcykpOwogICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUFVTKQog
ICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxl
KCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29k
ZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbikpOworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6Ok9wdXMsIHRyYWNrRW50cnksICp0aGlzKSk7CiAgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogICAgIH0KICNlbmRpZgpAQCAtMTA2Niw3ICs4ODUs
NyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNrRQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25CbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJiBibG9jaywg
QWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0JlZ2luKGNv
bnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24p
CiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwODEs
NyArOTAwLDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tC
ZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdAogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYpCit3
ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
Uik7CiAKQEAgLTEwOTAsNyArOTA5LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmwKICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQord2VibTo6
U3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRh
dGEmLCBjb25zdCBTaW1wbGVCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQogewogICAgIElO
Rk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMTA1LDcgKzkyNCw3IEBA
IHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrQmVnaW4o
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2lt
cGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smKQor
d2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1l
dGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwogCkBAIC0xMTE0LDcgKzkzMyw3IEBAIHdlYm06OlN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25z
dCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24qIGFjdGlvbikKK3dlYm06OlN0
YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0
YWRhdGEmLCB3ZWJtOjpBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJM
RShMT0dJREVOVElGSUVSKTsKIApAQCAtMTEyNiw3ICs5NDUsNyBAQCB3ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVu
dE1ldGFkYQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0
IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdlYm06OkJsb2NrR3JvdXAmIGJsb2NrR3Jv
dXApCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06
OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdlYm06OkJsb2NrR3JvdXAmIGJsb2NrR3JvdXApCiB7
CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAgICAgaWYgKGJsb2Nr
R3JvdXAuYmxvY2suaXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5nLmlz
X3ByZXNlbnQoKSkgewpAQCAtMTEzNiwxNyArOTU1LDEzIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFk
YXRhCiAgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkln
bm9yaW5nIHVua25vd24gdHJhY2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKICAgICAgICAgICAg
IHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogICAgICAgICB9Ci0gICAgICAg
IGlmICh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLmlzX3ByZXNlbnQoKSAmJiBibG9ja0dy
b3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpID4gMCkgewotICAgICAgICAgICAgbV9jYWxsT25D
bGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHRyYWNrSUQgPSB0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCksIHBhZGRpbmcg
PSBNZWRpYVRpbWUoYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSwga191c19pbl9z
ZWNvbmRzKV0oKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFD
YWxsYmFjaykKLSAgICAgICAgICAgICAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxi
YWNrKHRyYWNrSUQsIHBhZGRpbmcpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJsb2Nr
R3JvdXAuZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCkgPiAwKQorICAgICAgICAgICAgbV9jYWxsYmFj
ay5wYXJzZWRUcmltbWluZ0RhdGEodHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgp
LCBNZWRpYVRpbWUoYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSwga191c19pbl9z
ZWNvbmRzKSk7CiAgICAgfQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25z
dCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRl
c1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkZyYW1lKGNvbnN0IEZyYW1l
TWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nKQogewogICAgIEFTU0VSVChyZWFkZXIpOwogICAgIGlmICghcmVhZGVyKQpAQCAtMTE4Mywz
NyArOTk4LDIwIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1l
KGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkCiAgICAgICAgIHJldHVybiBTa2lw
KHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgIH0KIAotICAgIHJldHVybiB0cmFja0RhdGEt
PmNvbnN1bWVGcmFtZURhdGEoKnJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nLCBQQUw6
OkNNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNj
YWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOworICAgIHJldHVybiB0cmFja0RhdGEtPmNvbnN1bWVG
cmFtZURhdGEoKnJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nLCBNZWRpYVRpbWUoYmxv
Y2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51
bV9mcmFtZXMpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRp
YURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90
IHRyYWNrSUQsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBieXRlUmFuZ2VPZmZzZXQpCi17Ci0gICAg
bV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7
ICp0aGlzIH0sIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwg
Ynl0ZVJhbmdlT2Zmc2V0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVN
ZWRpYURhdGFDYWxsYmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1l
ZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgp
LCB0cmFja0lEKTsKLSAgICAgICAgaWYgKGJ5dGVSYW5nZU9mZnNldCkKLSAgICAgICAgICAgIG1l
ZGlhU2FtcGxlLT5zZXRCeXRlUmFuZ2VPZmZzZXQoKmJ5dGVSYW5nZU9mZnNldCk7Ci0gICAgICAg
IG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFj
a0lELCBlbXB0eVN0cmluZygpKTsKLSAgICB9KTsKLX0KIAogI2RlZmluZSBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKC4uLikgaWYgKHBhcnNlcigpLmxvZ2dlclB0cigpKSBwYXJzZXIoKS5s
b2dnZXJQdHIoKS0+ZXJyb3IobG9nQ2hhbm5lbCgpLCBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVy
KGxvZ0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19W
QV9BUkdTX18pCiAKLVJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBv
ZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVmZmVyPiBXZWJNUGFy
c2VyOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZz
ZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKCFvZmZzZXQgJiYgIWxlbmd0aCAm
JiBQQUw6OkNNQmxvY2tCdWZmZXJJc1JhbmdlQ29udGlndW91cyhtX2NvbXBsZXRlQmxvY2tCdWZm
ZXIuZ2V0KCksIDAsIDApKQotICAgICAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwot
ICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3Q29udGlndW91c0J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
aWYgKFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUNvbnRpZ3VvdXMobnVsbHB0ciwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBvZmZzZXQsIGxlbmd0aCwgMCwg
JnJhd0NvbnRpZ3VvdXNCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
YmxvY2sgYnVmZmVyIik7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fY29tcGxldGVCbG9j
a0J1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YocmF3Q29udGlndW91c0J1ZmZlcik7CisgICAgcmV0dXJuIG1fY29tcGxldGVC
bG9ja0J1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOwogfQogCi13ZWJt
OjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRh
KHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0
YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OlRy
YWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3Qgd2VibTo6
RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKICAg
ICBpZiAobV9jb21wbGV0ZVBhY2tldFNpemUgJiYgKm1fY29tcGxldGVQYWNrZXRTaXplICE9IG1l
dGFkYXRhLnNpemUpIHsKICAgICAgICAgLy8gVGhlIHBhY2tldCdzIG1ldGFkYXRhIGRvZXNuJ3Qg
bWF0Y2ggdGhlIGN1cnJlbnRseSBwZW5kaW5nIGNvbXBsZXRlIHBhY2tldDsgcmVzdGFydC4KQEAg
LTEyMjQsMjAgKzEwMjIsOSBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmICghbV9j
b21wbGV0ZVBhY2tldFNpemUpCiAgICAgICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gbWV0YWRh
dGEuc2l6ZTsKIAotICAgIGlmICghbV9jdXJyZW50QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgQVNT
RVJUKCFtX3BhcnRpYWxCeXRlc1JlYWQpOwotICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Js
b2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZm
ZXJDcmVhdGVFbXB0eShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0
eSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZl
ck5vRXJyIHx8ICFyYXdCbG9ja0J1ZmZlcikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJP
Ul9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCB3aXRoIGVycm9y
IiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKLSAgICAgICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3
QmxvY2tCdWZmZXIpOwotICAgIH0KLQogICAgIHdoaWxlICgqYnl0ZXNSZW1haW5pbmcpIHsKICAg
ICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOwotICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19j
YXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJ
bnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksICZieXRlc1Jl
YWQpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFdlYk1QYXJzZXI6OlNlZ21l
bnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50Qmxv
Y2tCdWZmZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNS
ZWFkOwogICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOwogCkBAIC0xMjQ5
LDE1NiArMTAzNiw5MiBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJh
Y2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAogICAgIGlmIChtX3BhcnRp
YWxCeXRlc1JlYWQgPCAqbV9jb21wbGV0ZVBhY2tldFNpemUpCiAgICAgICAgIHJldHVybiB3ZWJt
OjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsKTsKIAotICAgIGlmICghbV9jb21wbGV0
ZUJsb2NrQnVmZmVyKQotICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBXVEZNb3ZlKG1f
Y3VycmVudEJsb2NrQnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6
OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UobV9jb21wbGV0ZUJsb2NrQnVmZmVy
LmdldCgpLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgMCwgMCwgMCk7Ci0gICAgICAgIGlm
IChlcnIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxv
Y2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgdG8gY29tcGxldGUgYmxvY2sgZmFpbGVkIHdp
dGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RF
bm91Z2hNZW1vcnkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0g
bnVsbHB0cjsKLSAgICB9CisgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbV9jdXJyZW50Qmxv
Y2tCdWZmZXIudGFrZSgpOworICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0
OwogICAgIG1fcGFydGlhbEJ5dGVzUmVhZCA9IDA7CiAKICAgICByZXR1cm4gd2VibTo6U3RhdHVz
KHdlYm06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJl
YWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5
dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVD
b3VudCkKK3ZvaWQgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJh
bWVzU3RhdGUoKQoreworICAgIG1fa2V5RnJhbWVzLmNsZWFyKCk7CisgICAgVHJhY2tEYXRhOjpy
ZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7Cit9CisKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2Vy
OjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwg
Y29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywg
Y29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQ
OSkKICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRhZGF0YSwgYnl0
ZXNSZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICBy
ZXR1cm4gc3RhdHVzOwogCi0gICAgY3JlYXRlU2FtcGxlQnVmZmVyKHByZXNlbnRhdGlvblRpbWUs
IHNhbXBsZUNvdW50LCBtZXRhZGF0YSk7Ci0gICAgcmVzZXQoKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKG1ldGFkYXRhKTsKLSAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIFNraXAo
JnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotfQorICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRh
dGEucG9zaXRpb247CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGlu
dCBzYW1wbGVDb3VudCwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0j
aWYgRU5BQkxFKFZQOSkKLSAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwog
ICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBs
ZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0
ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KLSAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9
IHN0ZDo6bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgc2l6
ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCBtX2NvbXBs
ZXRlQmxvY2tCdWZmZXItPnNpemUoKSk7CiAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CiAgICAg
aWYgKCFjb250aWd1b3VzQnVmZmVyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoIlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIgZmFpbGVkIHRvIGNyZWF0
ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBh
dXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRpZ3VvdXNCdWZm
ZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7
Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIlZpZGVv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBk
YXRhIGJsb2NrIik7CisgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKICAgICB9CisgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91
c0J1ZmZlci0+ZGF0YSgpOwogCiAgICAgYm9vbCBpc0tleSA9IGZhbHNlOwotICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKICAgICBpZiAoY29k
ZWMoKSA9PSBDb2RlY1R5cGU6OlZQOSkgewogICAgICAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBh
cnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVudEhlYWRlckxlbmd0
aCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVy
LCBieXRlc1JlbWFpbmluZyk7CiAKICAgICAgICAgaWYgKG1faGVhZGVyUGFyc2VyLmtleSgpKSB7
CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIGZvcm1hdERlc2Ny
aXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKG1faGVh
ZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKLSAgICAgICAgICAgIGlm
ICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9S
X0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQ
WCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7
CisgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihjcmVhdGVWaWRlb0luZm9Gcm9tVlA5
SGVhZGVyUGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3Vy
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDgp
IHsKICAgICAgICAgYXV0byBoZWFkZXIgPSBwYXJzZVZQOEZyYW1lSGVhZGVyKGJsb2NrQnVmZmVy
RGF0YSwgc2VnbWVudEhlYWRlckxlbmd0aCk7CiAgICAgICAgIGlmIChoZWFkZXIgJiYgaGVhZGVy
LT5rZXlmcmFtZSkgewogICAgICAgICAgICAgaXNLZXkgPSB0cnVlOwotICAgICAgICAgICAgYXV0
byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRl
cigqaGVhZGVyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKLSAgICAgICAgICAgIGlm
ICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9S
X0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQ
WCBoZWFkZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7
CisgICAgICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihjcmVhdGVWaWRlb0luZm9Gcm9tVlA4
SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpKTsKICAgICAgICAg
fQogICAgIH0KIAorICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAg
ICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuc2V0SW5mbyhmb3JtYXREZXNjcmlwdGlvbigpKTsK
KyAgICBlbHNlIGlmIChmb3JtYXREZXNjcmlwdGlvbigpICYmICpmb3JtYXREZXNjcmlwdGlvbigp
ICE9ICptX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgZHJhaW5QZW5kaW5n
U2FtcGxlcygpOworCiAgICAgYXV0byB0cmFjayA9IHRoaXMtPnRyYWNrKCk7Ci0gICAgLy8gRklY
TUU6IEEgYmxvY2sgbWlnaHQgY29udGFpbiBtb3JlIHRoYW4gb25lIGZyYW1lLCBidXQgb25seSB0
aGlzIGZyYW1lIGhhcyBiZWVuIHJlYWQgaW50byBgY29tcGxldGVCbG9ja0J1ZmZlcmAuCi0gICAg
Ly8gQmVsb3cgd2UgY3JlYXRlIHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1lLCBlYWNoIHdp
dGggdGhlIGJsb2NrJ3MgdGltZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4KLSAgICAvLyBT
aG91bGRuJ3Qgd2UgY3JlYXRlIGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBhbGwgdGhlIGJs
b2NrJ3MgZnJhbWVzIGhhdmUgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmA/CiAK
ICAgICB1aW50NjRfdCBkdXJhdGlvbiA9IDA7CiAgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRp
b24uaXNfcHJlc2VudCgpKQotICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRp
b24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8ga191c19pbl9zZWNvbmRz
OworICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHBy
ZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkgLyBrX3VzX2luX3NlY29uZHM7CiAKLSAgICBDTVNh
bXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIENNU2FtcGxlVGlt
aW5nSW5mbyB0aW1pbmcgPSB7IFBBTDo6Q01UaW1lTWFrZShkdXJhdGlvbiwgcHJlc2VudGF0aW9u
VGltZS50aW1lc2NhbGUpLCBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lIH07Ci0g
ICAgZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1
bHQsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgdGhpcy0+Zm9ybWF0RGVzY3JpcHRpb24o
KS5nZXQoKSwgc2FtcGxlQ291bnQsIDEsICZ0aW1pbmcsIDEsICYqbV9jb21wbGV0ZVBhY2tldFNp
emUsICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0
aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBzYW1wbGVC
dWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CisgICAgbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRp
bWUoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaXNLZXkgPyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxh
Z3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6Tm9uZSB9KTsKIAotICAgIGF1
dG8gYXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2ht
ZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0gICAgQVNTRVJUKGF0dGFjaG1l
bnRzQXJyYXkpOwotICAgIGlmICghYXR0YWNobWVudHNBcnJheSkgewotICAgICAgICBQQVJTRVJf
TE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRz
QXJyYXkgcmV0dXJuZWQgTlVMTCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGRyYWlu
UGVuZGluZ1NhbXBsZXMoKTsKIAotICAgIGlmICghaXNLZXkpIHsKLSAgICAgICAgZm9yIChDRklu
ZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNo
bWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05v
dFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gdHJh
Y2tJRCA9IHRyYWNrLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3ZpZGVNZWRp
YURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBtZXRhZGF0YS5wb3NpdGlvbik7
CisgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5pbmcpOworICAgIHJldHVybiB3ZWJtOjpTdGF0dXMo
d2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocHJl
c2VudGF0aW9uVGltZSk7CiAgICAgVU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKICAgICBVTlVT
RURfUEFSQU0obWV0YWRhdGEpOwotI2VuZGlmIC8vIEVOQUJMRShWUDkpCisgICAgcmV0dXJuIFNr
aXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworI2VuZGlmCiB9CiAKLXZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCkKK3ZvaWQgV2Vi
TVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogewog
ICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgPSAwOwotICAgIG1fcGFja2V0U2l6ZXMuY2xl
YXIoKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRQYWNrZXRC
eXRlT2Zmc2V0ID0gMDsKLSAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKCk7CisgICAgVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiB9CiAKLXdlYm06OlN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQg
c2FtcGxlQ291bnQpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEm
IG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IE1lZGlhVGltZSYgcHJl
c2VudGF0aW9uVGltZSwgaW50KQogewotICAgIGlmIChtX3BhY2tldFRpbWluZ3Muc2l6ZSgpKSB7
Ci0gICAgICAgIGF1dG8mIGxhc3RUaW1pbmcgPSBtX3BhY2tldFRpbWluZ3MubGFzdCgpOwotICAg
ICAgICBpZiAoUEFMOjpDTVRpbWVDb21wYXJlKFBBTDo6Q01UaW1lQWRkKGxhc3RUaW1pbmcuZHVy
YXRpb24sIGxhc3RUaW1pbmcucHJlc2VudGF0aW9uVGltZVN0YW1wKSwgcHJlc2VudGF0aW9uVGlt
ZSkpIHsKLSAgICAgICAgICAgIC8vIERpc2NvbnRpbnVpdHkgZW5jb3VudGVyZWQsIGVtaXQgdGhl
IHByZXZpb3VzbHkgZGVtdXhlZCBzYW1wbGVzLgotICAgICAgICAgICAgY3JlYXRlU2FtcGxlQnVm
ZmVyKG1ldGFkYXRhLnBvc2l0aW9uKTsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRhZGF0
YSwgYnl0ZXNSZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAg
ICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgLy8gQXR0ZW1wdHMgdG8gbWluaW1pc2UgdGhlIGFt
b3VudCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgZHVlIHRvIHJlcGV0aXR2ZSBDTUJsb2NrQnVmZmVy
QXBwZW5kQnVmZmVyUmVmZXJlbmNlIGNhbGxzIGluIHJlYWRGcmFtZURhdGEuCi0gICAgbU51bUZy
YW1lc0luQ29tcGxldGVCbG9jaysrOwotICAgIGlmIChtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2Nr
ID4gbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkpCi0gICAgICAgIG1NYXhCbG9ja0J1ZmZlckNhcGFj
aXR5ID0gbU51bUZyYW1lc0luQ29tcGxldGVCbG9jazsKLQotICAgIGlmIChtX3BhY2tldFNpemVz
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0
aW9uVGltZTsKKyAgICBtX2xhc3RQb3NpdGlvbiA9IG1ldGFkYXRhLnBvc2l0aW9uOwogCiAgICAg
aWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7CiAgICAgICAgIGlmICghdHJhY2soKS5jb2RlY19w
cml2YXRlLmlzX3ByZXNlbnQoKSkgewpAQCAtMTQwNiwyNCArMTEyOSwxOCBAQCB3ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZAogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwogICAgICAgICB9CiAKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOworICAgICAgICBSZWZQdHI8QXVkaW9JbmZvPiBmb3Jt
YXREZXNjcmlwdGlvbjsKICAgICAgICAgYXV0byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVj
X3ByaXZhdGUudmFsdWUoKTsKICAgICAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3Ji
aXMpCi0gICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9y
bWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOwor
ICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRpb0luZm8ocHJp
dmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChj
b2RlYygpID09IENvZGVjVHlwZTo6T3B1cykgewotICAgICAgICAgICAgYXV0byBjb250aWd1b3Vz
QnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0
ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAgICAgICAgICAgIGF1dG8gY29udGln
dW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIGtPcHVzTWluaW11
bUZyYW1lRGF0YVNpemUpOwogICAgICAgICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAg
ICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0Rh
dGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJsZSB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJs
b2NrIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRh
ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0
RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwg
KGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAgICAgIGlmIChlcnIpIHsKLSAgICAg
ICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0
RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIE9wdXNDb29raWVDb250ZW50cyBjb29raWVDb250ZW50czsKLSAgICAgICAgICAgIGlm
ICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5k
YXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250
ZW50cykpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURh
dGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCksIGNvbnRpZ3VvdXNCdWZmZXItPnNpemUoKSwg
Y29udGlndW91c0J1ZmZlci0+ZGF0YSgpLCBjb29raWVDb250ZW50cykpIHsKICAgICAgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gcGFyc2UgT3B1cyBw
cml2YXRlIGRhdGEiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CiAgICAgICAgICAgICB9CkBAIC0xNDMzLDQwICsxMTUwLDI5IEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZy
YW1lRGF0YSh3ZWJtOjpSZWFkCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ZyYW1lc1Bl
clBhY2tldCA9IGNvb2tpZUNvbnRlbnRzLmZyYW1lc1BlclBhY2tldDsKICAgICAgICAgICAgIG1f
ZnJhbWVEdXJhdGlvbiA9IGNvb2tpZUNvbnRlbnRzLmZyYW1lRHVyYXRpb247Ci0gICAgICAgICAg
ICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNv
b2tpZUNvbnRlbnRzKTsKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1
c0F1ZGlvSW5mbyhjb29raWVDb250ZW50cyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWZv
cm1hdERlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJGYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIGF1ZGlvIHRyYWNr
IGhlYWRlciIpOworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFp
bGVkIHRvIGNyZWF0ZSBBdWRpb0luZm8gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIiKTsKICAgICAg
ICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGF1dG8gc3RyZWFtRGVzY3JpcHRpb24gPSBQQUw6OkNNQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24oZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkp
OwotICAgICAgICBpZiAoIXN0cmVhbURlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICBQQVJTRVJf
TE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRl
ciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIG1fcGFja2V0RHVyYXRpb24g
PSBQQUw6OkNNVGltZU1ha2Uoc3RyZWFtRGVzY3JpcHRpb24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0
cmVhbURlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSk7CisgICAgICAgIG1fcGFja2V0RHVyYXRpb24g
PSBNZWRpYVRpbWUoZm9ybWF0RGVzY3JpcHRpb24tPmZyYW1lc1BlclBhY2tldCwgZm9ybWF0RGVz
Y3JpcHRpb24tPnJhdGUpOwogCi0gICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oZm9ybWF0
RGVzY3JpcHRpb24ucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgfSBlbHNlIGlmIChjb2RlYygpID09
IENvZGVjVHlwZTo6T3B1cykgewogICAgICAgICAvLyBPcHVzIHRlY2huaWNhbGx5IGFsbG93cyB0
aGUgZnJhbWUgZHVyYXRpb24gYW5kIGZyYW1lcy1wZXItcGFja2V0IHZhbHVlcyB0byBjaGFuZ2Ug
ZnJvbSBwYWNrZXQgdG8gcGFja2V0LgogICAgICAgICAvLyBDb3JlQXVkaW8gZG9lc24ndCBzdXBw
b3J0IEFTQkQgdmFsdWVzIGxpa2UgdGhlc2UgdG8gY2hhbmdlIG9uIGEgcGVyLXBhY2tldCBiYXNp
cywgc28gdGhyb3cgYW4gZXJyb3Igd2hlbgogICAgICAgICAvLyB0aGF0IGtpbmQgb2YgdmFyaWFi
aWxpdHkgaXMgZW5jb3VudGVyZWQuCiAgICAgICAgIE9wdXNDb29raWVDb250ZW50cyBjb29raWVD
b250ZW50czsKICAgICAgICAgYXV0byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZh
dGUudmFsdWUoKTsKLSAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0Nv
bXBsZXRlQmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQ
YWNrZXRTaXplKTsKKyAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0Nv
bXBsZXRlQmxvY2tCdWZmZXIoMCwga09wdXNNaW5pbXVtRnJhbWVEYXRhU2l6ZSk7CiAgICAgICAg
IGlmICghY29udGlndW91c0J1ZmZlcikgewogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9J
Rl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJsZSB0byBj
cmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgdWludDhfdCogYmxv
Y2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tC
dWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBu
dWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgICAgICBpZiAoZXJyKSB7Ci0g
ICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0
RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
cGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRh
KCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJEYXRhLCBjb29raWVDb250ZW50
cykKKyAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCks
IHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1ZmZlci0+c2l6ZSgpLCBjb250aWd1b3Vz
QnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKQogICAgICAgICAgICAgfHwgY29va2llQ29u
dGVudHMuZnJhbWVzUGVyUGFja2V0ICE9IG1fZnJhbWVzUGVyUGFja2V0CiAgICAgICAgICAgICB8
fCBjb29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uICE9IG1fZnJhbWVEdXJhdGlvbikgewogICAg
ICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiT3B1cyBmcmFtZXMtcGVyLXBh
Y2tldCBjaGFuZ2VkIHdpdGhpbiBhIHRyYWNrOyBlcnJvciIpOwpAQCAtMTQ3NCw2MyArMTE4MCwz
MzIgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgfQogICAgIH0KIAotICAgIG1f
cGFja2V0U2l6ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAgbV9wYWNrZXRU
aW1pbmdzLmFwcGVuZCh7IG1fcGFja2V0RHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUsIFBBTDo6
a0NNVGltZUludmFsaWQgfSk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCArPSAqbV9j
b21wbGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxv
cHQ7CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgbV9j
b21wbGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9uKCkpOworICAgIGVs
c2UgaWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1f
Y29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVz
KCk7CiAKLSAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpDTVRpbWVHZXRTZWNvbmRzKFBB
TDo6Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1wbGVQcmVzZW50YXRpb25U
aW1lKSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXREdXJhdGlvbikgKiBzYW1wbGVD
b3VudDsKKyAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHByZXNlbnRhdGlvblRp
bWUsIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNrZXREdXJhdGlvbiwgbV9jb21wbGV0
ZUJsb2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6
SXNTeW5jIH0pOwogCi0gICAgaWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBsZUR1
cmF0aW9uKSB7Ci0gICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3NpdGlvbik7
Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgfQorICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAog
ICAgIEFTU0VSVCghKmJ5dGVzUmVtYWluaW5nKTsKICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdl
Ym06OlN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQpCisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0
ZWRWaWRlb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK3sKKyAgICByZXR1cm4gbmFtZSA9PSAiVl9W
UDgiIHx8IG5hbWUgPT0gIlZfVlA5IjsKK30KKworYm9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRl
ZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09ICJBX1ZP
UkJJUyIgfHwgbmFtZSA9PSAiQV9PUFVTIjsKK30KKworU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCisgICAgOiBtX3BhcnNlcigqdGhpcykKK3sKK30KKwor
Ym9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUo
KQoreworICAgIHJldHVybiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRS
ZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9hZEZvcm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2
YWlsYWJsZSgpOworfQorCitNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYg
dHlwZSkKK3sKKyNpZiBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BV
UykKKyAgICBpZiAoIWlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8g
Y29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVyVHlwZSgpOworICAgIGJvb2wgaXNBdWRpb0Nv
bnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRp
by93ZWJtIik7CisgICAgYm9vbCBpc1ZpZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVvL3dlYm0iKTsKKyAgICBpZiAoIWlzQXVkaW9D
b250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFpbmVyVHlwZSkKKyAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBib29s
IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZhbHNlOworI2lmIEVOQUJMRShWT1JCSVMpCisg
ICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgp
OworI2VuZGlmCisjaWYgRU5BQkxFKE9QVVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxl
IHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKGlzQXVkaW9D
b250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUpCisgICAgICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAg
Ym9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlOworI2lm
IEVOQUJMRShWUDkpCisgICAgaXNBbnlDb2RlY0F2YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFp
bGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKCFpc0FueUNvZGVjQXZhaWxhYmxlKQorICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
KworICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2RlY3MoKTsKKyAgICBpZiAoY29kZWNzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5
QmVTdXBwb3J0ZWQ7CisKKyAgICBmb3IgKGF1dG8mIGNvZGVjIDogY29kZWNzKSB7CisjaWYgRU5B
QkxFKFZQOSkKKyAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5z
dGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywg
InZwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICghaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNO
b3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGF1dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VW
UENvZGVjUGFyYW1ldGVycyhjb2RlYyk7CisgICAgICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVy
cykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0
aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFtZXRlcnMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisK
KyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBpZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKKyAg
ICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZP
UkJJUykKKworI2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7
CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRl
ZDsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
T1BVUykKKworICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJ
c05vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3Vw
cG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7
CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUo
T1BVUykKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXND
b250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViTVBh
cnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXMsIHVpbnQ2
NF90IHBvc2l0aW9uKQoreworICAgIG1fY2FsbGJhY2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUo
c2FtcGxlcyksIHBvc2l0aW9uKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6
YXRpb25TZWdtZW50KQogewotICAgIGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKKyAgICBt
X2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgaW5pdGlhbGl6YXRpb25TZWdtZW50ID0gV1RGTW92ZShpbml0aWFsaXphdGlvblNl
Z21lbnQpXSgpIG11dGFibGUgeworICAgICAgICBpZiAobV9kaWRQYXJzZUluaXRpYWxpemF0aW9u
RGF0YUNhbGxiYWNrKQorICAgICAgICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNh
bGxiYWNrKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Js
b2NrJiYgc2FtcGxlc0Jsb2NrLCB1aW50NjRfdCBwb3NpdGlvbikKK3sKKyAgICBpZiAoIXNhbXBs
ZXNCbG9jay5pbmZvKCkpIHsKKyAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIsICJObyBUcmFja0luZm8gc2V0Iik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIGF1dG8g
ZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQs
IG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24oKS5nZXQoKSwg
bV9wYWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0VGltaW5ncy5zaXplKCksIG1fcGFja2V0VGlt
aW5ncy5kYXRhKCksIG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFNpemVzLmRhdGEoKSwg
JnJhd1NhbXBsZUJ1ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBhY2tldERlc2Ny
aXB0aW9ucyBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOworICAgIGlmIChzYW1wbGVzQmxvY2suaXNW
aWRlbygpKSB7CisgICAgICAgIGlmIChtX3ZpZGVvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygp
KSB7CisgICAgICAgICAgICBtX3ZpZGVvSW5mbyA9IHNhbXBsZXNCbG9jay5pbmZvKCk7CisgICAg
ICAgICAgICBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21UcmFja0luZm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICB9CisgICAgICAg
IGZvcm1hdERlc2NyaXB0aW9uID0gbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChtX2F1ZGlvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygpKSB7Cisg
ICAgICAgICAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKKyAgICAgICAgICAgIG1fYXVk
aW9Gb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5m
bygqc2FtcGxlc0Jsb2NrLmluZm8oKSk7CisgICAgICAgICAgICBtX2F1ZGlvSW5mbyA9IHNhbXBs
ZXNCbG9jay5pbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBt
X2F1ZGlvRm9ybWF0RGVzY3JpcHRpb247CisgICAgfQorCisgICAgaWYgKHNhbXBsZXNCbG9jay5p
c1ZpZGVvKCkpIHsKKyAgICAgICAgcmV0dXJuU2FtcGxlcyhtX3ZpZGVvSW5mby5nZXQoKSwgc2Ft
cGxlc0Jsb2NrLnRha2VTYW1wbGVzKCksIG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwg
cG9zaXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGF1dG8gc2FtcGxlQnVmZmVy
ID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwogCi0gICAgYXV0byB0cmFja0lEID0gdHJhY2so
KS50cmFja191aWQudmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKFdURk1v
dmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKKyAgICAv
LyBQYWNrIGF1ZGlvIGlmIG5lZWRlZC4KKyAgICBpZiAobV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2l6
ZSgpKSB7CisgICAgICAgIGF1dG8mIGxhc3RTYW1wbGUgPSBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5s
YXN0KCk7CisgICAgICAgIGlmIChsYXN0U2FtcGxlLmR1cmF0aW9uICsgbGFzdFNhbXBsZS5wcmVz
ZW50YXRpb25UaW1lICE9IHNhbXBsZXNCbG9jay5maXJzdCgpLnByZXNlbnRhdGlvblRpbWUpCisg
ICAgICAgICAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMocG9zaXRpb24pOworICAgIH0KKyAg
ICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXNCbG9jaykKKyAgICAgICAgbV9xdWV1ZWRBdWRp
b0R1cmF0aW9uICs9IHNhbXBsZS5kdXJhdGlvbjsKKyAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5h
cHBlbmQoV1RGTW92ZShzYW1wbGVzQmxvY2spKTsKKyAgICBpZiAobV9xdWV1ZWRBdWRpb0R1cmF0
aW9uIDwgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CiB9CiAKLXZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKK3ZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyhjb25zdCBUcmFja0luZm8qIGluZm8sIE1lZGlh
U2FtcGxlc0Jsb2NrOjpTYW1wbGVzVmVjdG9yJiYgc2FtcGxlcywgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zaXRpb24p
CiB7Ci0gICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7Ci0gICAgICAgIGlmICh0cmFj
ay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBl
OjpBdWRpbykgewotICAgICAgICAgICAgQXVkaW9UcmFja0RhdGEmIGF1ZGlvVHJhY2sgPSBkb3du
Y2FzdDxBdWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpOwotICAgICAgICAgICAgYXVkaW9UcmFj
ay5jcmVhdGVTYW1wbGVCdWZmZXIoKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2sucmVzZXRDb21w
bGV0ZWQoKTsKKyAgICBpZiAoIXNhbXBsZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAg
UmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNvbXBsZXRlQmxvY2tCdWZmZXJzOworICAgIGlm
IChzYW1wbGVzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgLy8gT3B0aW1pc2F0aW9uIHNvIHRoYXQg
d2UgYWxsb2NhdGUgdGhlIGVudGlyZSBDTUJsb2NrQnVmZmVyIGF0IG9uY2UgaWYgd2UgaGF2ZSBt
b3JlIHRoYW4gb25lIHRvIHJldHVybi4KKyAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9j
a0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVy
Q3JlYXRlRW1wdHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2FtcGxlcy5zaXplKCksIDAsICZyYXdC
bG9ja0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAh
cmF3QmxvY2tCdWZmZXIpIHsKKyAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRSgiQ01C
bG9ja0J1ZmZlckNyZWF0ZUVtcHR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBjb21wbGV0ZUJsb2NrQnVmZmVycyA9IHJh
d0Jsb2NrQnVmZmVyOwogICAgIH0KKyAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBwYWNr
ZXRUaW1pbmdzOworICAgIFZlY3RvcjxzaXplX3Q+IHBhY2tldFNpemVzOworICAgIGZvciAoYXV0
byYgc2FtcGxlIDogc2FtcGxlcykgeworICAgICAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PihzYW1wbGUuZGF0YSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIGRhdGEgPSBzdGQ6OmdldDxSZWY8Y29uc3Qg
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+KHNhbXBsZS5kYXRhKTsKKyAgICAgICAgYXV0byBibG9j
a0J1ZmZlciA9IGRhdGEtPmNyZWF0ZUNNQmxvY2tCdWZmZXIoKTsKKyAgICAgICAgaWYgKCFibG9j
a0J1ZmZlcikgeworICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJ
RVIsICJjcmVhdGVDTUJsb2NrQnVmZmVyOiBmYWlsZWQgdG8gY3JlYXRlIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNvbXBsZXRlQmxvY2tCdWZmZXJz
KQorICAgICAgICAgICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSBXVEZNb3ZlKGJsb2NrQnVmZmVy
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1
ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShjb21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKSwgYmxv
Y2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOworICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9j
a0J1ZmZlck5vRXJyKSB7CisgICAgICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIsICJDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlOiBub3QgZW5v
dWdoIG1lbW9yeSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBwYWNrZXRUaW1pbmdzLmFwcGVuZCh7IFBBTDo6dG9DTVRpbWUoc2Ft
cGxlLmR1cmF0aW9uKSwgUEFMOjp0b0NNVGltZShzYW1wbGUucHJlc2VudGF0aW9uVGltZSksIFBB
TDo6dG9DTVRpbWUoc2FtcGxlLmRlY29kZVRpbWUpIH0pOworICAgICAgICBwYWNrZXRTaXplcy5h
cHBlbmQoZGF0YS0+c2l6ZSgpKTsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdT
YW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGlmIChhdXRvIGVyciA9IFBBTDo6Q01TYW1wbGVC
dWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb21wbGV0ZUJsb2NrQnVmZmVy
cy5nZXQoKSwgZm9ybWF0RGVzY3JpcHRpb24sIHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0VGlt
aW5ncy5zaXplKCksIHBhY2tldFRpbWluZ3MuZGF0YSgpLCBwYWNrZXRTaXplcy5zaXplKCksIHBh
Y2tldFNpemVzLmRhdGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcikpIHsKKyAgICAgICAgRVJST1JfTE9H
X0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5OiBm
YWlsZWQgdG8gY3JlYXRlIHNhbXBsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGluZm8tPmlzVmlkZW8oKSkgeworICAgICAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBQ
QUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShyYXdTYW1wbGVCdWZm
ZXIsIHRydWUpOworICAgICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlm
ICghYXR0YWNobWVudHNBcnJheSkgeworICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIsICJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXk6
IGZhaWxlZCB0byByZXRyaWV2ZSBhdHRhY2htZW50IGFycmF5Iik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0
YWNobWVudHNBcnJheSkpID09IHNhbXBsZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChDRkluZGV4
IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVu
dHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgICAgICBpZiAoIShzYW1w
bGVzW2ldLmZsYWdzICYgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMpKQorICAgICAg
ICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBs
ZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOworICAgICAgICB9CisgICAg
fQorCisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhp
cyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBpbmZvLT50cmFja0lELCBzYW1wbGVCdWZmZXIg
PSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlciksIHBvc2l0aW9uXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uKQor
ICAgICAgICAgICAgbWVkaWFTYW1wbGUtPnNldEJ5dGVSYW5nZU9mZnNldCgqcG9zaXRpb24pOwor
CisgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1w
bGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKKyAgICB9KTsKIH0KIAotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJh
dGlvbikKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKHVp
bnQ2NF90IHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgcGFkZGluZykKIHsKLSAgICBtX21pbmlt
dW1BdWRpb1NhbXBsZUR1cmF0aW9uID0gZHVyYXRpb247CisgICAgbV9jYWxsT25DbGllbnRUaHJl
YWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQs
IHBhZGRpbmddICgpIHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFj
aykKKyAgICAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBw
YWRkaW5nKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1N1
cHBvcnRlZFZpZGVvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiBrZXlJRCwgdWludDY0X3QgdHJhY2tJRCkKIHsKLSAgICByZXR1cm4g
bmFtZSA9PSAiVl9WUDgiIHx8IG5hbWUgPT0gIlZfVlA5IjsKKyAgICBpZiAobV9kaWRQcm92aWRl
Q29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spCisg
ICAgICAgIG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9y
VHJhY2tJRENhbGxiYWNrKFdURk1vdmUoa2V5SUQpLCB0cmFja0lEKTsKIH0KIAotYm9vbCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1l
KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMo
c3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcG9zaXRpb24pCiB7Ci0gICAgcmV0dXJuIG5hbWUgPT0g
IkFfVk9SQklTIiB8fCBuYW1lID09ICJBX09QVVMiOworICAgIGlmICghbV9hdWRpb0Zvcm1hdERl
c2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fYXVkaW9JbmZvKTsKKyAg
ICByZXR1cm5TYW1wbGVzKG1fYXVkaW9JbmZvLmdldCgpLCBtX3F1ZXVlZEF1ZGlvU2FtcGxlcy50
YWtlU2FtcGxlcygpLCBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsK
KyAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPSB7IH07Cit9CisKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFncyBhcHBlbmRGbGFncykK
K3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiZmxhZ3MoIiwgYXBw
ZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkgPyAiRGlzY29udGludWl0eSIg
OiAiIiwgIiksIHNpemUoIiwgc2VnbWVudC5zaXplKCksICIpIik7CisKKyAgICBpZiAoYXBwZW5k
RmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpCisgICAgICAgIG1fcGFyc2VyLnJl
c2V0KCk7CisKKyAgICBpZiAoaW50IGNvZGUgPSBtX3BhcnNlci5wYXJzZShXVEZNb3ZlKHNlZ21l
bnQpKSA8IDApIHsKKyAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIs
ICJzdGF0dXMuY29kZSgiLCBjb2RlLCAiKSIpOworICAgICAgICBtX2NhbGxPbkNsaWVudFRocmVh
ZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY29kZV0gewor
ICAgICAgICAgICAgaWYgKG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2sp
CisgICAgICAgICAgICAgICAgbV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFj
ayhjb2RlKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3Jv
dXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmlt
dW1TYW1wbGVEdXJhdGlvbi4KKyAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5vIG1v
cmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBlbWl0IGFueSBwZW5k
aW5nCisgICAgLy8gYXVkaW8gYnVmZmVycy4KKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMo
KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFEYXRhKCkKK3sKK30KKwordm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29sLCB1
aW50NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmludmFsaWRhdGUoKQoreworICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIG1fcGFyc2VyLmludmFsaWRhdGUoKTsKK30KKwor
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dn
ZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCit7CisgICAgbV9wYXJzZXIuc2V0TG9nZ2Vy
KGxvZ2dlciwgbG9nSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAg
bV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0
KGR1cmF0aW9uKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGU4
NzZhYjQxNGE0YWJiMzNkNTE4YzM3YjQxZmU1YTE0Nzc2YWI0OTYuLjgxMDdiNzA2ZTM1MTA3ZDI0
NDRlNzExYzhmZDM1NzAwYzc0M2VlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgK
QEAgLTI3LDE5ICsyNywxOSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2lu
Y2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgotI2luY2x1ZGUgPENvcmVNZWRpYS9D
TVRpbWUuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVNZWRpYVNQSS5oPgogI2luY2x1ZGUg
PHZhcmlhbnQ+CiAjaW5jbHVkZSA8d2VibS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPHdlYm0vc3Rh
dHVzLmg+CiAjaW5jbHVkZSA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgorI2luY2x1ZGUgPHd0
Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0
aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9j
a0J1ZmZlciAqQ01CbG9ja0J1ZmZlclJlZjsKIAogbmFtZXNwYWNlIHdlYm0gewogY2xhc3MgV2Vi
bVBhcnNlcjsKQEAgLTQ3LDQyICs0NywzNiBAQCBjbGFzcyBXZWJtUGFyc2VyOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291
cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKK2NsYXNzIFdlYk1QYXJz
ZXIgOiBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBjbGFzcyBTZWdtZW50UmVhZGVyOwotCi0gICAgc3RhdGljIGJvb2wg
aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyRW51
bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBl
Jik7Ci0gICAgc3RhdGljIFNwYW48Y29uc3QgQVNDSUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlw
ZXMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYpOworICAgIGNsYXNzIENhbGxiYWNrIHsK
KyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUm
KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3Vy
Y2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmKSA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3Qp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkRlY3J5cHQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEtleVJlcXVlc3RJbml0aWFsaXph
dGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ2NF90KSB7IH0KKyAg
ICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSA9IGRlZmF1bHQ7CisgICAgfTsKIAotICAgIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0oKTsKLSAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOworICAg
IFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKKyAgICB+V2ViTVBhcnNlcigpOwogCi0gICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBjbGFzcyBTZWdtZW50UmVhZGVyOwogCisgICAgaW50
IHBhcnNlKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmKTsKKyAgICB2b2lkIHJlc2V0U3Rh
dGUoKTsKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgY29u
c3Qgd2VibTo6U3RhdHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogCi0g
ICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiA9IFtdIHsgfSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6Tm9uZSkgZmluYWw7Ci0g
ICAgdm9pZCBmbHVzaFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKLSAgICB2b2lkIHNldFNob3Vs
ZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KSBmaW5hbDsKLSAgICBi
b29sIHNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KSBmaW5hbDsKLSAg
ICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGUoKSBm
aW5hbDsKKyAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWlu
dDY0X3QpOwogCi0gICAgdm9pZCBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKLSAgICB2b2lk
IHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKLSAgICAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlm
aWVyKSBmaW5hbDsKLQotICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+LCB1aW50NjRfdCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9m
ZnNldCk7Ci0gICAgdXNpbmcgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IEZ1bmN0aW9u
PHZvaWQodWludDY0X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBkaXNjYXJkUGFkZGluZyk+
OwotICAgIHZvaWQgc2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayhEaWRQYXJzZVRyaW1t
aW5nRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCi0gICAgewotICAgICAgICBtX2RpZFBhcnNlVHJp
bW1pbmdEYXRhQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9CisgICAgdm9pZCBz
ZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcik7CisgICAgY29u
c3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQor
ICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50
aWZpZXI7IH0KIAogICAgIGVudW0gY2xhc3MgRXJyb3JDb2RlIDogaW50MzJfdCB7CiAgICAgICAg
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk1FcnJvckNvZGVTdGFydCA9IDIwMDAsCkBAIC0xMjAsMTgg
KzExNCwxMiBAQCBwdWJsaWM6CiAgICAgY2xhc3MgVHJhY2tEYXRhIHsKICAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYXV0byBjcmVh
dGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRy
eSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRh
PgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKSAtPiBVbmlx
dWVSZWY8VHJhY2tEYXRhPgogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6VW5rbm93biwgcGFy
c2VyKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4oY29kZWNU
eXBlLCB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93biwgcGFyc2VyKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgICAgICBVbmtu
b3duLAotICAgICAgICAgICAgQXVkaW8sCi0gICAgICAgICAgICBWaWRlbywKLSAgICAgICAgfTsK
LQotICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJh
Y2tFbnRyeSYgdHJhY2tFbnRyeSwgVHlwZSB0cmFja1R5cGUsIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0mIHBhcnNlcikKKyAgICAgICAgVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0
IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNr
VHlwZSwgV2ViTVBhcnNlciYgcGFyc2VyKQogICAgICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNU
eXBlIH0KICAgICAgICAgICAgICwgbV90cmFjayB7IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0Vu
dHJ5IH0gfQogICAgICAgICAgICAgLCBtX3RyYWNrVHlwZSB7IHRyYWNrVHlwZSB9CkBAIC0xNDIs
MTEzICsxMzAsMTEyIEBAIHB1YmxpYzoKIAogICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVjOyB9CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkg
eyByZXR1cm4gbV90cmFjazsgfQotICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhY2tUeXBlOyB9CisgICAgICAgIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBlOyB9CiAKLSAgICAgICAgUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3Jt
YXREZXNjcmlwdGlvbjsgfQotICAgICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiYmIGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVz
Y3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsgfQorICAgICAgICBSZWZQdHI8VHJhY2tJ
bmZvPiBmb3JtYXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRp
b24uY29weVJlZigpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRy
YWNrSW5mbz4mJiBkZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbV9mb3JtYXRE
ZXNjcmlwdGlvbiA9IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9mb3JtYXRE
ZXNjcmlwdGlvbi0+dHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgICAg
IH0KIAotICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNlcjsgfQorICAgICAgICBXZWJNUGFyc2VyJiBwYXJzZXIoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNlcjsgfQogCi0gICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVG
cmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2
NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KQorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBj
b25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEm
LCB1aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVz
KHdlYm06OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogICAgICAgICB9CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVkKCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0
Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2NvbXBsZXRl
QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxl
cyA9IHsgfTsKICAgICAgICAgfQorCiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXNldENvbXBsZXRlZCgpOworICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRG
cmFtZXNTdGF0ZSgpOwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51
bGxvcHQ7CiAgICAgICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAgICAgICAg
bV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2tCdWZmZXIucmVzZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHJhaW5QZW5kaW5n
U2FtcGxlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlcy5zaXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wYXJz
ZXIucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpLCBtX2xh
c3RQb3NpdGlvbik7CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAg
ICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZm
ZXJSZWY+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBsZW5ndGgpIGNvbnN0OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250aWd1b3Vz
Q29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsK
ICAgICAgICAgd2VibTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qg
d2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAg
IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAg
ICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAg
Ly8gSW5pdGlhbCBhbGxvY2F0aW9uIHNpemUgb2YgZW1wdHkgQ01CbG9ja0J1ZmZlci4KLSAgICAg
ICAgc2l6ZV90IG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5IHsgMCB9OworICAgICAgICBSZWZQdHI8
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOworICAgICAgICBN
ZWRpYVNhbXBsZXNCbG9jayBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzOworICAgICAgICB1aW50NjRf
dCBtX2xhc3RQb3NpdGlvbiB7IDAgfTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENvZGVjVHlw
ZSBtX2NvZGVjOwogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1fdHJhY2s7Ci0gICAgICAgIFR5
cGUgbV90cmFja1R5cGU7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBtX2Zvcm1hdERlc2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJl
Zj4gbV9jdXJyZW50QmxvY2tCdWZmZXI7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0m
IG1fcGFyc2VyOworICAgICAgICBjb25zdCBUcmFja0luZm86OlRyYWNrVHlwZSBtX3RyYWNrVHlw
ZTsKKyAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAg
ICAgU2hhcmVkQnVmZmVyQnVpbGRlciBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgV2Vi
TVBhcnNlciYgbV9wYXJzZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBs
ZXRlUGFja2V0U2l6ZTsKICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgY3VycmVudGx5IGluY29tcGxl
dGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAgc2l6ZV90IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAg
fTsKICAgICB9OwogCiAgICAgY2xhc3MgVmlkZW9UcmFja0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRh
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29k
ZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4KKyAgICAgICAg
c3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVv
VHJhY2tEYXRhPgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxW
aWRlb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOwogICAgICAgICB9
CiAKLSAgICAgICAgVmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2Vi
bTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2Vy
KQotICAgICAgICAgICAgOiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpW
aWRlbywgcGFyc2VyKQorICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBl
LCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIp
CisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5m
bzo6VHJhY2tUeXBlOjpWaWRlbywgcGFyc2VyKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3
ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFs
OwotCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3Qg
Q01UaW1lJiwgaW50LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJik7CiAgICAgICAgIGNvbnN0
IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0K
KyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29u
c3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50
KSBmaW5hbDsKKyAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7
CiAKICNpZiBFTkFCTEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIg
bV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNlbmRp
ZgogICAgIH07CiAKICAgICBjbGFzcyBBdWRpb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEg
ewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2Rl
Y1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKSAtPiBVbmlxdWVS
ZWY8QXVkaW9UcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUg
Y29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2Vy
JiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJh
Y2tFbnRyeSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
cGFyc2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBj
b2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAg
ICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OkF1ZGlvLCBw
YXJzZXIgfQotICAgICAgICAgICAgLCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IG1pbmltdW1T
YW1wbGVEdXJhdGlvbiB9CisgICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5
cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNl
cikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhIHsgY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUcmFj
a0luZm86OlRyYWNrVHlwZTo6QXVkaW8sIHBhcnNlciB9CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkg
ZmluYWw7Ci0gICAgICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKLSAgICAgICAgdm9p
ZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5n
ZU9mZnNldCA9IHN0ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRlOgorICAgICAgICB3ZWJtOjpT
dGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAg
ICB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3Qg
Y2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQog
Ci0gICAgICAgIENNVGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7Ci0gICAgICAgIENNVGlt
ZSBtX3BhY2tldER1cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9m
ZnNldCB7IDAgfTsKKyAgICAgICAgTWVkaWFUaW1lIG1fcGFja2V0RHVyYXRpb247CiAgICAgICAg
IHVpbnQ4X3QgbV9mcmFtZXNQZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFt
ZUR1cmF0aW9uIHsgMF9zIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7
Ci0gICAgICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKICAg
ICAgICAgc2l6ZV90IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07Ci0gICAgICAgIC8v
IEZJWE1FOiAwLjUgLSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlvbiBwZXIgc2FtcGxl
IGJ1ZmZlciwgYnV0IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZpcnN0Ci0gICAgICAg
IC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRpYVNhbXBsZUN1cnNv
cjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KLSAgICAgICAg
ZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKIAotICAgIGNvbnN0
IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KLSAg
ICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9Ci0KIHByaXZhdGU6Ci0KICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVt
YmVyKHVpbnQ2NF90KTsKLQogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkVmlkZW9Db2RlYyhT
dHJpbmdWaWV3KTsKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5n
Vmlldyk7CiAKQEAgLTI2OCw3ICsyNTUsNyBAQCBwcml2YXRlOgogICAgIHdlYm06OlN0YXR1cyBP
bkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6
QmxvY2tHcm91cCYpOwogICAgIHdlYm06OlN0YXR1cyBPbkZyYW1lKGNvbnN0IHdlYm06OkZyYW1l
TWV0YWRhdGEmLCB3ZWJtOjpSZWFkZXIqLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpIGZpbmFs
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxpemF0aW9uU2VnbWVudD4gbV9pbml0aWFs
aXphdGlvblNlZ21lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclBhcnNlcjo6
SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVudDsKICAgICBWZWN0
b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWY8U2hhcmVkQnVmZmVyPj4+IG1fa2V5SWRzOwogICAg
IHdlYm06OlN0YXR1cyBtX3N0YXR1czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VibTo6V2VibVBh
cnNlcj4gbV9wYXJzZXI7CkBAIC0yODUsMTIgKzI3Miw2OCBAQCBwcml2YXRlOgogICAgIHVzaW5n
IEJsb2NrVmFyaWFudCA9IHN0ZDo6dmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxv
Y2s+OwogICAgIHN0ZDo6b3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJlbnRCbG9jazsKICAg
ICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247Ci0gICAgZmxvYXQg
bV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIFJlZlB0cjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxw
dHIgfTsKICAgICB1aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CisgICAgQ2Fs
bGJhY2smIG1fY2FsbGJhY2s7Cit9OworCitjbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDog
cHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgV2ViTVBhcnNlcjo6Q2FsbGJhY2sgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBib29sIGlzV2ViTUZv
cm1hdFJlYWRlckF2YWlsYWJsZSgpOworICAgIHN0YXRpYyBNZWRpYVBsYXllckVudW1zOjpTdXBw
b3J0c1R5cGUgaXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYpOworICAg
IHN0YXRpYyBTcGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlNRVR5cGVzKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBj
cmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKKworICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0o
KTsKKyAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBU
eXBlOjpXZWJNOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRhKFNlZ21lbnQm
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBlbmRGbGFncyA9IEFw
cGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ01lZGlhRGF0YSgp
IGZpbmFsOworICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9v
bCwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRy
YWNrSUQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFs
IHsgbV9wYXJzZXIucmVzZXRTdGF0ZSgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7
CisKKyAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVuY3Rpb248dm9p
ZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRkaW5nKT47Cisg
ICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNlVHJpbW1pbmdE
YXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1fZGlkUGFyc2VUcmltbWlu
Z0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIH0KKworICAgIHZvaWQgZmx1
c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+ID0gc3RkOjpudWxs
b3B0KTsKKyAgICB2b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKKyAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25z
dCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsKKyAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigp
IGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQorCitwcml2YXRlOgor
ICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBwYXJzZWRJbml0aWFsaXphdGlv
bkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJikgZmluYWw7
CisgICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3Qp
IGZpbmFsOworICAgIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9k
aWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2Fs
bGJhY2s7IH0KKyAgICB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9y
VHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBw
YXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworICAg
IAorICAgIHZvaWQgcmV0dXJuU2FtcGxlcyhjb25zdCBUcmFja0luZm8qLCBNZWRpYVNhbXBsZXNC
bG9jazo6U2FtcGxlc1ZlY3RvciYmLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmLCBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiA9IHN0ZDo6bnVsbG9wdCk7CisKICAgICBEaWRQYXJzZVRyaW1taW5nRGF0
YUNhbGxiYWNrIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjazsKKyAgICBXZWJNUGFyc2Vy
IG1fcGFyc2VyOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2F1ZGlv
Rm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV9hdWRpb0lu
Zm87CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fdmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX3ZpZGVvSW5mbzsKKyAg
ICBNZWRpYVRpbWUgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDk2MDAwLCA0ODAwMCB9
OworICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fcXVldWVkQXVkaW9TYW1wbGVzOworICAgIE1lZGlh
VGltZSBtX3F1ZXVlZEF1ZGlvRHVyYXRpb247CisgICAgUmVmUHRyPGNvbnN0IExvZ2dlcj4gbV9s
b2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9OwogfTsK
IAogfQpAQCAtMjk5LDEyICszNDIsMTIgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKQogICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXImIHBhcnNlcikgeyByZXR1cm4gcGFyc2Vy
LnR5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI6OlR5cGU6OldlYk07IH0KIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YSkKLSAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OlZpZGVvOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVv
VHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXZWJNUGFy
c2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgp
ID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpWaWRlbzsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhKQotICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEm
IHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW87IH0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGEp
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29y
ZTo6VHJhY2tJbmZvOjpUcmFja1R5cGU6OkF1ZGlvOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29h
LmgKaW5kZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0NGI2OWE4ODc2ZC4uZDAwNDFi
Zjg5YjMwYzJjYzYxODc5MDhmNGJlNzZhM2FiZmY0MjY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
CkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8
d2VibS9kb21fdHlwZXMuaD4KIAotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXRE
ZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKLQogbmFtZXNwYWNlIHZwOV9wYXJz
ZXIgewogY2xhc3MgVnA5SGVhZGVyUGFyc2VyOwogfQpAQCAtNDAsNiArMzgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBNZWRpYUNhcGFiaWxpdGllc0luZm87CiBzdHJ1Y3QgVmlk
ZW9Db25maWd1cmF0aW9uOworc3RydWN0IFZpZGVvSW5mbzsKIAogV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZWdpc3RlcldlYktpdFZQOURlY29kZXIoKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0
ZXJXZWJLaXRWUDhEZWNvZGVyKCk7CkBAIC01MCw3ICs0OSw3IEBAIGJvb2wgaXNWUDhEZWNvZGVy
QXZhaWxhYmxlKCk7CiBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQo
Y29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsKIHN0ZDo6b3B0aW9uYWw8TWVkaWFD
YXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVycyhjb25zdCBWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCi1SZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVh
ZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06
OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZv
RnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImLCBj
b25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogc3RydWN0IFZQOEZyYW1lSGVh
ZGVyIHsKICAgICBib29sIGtleWZyYW1lIHsgZmFsc2UgfTsKQEAgLTY1LDggKzY0LDggQEAgc3Ry
dWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29sIG5lZWRzQ2xhbXBpbmcgeyBmYWxzZSB9Owog
fTsKIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1
aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOwotUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcihjb25z
dCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwor
c3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1
aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOworUmVmPFZpZGVvSW5mbz4gY3Jl
YXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdl
Ym06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBWUDlU
ZXN0aW5nT3ZlcnJpZGVzIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KaW5kZXggNWMw
ZGZhZmRiMmU2N2YwNDgwNTA1ZmVhYzY2YTRlZDU0NGEyOWUzMy4uY2Y4YzliMjEyOGMwMTQ4ZDVh
OTBkOWQ1MTU2ZGY2OWY0YTBmYmQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KQEAgLTMxLDEx
ICszMSwxMiBAQAogI2ltcG9ydCAiRm91ckNDLmgiCiAjaW1wb3J0ICJMaWJXZWJSVENQcm92aWRl
ci5oIgogI2ltcG9ydCAiTWVkaWFDYXBhYmlsaXRpZXNJbmZvLmgiCisjaW1wb3J0ICJNZWRpYVNh
bXBsZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlNjcmVlblByb3Bl
cnRpZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU3lzdGVtQmF0dGVy
eS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCi0jaW1wb3J0IDxDb3JlTWVkaWEv
Q01Gb3JtYXREZXNjcmlwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcu
aD4KICNpbXBvcnQgPHdlYm0vdnA5X2hlYWRlcl9wYXJzZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0
L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KQEAgLTM1MCwyNSArMzUxLDM1IEBAIHN0YXRp
YyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbnN0IFByaW1hcmllcyYgY29lZmZp
Y2llbnRzKQogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQ
cmltYXJpZXModWludDhfdCBwcmltYXJpZXMpCitzdGF0aWMgUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzIGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1h
cmllcykKIHsKICAgICBzd2l0Y2ggKHByaW1hcmllcykgewogICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJp
bWFyaWVzOjpCVF80NzBfNl9NOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzOjpCdDQ3MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6
OkJ0NDcwYmc7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAx
Xzc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcw
bTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA6
Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbTsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpGaWxtOgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpGaWxtOworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDIwMjA7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfNDI4XzE6CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlU3Q0MjgxOwogICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgotICAgICAg
ICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0RDSV9QMzsK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVScDQzMTsK
ICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9FR180MzJfMToK
LSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19Q
M19ENjU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9O
b25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2Ny
aXB0aW9uQ29sb3JQcmltYXJpZXNfSVRVX1JfMjAyMDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9Db2xvclByaW1hcmllczo6U21wdGVFZzQzMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhvc3Bob3JzOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOwogICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hh
cmFjdGVyaXN0aWNzKQpAQCAtNDExLDI5ICs0MjIsNDUgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mm
IGMKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVu
Y3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCitzdGF0aWMgUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzIGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyh1aW50OF90IGNoYXJhY3RlcmlzdGljcykKIHsKICAgICBzd2l0Y2ggKGNoYXJhY3Rl
cmlzdGljcykgewogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0
aW9uX0lUVV9SXzcwOV8yOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTIyY3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZTsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFfNzoK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21w
dGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5j
dGlvbl9TTVBURV8yNDBNXzE5OTU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9y
bWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzIwODRfUFE7CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMjQwbTsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Okxp
bmVhcjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpM
b2dyaXRobWljOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpMb2c7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6TG9ncml0aG1pY19TcXJ0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzQ6CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjQ7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOgorICAgICAg
ICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDEzNjFFeHRl
bmRlZENvbG91ckdhbXV0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMGJpdDoKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEwYml0OwogICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJi
aXQ6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9JVFVfUl8yMDIwOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCdDIwMjBfMTJiaXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDIwODQ7CiAgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE6Ci0g
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9T
TVBURV9TVF80MjhfMTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U21wdGVTdDQyODE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZv
cm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgot
ICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxscHRyOwotICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjoKLSAgICAgICAgcmV0
dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0xpbmVhcjsKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0
ZEI2N0hsZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2ll
bnRzKGNvbnN0IE1hdHJpeENvZWZmaWNpZW50cyYgY29lZmZpY2llbnRzKQpAQCAtNDYyLDIxICs0
ODksMzEgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbnN0
IE1hdHJpeENvZWZmaWNpZW50cyYgY29lZmZpY2llbnQKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0
cmluZ1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHVpbnQ4X3QgY29lZmZpY2llbnRzKQorc3Rh
dGljIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMgY29udmVydFRvUGxhdGZvcm1WaWRl
b01hdHJpeENvZWZmaWNpZW50cyh1aW50OF90IGNvZWZmaWNpZW50cykKIHsKICAgICBzd2l0Y2gg
KGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2ll
bnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpJZGVudGl0eToKKyAgICAgICAgcmV0dXJu
IFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlJnYjsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY6CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkNDOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRl
b01hdHJpeENvZWZmaWNpZW50czo6RmNjOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4
Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OkJ0NDcwYmc7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzYwMV83OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZ
Q2JDck1hdHJpeF9JVFVfUl82MDFfNDsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENv
ZWZmaWNpZW50czo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4X0lUVV9SXzcwOV8yOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50czo6U21wdGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5NTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1h
dHJpeENvZWZmaWNpZW50czo6WUNnQ286CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpZQ2dDbzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENv
ZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWlu
YW5jZTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAy
MF9Db25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDIwMjBDb25zdGFudEx1bWluYW5jZTsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVk
OwogICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252
ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3Qg
eSkKQEAgLTQ5MSw3ICs1MjgsNyBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdY
WVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkKICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0
ZWQ7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIHJlY29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBo
ZWlnaHQpCitzdGF0aWMgUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiByZWNv
cmQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogewogICAgIC8vIFJlZjogIlZQIENv
ZGVjIElTTyBNZWRpYSBGaWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgogICAg
IC8vIDxodHRwczovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+CkBAIC01MjAsMTIgKzU1
NywxNCBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maQogICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4
aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBi
ZWxvdwogICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgogCisgICAgYXV0byB2
aWRlb0luZm8gPSBWaWRlb0luZm86OmNyZWF0ZSgpOworICAgIHZpZGVvSW5mby0+c2l6ZSA9IHZp
ZGVvSW5mby0+ZGlzcGxheVNpemUgPSB7IGZsb2F0KHdpZHRoKSwgZmxvYXQoaGVpZ2h0KSB9Owor
CiAgICAgY29uc3RleHByIHNpemVfdCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9
IDEyOwogCiAgICAgdWludDMyX3QgdmVyc2lvbkFuZEZsYWdzID0gMSA8PCAyNDsKICAgICB1aW50
OF90IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UgPSAoMHhGICYgcmVjb3JkLmJpdERlcHRoKSA8PCA0
IHwgKDB4NyAmIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZykgPDwgMSB8ICgweDEgJiByZWNvcmQu
dmlkZW9GdWxsUmFuZ2VGbGFnKTsKICAgICB1aW50MTZfdCBjb2RlY0ludGlhbGl6YXRpb25EYXRh
U2l6ZSA9IDA7Ci0KICAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlC
dWZmZXI6OmNyZWF0ZShWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQ
Q29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplKTsKICAgICB2aWV3LT5zZXQoMCwgdmVyc2lv
bkFuZEZsYWdzLCBmYWxzZSk7CiAgICAgdmlldy0+c2V0KDQsIHJlY29yZC5wcm9maWxlLCBmYWxz
ZSk7CkBAIC01MzUsNDYgKzU3NCwxNiBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maQogICAgIHZp
ZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsKICAgICB2
aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cywgZmFsc2UpOwogICAgIHZpZXct
PnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUsIGZhbHNlKTsKLQotICAgIGF1dG8g
ZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBV
SW50OCAqKXZpZXctPmRhdGEoKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKSk7Ci0KLSAgICBDRlR5cGVS
ZWYgY29uZmlndXJhdGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OwotICAgIENGVHlwZVJl
ZiBjb25maWd1cmF0aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKLSAgICBhdXRvIGNvbmZp
Z3VyYXRpb25EaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgY29uZmlndXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9M
RU5HVEgoY29uZmlndXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBWZWN0b3I8Q0ZUeXBl
UmVmPiBleHRlbnNpb25zS2V5cyB7IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25f
U2FtcGxlRGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9OwotICAgIFZlY3RvcjxDRlR5cGVSZWY+
IGV4dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07Ci0KLSAgICBp
ZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVs
bFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChQQUw6OmtDTUZvcm1hdERl
c2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKLSAgICAgICAgZXh0ZW5zaW9uc1Zh
bHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtQ29s
b3JQcmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1h
cmllcykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29s
b3JQcmltYXJpZXNLZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9y
UHJpbWFyaWVzKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBj
b252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24ocmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
KSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2Zl
ckZ1bmN0aW9uS2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2Zl
ckZ1bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NN
WUNiQ1JNYXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5z
aW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBl
eHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7Ci0gICAgfQotCi0gICAgYXV0byBleHRl
bnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9u
c0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25S
ZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIENNVmlkZW9Db2RlY1R5cGUgY29k
ZWMgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5IiA/IGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSA6
ICd2cDA4JzsKLSAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBleHRlbnNpb25zLmdl
dCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gYWRvcHRDRihmb3JtYXREZXNjcmlwdGlvbik7CisgICAgdmlkZW9JbmZvLT5hdG9tRGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVpbnQ4X3QqPih2aWV3LT5kYXRh
KCkpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5mdWxs
UmFuZ2UgPSByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpGdWxsUmFuZ2U7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnByaW1hcmllcyA9IGNvbnZl
cnRUb1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpOwor
ICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS50cmFuc2ZlciA9IGNvbnZlcnRUb1BsYXRmb3JtVmlk
ZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mp
OworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5tYXRyaXggPSBjb252ZXJ0VG9QbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzKHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpOworICAgIHZp
ZGVvSW5mby0+Y29kZWNOYW1lID0gcmVjb3JkLmNvZGVjTmFtZSA9PSAidnAwOSIgPyAndnAwOScg
OiAndnAwOCc7CisgICAgcmV0dXJuIHZpZGVvSW5mbzsKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNl
cihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6
RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJz
ZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCiB7CiAgICAgVlBDb2RlY0Nv
bmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOwogCkBAIC02MDYsMTAgKzYxNSwxMCBAQCBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5
SGVhZGVyUGFyc2VyKGNvbgogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChy
ZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOwogfQogCi1zdGQ6Om9wdGlv
bmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKHVpbnQ4X3QqIGZyYW1lRGF0
YSwgc2l6ZV90IGZyYW1lU2l6ZSkKK3N0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNl
VlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXpl
KQogewogICAgIC8vIFZQOCBmcmFtZSBoZWFkZXJzIGFyZSBkZWZpbmVkIGluIFJGQyA2Mzg2OiA8
aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzODY+LgogCkBAIC02NzEsNyArNjgwLDcg
QEAgc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50
OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmEKICAgICByZXR1cm4gaGVhZGVyOwogfQogCi1SZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1l
bnQ8Q29sb3VyPiYgY29sb3IpCitSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4
SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8
Q29sb3VyPiYgY29sb3IpCiB7CiAgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3Jk
OwogICAgIHJlY29yZC5jb2RlY05hbWUgPSAidnAwOCI7CkBAIC03MDEsNyArNzEwLDcgQEAgUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVZQOEhlYWRlcihjb25zdCBWUDgKICAgICAgICAgICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9
IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkpOwog
ICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29u
ZmlndXJhdGlvblJlY29yZChyZWNvcmQsIGhlYWRlci53aWR0aCwgaGVhZGVyLmhlaWdodCk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChy
ZWNvcmQsIGhlYWRlci53aWR0aCwgaGVhZGVyLmhlaWdodCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGll
c0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVk
aW9VdGlsaXRpZXNDb2NvYS5oCmluZGV4IDg3MTA0ZDhiN2IzNTdjMTYwYjZkY2NjNDFiZmUxZjg5
ZTBhNmMyNzEuLmE5ODA5OGM1YTM5ZmNiNDUwYjJmZjljNzYxMGQ5NzRlODI0NmQ0ZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0
aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaApAQCAtMjcsMTYgKzI3LDE3IEBACiAKICNpZiBQ
TEFURk9STShDT0NPQSkKIAotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAKIGNsYXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Ci10eXBlZGVmIGNv
bnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9u
UmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBBdWRpb0luZm87CisKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7CiBXRUJDT1JFX0VYUE9S
VCBib29sIHJlZ2lzdGVyVm9yYmlzRGVjb2RlcklmTmVlZGVkKCk7Ci1SZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXpl
X3QsIGNvbnN0IHZvaWQqKTsKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZVZvcmJpc0F1ZGlvSW5m
byhzaXplX3QsIGNvbnN0IHZvaWQqKTsKIAogc3RydWN0IE9wdXNDb29raWVDb250ZW50cyB7CiAg
ICAgdWludDhfdCB2ZXJzaW9uIHsgMCB9OwpAQCAtNTUsOCArNTYsMTAgQEAgc3RydWN0IE9wdXND
b29raWVDb250ZW50cyB7CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNPcHVzRGVjb2RlckF2YWls
YWJsZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCByZWdpc3Rlck9wdXNEZWNvZGVySWZOZWVkZWQo
KTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtPcHVzSGVhZGVyU2l6ZSA9IDE5Oworc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3Qga09wdXNNaW5pbXVtRnJhbWVEYXRhU2l6ZSA9IDI7CiBib29sIHBh
cnNlT3B1c1ByaXZhdGVEYXRhKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHBy
aXZhdGVEYXRhLCBzaXplX3QgZnJhbWVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogZnJhbWVEYXRhLCBP
cHVzQ29va2llQ29udGVudHMmKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29udGVudHMm
KTsKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29uc3QgT3B1c0Nvb2tp
ZUNvbnRlbnRzJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQppbmRl
eCA3ZTBhZmIyOTBkZDg1YTc3ZjliZWZmZjQ5NDdhNDdiNzUzNWViMmY0Li42NjA5ZjRhZWI2N2Ey
ZGY2NDFmMDcyZTU4MTYwZjlhZjVkMzZkZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXND
b2NvYS5tbQpAQCAtMzAsMTIgKzMwLDEzIEBACiAKICNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIK
ICNpbXBvcnQgIk1lZGlhVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1lZGlhU2Vzc2lv
bk1hbmFnZXIuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCA8QXVkaW9Ub29s
Ym94L0F1ZGlvQ29kZWMuaD4KICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVudC5o
PgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+Ci0jaW1wb3J0IDxDb3JlTWVk
aWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgogI2ltcG9ydCA8ZGxmY24uaD4KICNpbXBvcnQgPHd0
Zi9GbGlwQnl0ZXMuaD4KICNpbXBvcnQgPHd0Zi9TZWNvbmRzLmg+CkBAIC03Niw3ICs3Nyw3IEBA
IHN0YXRpYyBib29sIHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoY29uc3QgY2hhciogZGVjb2Rlck5h
bWUsIE9TVHlwZSBkZWNvZGVyVHlwZSkKICNlbmRpZgogfQogCi1zdGF0aWMgUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3Jt
YXQoT1NUeXBlIGZvcm1hdElELCBWZWN0b3I8dWludDhfdD4mJiBtYWdpY0Nvb2tpZSkKK3N0YXRp
YyBSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoT1NUeXBlIGZvcm1h
dElELCBWZWN0b3I8dWludDhfdD4mJiBtYWdpY0Nvb2tpZSkKIHsKICAgICBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24gYXNiZCB7IH07CiAgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsK
QEAgLTg3LDggKzg4LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0
aW9uKENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihhc2JkKSwgbWFnaWNDb29raWUuc2l6ZSgpLCBt
YWdpY0Nvb2tpZS5kYXRhKCkpOworICAgIGF1dG8gYXVkaW9JbmZvID0gQXVkaW9JbmZvOjpjcmVh
dGUoKTsKKyAgICBhdWRpb0luZm8tPmNvZGVjTmFtZSA9IGZvcm1hdElEOworICAgIGF1ZGlvSW5m
by0+cmF0ZSA9IGFzYmQubVNhbXBsZVJhdGU7CisgICAgYXVkaW9JbmZvLT5jaGFubmVscyA9IGFz
YmQubUNoYW5uZWxzUGVyRnJhbWU7CisgICAgYXVkaW9JbmZvLT5mcmFtZXNQZXJQYWNrZXQgPSBh
c2JkLm1GcmFtZXNQZXJQYWNrZXQ7CisgICAgYXVkaW9JbmZvLT5iaXREZXB0aCA9IDE2OworICAg
IGF1ZGlvSW5mby0+Y29va2llRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUobWFn
aWNDb29raWUpKTsKKyAgICByZXR1cm4gYXVkaW9JbmZvOwogfQorCiAjZW5kaWYgLy8gRU5BQkxF
KFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCiAKICNpZiBFTkFCTEUoT1BVUykKQEAgLTIwMCw3ICsy
MDksNyBAQCBib29sIHBhcnNlT3B1c1ByaXZhdGVEYXRhKHNpemVfdCBjb2RlY1ByaXZhdGVTaXpl
LCBjb25zdCB2b2lkKiBjb2RlY1ByaXZhdGVEYXRhLAogCiAgICAgYXV0byogcHJpdmF0ZURhdGFQ
dHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oY29kZWNQcml2YXRlRGF0YSk7CiAKLSAg
ICBpZiAoY29kZWNQcml2YXRlU2l6ZSA8IDE5KQorICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwg
a09wdXNIZWFkZXJTaXplKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMS4gTWFnaWMg
U2lnbmF0dXJlOgpAQCAtMzYyLDcgKzM3MSw3IEBAIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2Rlcklm
TmVlZGVkKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRz
JiBjb29raWVDb250ZW50cykKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZU9wdXNBdWRpb0luZm8o
Y29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJiBjb29raWVDb250ZW50cykKIHsKICNpZiBFTkFCTEUo
T1BVUykKICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKQEAgLTM3Miw3ICszODEs
NyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9y
bWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0NvbwogICAgIGlmICghY29va2llRGF0YS5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0
RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKKyAgICBy
ZXR1cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRh
KSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb29raWVDb250ZW50cyk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC00NjUsNyArNDc0LDcgQEAgYm9vbCByZWdpc3RlclZvcmJpc0RlY29kZXJJ
Zk5lZWRlZCgpCiAjZW5kaWYKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXZhdGVEYXRhU2l6
ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3Ji
aXNBdWRpb0luZm8oc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURh
dGEpCiB7CiAjaWYgRU5BQkxFKFZPUkJJUykKICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWls
YWJsZSgpKQpAQCAtNDc1LDcgKzQ4NCw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2CiAgICAg
aWYgKCFjb29raWVEYXRhLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCgndm9yYicsIFdURk1v
dmUoY29va2llRGF0YSkpOworICAgIHJldHVybiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ3Zv
cmInLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByaXZh
dGVEYXRhU2l6ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5
dGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCmluZGV4IDc4ZjczMTM0Y2U2YTdhMjE0Y2RjOWRlMDVj
NDc1MzcyZTE3YzlhM2QuLjg5Yzc5MmZlNWQ0NWU0NTk4ODQxNDNmNTQ0MjkwMTZkNjcyYzRlNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcApAQCAtMzQsOCArMzQsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBNZWRpYVNh
bXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwg
TVRQbHVnaW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAg
OiBNZWRpYVNhbXBsZUFWRk9iakMobnVsbHB0cikKLSAgICAsIG1fcHJlc2VudGF0aW9uVGltZShz
YW1wbGUucHJlc2VudGF0aW9uVGltZSgpKQorICAgIDogbV9wcmVzZW50YXRpb25UaW1lKHNhbXBs
ZS5wcmVzZW50YXRpb25UaW1lKCkpCiAgICAgLCBtX2RlY29kZVRpbWUoc2FtcGxlLmRlY29kZVRp
bWUoKSkKICAgICAsIG1fZHVyYXRpb24oc2FtcGxlLmR1cmF0aW9uKCkpCiAgICAgLCBtX2J5dGVS
YW5nZSgqc2FtcGxlLmJ5dGVSYW5nZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2Uu
aAppbmRleCBiNjZmM2EzNWE5NmY3YjVkNWY5N2FiZDZlZGEwMDI2MTU4MjZlMWUyLi5jNWM4YTI1
YzgxODU0M2Y1ZTg2MzhiYmMwZTBiYTgzYzY3NTY5ZjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1w
bGVCeXRlUmFuZ2UuaApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
Y2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFT
YW1wbGVBVkZPYmpDIHsKK2NsYXNzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6Ok1lZGlhU2FtcGxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVn
aW5CeXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCiAgICAgewpAQCAt
NTUsNiArNTUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0
IE1lZGlhVGltZSYpIGZpbmFsOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKIAorICAgIGJvb2wgaXNEaXZpc2FibGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFT
YW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVz
ZW50YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRp
c3BsYXlpbmdDb3B5KCkgY29uc3QgeyByZXR1cm4gKmNvbnN0X2Nhc3Q8TWVkaWFTYW1wbGVCeXRl
UmFuZ2UqPih0aGlzKTsgfQorCiBwcml2YXRlOgogICAgIE1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1l
ZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50NjRfdCB0cmFja0lEKTsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY3MWVl
ZjU2N2U1YzNiYjI3MGRkOWZiYTBmNWRhMzM4MTYzZWVlZTQuLjUwMDczMzU5MGVmODZiMzY2M2M0
OGIxZmRmMjk2ZGY2NWQ5YjM3OTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2
ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSBjb252ZXJzaW9uIHRvIENNVGltZSBpbmNvcnJlY3RseSBjcmVhdGVzIGEgdmFsaWQgdGltZS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3Mwor
ICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxNDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZseS1ieSBmaXhlczogQVZGb3VuZGF0aW9uU29mdExp
bmtUZXN0IHdhc24ndCBiZWluZyBjb21waWxlZAorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jb2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW06IEFkZGVkLgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKKzIwMjItMDItMjMgIEplYW4tWXZlcyBBdmVuYXJk
ICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBjb252ZXJ0IEZyYWdt
ZW50ZWRTaGFyZWRCdWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIw
MjItMDMtMDQgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtGbGF0cGFrIFNES10gVXBncmFkZSBmcm9tIGxsdm0xMiB0byBsbHZtMTMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggODg5NGZiZDRmZGNlNWU2N2IzZDQzNzcyYWRmOWIwNmIzNTAxOTU0
ZC4uM2RlYzBjZWU3OTNjMDY1MTAwY2EzZTEzZThjZWU2ZjkyY2EzODA0YyAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTI2Miw2ICsyNjIsOCBAQAogCQk1MTA0Nzc3MzFEMjk4REREMDA5NzQ3
RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNDc3NzAxRDI5OEQ4NTAwOTc0N0VC
IC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtc2htICovOyB9OwogCQk1MTA0Nzc3NDFEMjk4
REREMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy13YWwgaW4gQ29weSBSZXNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNDc3NzExRDI5OEQ4
NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovOyB9OwogCQk1MTA0
Nzc3NzFEMjk4RTcyMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA0Nzc3NjFEMjk4
RTU3MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCAqLzsgfTsKKwkJNTEwQTY2N0Iy
N0QzMDFBQzAwRDIyNjI5IC8qIENvcmVNZWRpYVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE2NjdBMjdEMkZDN0EwMEQyMjYyOSAv
KiBDb3JlTWVkaWFVdGlsaXRpZXMubW0gKi87IH07CisJCTUxMEE2NjdDMjdEMzAxQzYwMEQyMjYy
OSAvKiBBVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzExREY1MTIyNkE5NUZCMDAzREQyRjcgLyogQVZGb3Vu
ZGF0aW9uU29mdExpbmtUZXN0Lm1tICovOyB9OwogCQk1MTBBOTFGODI0RDM2MjIxMDBCRkQ4OUMg
LyogU29ueUR1YWxTaG9jazMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTBBOTFGNzI0RDM2MjE5MDBCRkQ4OUMgLyogU29ueUR1YWxTaG9jazMubW0g
Ki87IH07CiAJCTUxMEE5MjBBMjRENTA0ODkwMEJGRDg5QyAvKiBMb2dpdGVjaEYzMTAubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBOTIwOTI0RDUw
NDgzMDBCRkQ4OUMgLyogTG9naXRlY2hGMzEwLm1tICovOyB9OwogCQk1MTBBOTIwQzI0RDUyNzU1
MDBCRkQ4OUMgLyogTG9naXRlY2hGNzEwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwQTkyMEIyNEQ1Mjc1MTAwQkZEODlDIC8qIExvZ2l0ZWNoRjcx
MC5tbSAqLzsgfTsKQEAgLTIwNjksNiArMjA3MSw3IEBACiAJCTUxMDQ3NzcxMUQyOThEODUwMDk3
NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiSURCRGVsZXRlUmVj
b3Zlcnkuc3FsaXRlMy13YWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA0Nzc3
NTFEMjk4RTAzMDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBJREJEZWxldGVSZWNvdmVyeS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNDc3NzYxRDI5OEU1NzAwOTc0N0VCIC8qIElEQkRlbGV0
ZVJlY292ZXJ5Lmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJEZWxldGVSZWNv
dmVyeS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTBBNjY3QTI3RDJGQzdB
MDBEMjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
Q29yZU1lZGlhVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBB
OTFGNzI0RDM2MjE5MDBCRkQ4OUMgLyogU29ueUR1YWxTaG9jazMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTb255RHVhbFNob2NrMy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQTkyMDkyNEQ1MDQ4MzAwQkZEODlDIC8qIExvZ2l0ZWNoRjMx
MC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2l0ZWNoRjMx
MC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQTkyMEIyNEQ1Mjc1MTAwQkZE
ODlDIC8qIExvZ2l0ZWNoRjcxMC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IExvZ2l0ZWNoRjcxMC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUw
NTYsNiArNTA1OSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzExREY1MTIyNkE5NUZCMDAz
REQyRjcgLyogQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0Lm1tICovLAogCQkJCTMxRjg2NUU1MjY3
MDFFNzMwMDNCRkM2RCAvKiBDb3JlQ3J5cHRvU1BJLmggKi8sCisJCQkJNTEwQTY2N0EyN0QyRkM3
QTAwRDIyNjI5IC8qIENvcmVNZWRpYVV0aWxpdGllcy5tbSAqLywKIAkJCQk3NTFCMDVENTFGOEVB
QzFBMDAyOEEwOUUgLyogRGF0YWJhc2VUcmFja2VyVGVzdC5tbSAqLywKIAkJCQk1N0YxQzkxMDI1
RERENTE5MDBFOEY2RUEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbSAqLywKIAkJ
CQk1NzY5QzUwQTFEOUIwMDAxMDAwODQ3RkIgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0g
Ki8sCkBAIC01NTI3LDYgKzU1MzEsNyBAQAogCQkJCUY0RkEyQTRGMjREMUYwNTcwMDYxOEE0NiAv
KiBBdHRyaWJ1dGVkU3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCUNEQzhFNDhEMUJDNUNCNDUwMDU5NEZFQyAvKiBBdWRpb1Nlc3Npb25DYXRlZ29yeUlPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUY0MkQ2MzQ0MjJBMTcyOUYwMEQyRkIzQSAvKiBBdXRvY29y
cmVjdGlvblRlc3RzSU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwQTY2N0MyN0QzMDFDNjAw
RDIyNjI5IC8qIEFWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTdDQ0U3RUI1MUE0MTFBN0UwMDQ0N0M0QyAvKiBCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQzdGRUIyMDIwN0MwRjJFMDBEMjMyNzggLyogQmFja2dyb3VuZENvbG9yLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzE1Q0JCMzAyM0YxRkYxQTAwMzAwQ0M3IC8qIEJhY2tsaWdo
dExldmVsTm90aWZpY2F0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC01NTU2LDYgKzU1NjEsNyBA
QAogCQkJCUNEMEJEMEE2MUY3OTkyNEQwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRl
by5tbSBpbiBTb3VyY2VzICovLAogCQkJCUExQzE0MkMyMjRBQTdCMkUwMDQ0NDIwNyAvKiBDb250
ZXh0TWVudU1vdXNlRXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQwMzRGQTEyNzVENTQw
MjAwM0E4MUY4IC8qIENvb2tpZUNvbnNlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTBBNjY3
QjI3RDMwMUFDMDBEMjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NDRTdFQUMxQTQxMUEzNDAwNDQ3QzRDIC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTdBRUFENDdGMUUyMDExNkMwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVT
Y2hlbWVBY2Nlc3MubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEQjFBNDExQTkyMDA0NDdD
NEMgLyogQ1NTUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcAppbmRleCAzMTU1YzA5ZjI0NzNl
YmVhNjkwMGIzOWMwZDliZWNhYWNhYTVhMDE1Li5iMDExMjhiMjZiMWNjMGEyMDVjNjU0MWE0ODU2
YjdmMDJmNDhiYzc2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvU2hhcmVkQnVmZmVyLmNwcApAQCAtMjM5LDYgKzIzOSw0MSBAQCBURVNUX0YoRnJhZ21lbnRl
ZFNoYXJlZEJ1ZmZlclRlc3QsIGdldFNvbWVEYXRhKQogICAgIGNoZWNrQnVmZmVyKGwuZGF0YSgp
LCBsLnNpemUoKSwgImwiKTsKIH0KIAorVEVTVF9GKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXJUZXN0
LCBnZXRDb250aWd1b3VzRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gczEgPSB7ICdhJywg
J2InLCAnYycsICdkJyB9OworICAgIFZlY3Rvcjx1aW50OF90PiBzMiA9IHsgJ2UnLCAnZicsICdn
JywgJ2gnIH07CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHMzID0geyAnaScsICdqJywgJ2snLCAnbCcg
fTsKKworICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVu
ZChXVEZNb3ZlKHMxKSk7CisgICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMikpOworICAgIGJ1
aWxkZXIuYXBwZW5kKFdURk1vdmUoczMpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1aWxkZXIudGFr
ZSgpOworCisgICAgYXV0byBhYmNkID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSgwLCA0KTsK
KyAgICBhdXRvIGJjZGVmZ2hpID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSgxLCA4KTsKKyAg
ICBhdXRvIGdoID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg2LCAyKTsKKyAgICBhdXRvIGdo
aWogPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDYsIDQpOworICAgIGF1dG8gaCA9IGJ1ZmZl
ci0+Z2V0Q29udGlndW91c0RhdGEoNywgMSk7CisgICAgYXV0byBpamsgPSBidWZmZXItPmdldENv
bnRpZ3VvdXNEYXRhKDgsIDMpOworICAgIGF1dG8ga2wgPSBidWZmZXItPmdldENvbnRpZ3VvdXNE
YXRhKDEwLCAyKTsKKyAgICBhdXRvIGwgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDExLCAx
KTsKKyAgICBjaGVja0J1ZmZlcihhYmNkLT5kYXRhKCksIGFiY2QtPnNpemUoKSwgImFiY2QiKTsK
KyAgICBjaGVja0J1ZmZlcihiY2RlZmdoaS0+ZGF0YSgpLCBiY2RlZmdoaS0+c2l6ZSgpLCAiYmNk
ZWZnaGkiKTsKKyAgICBjaGVja0J1ZmZlcihnaC0+ZGF0YSgpLCBnaC0+c2l6ZSgpLCAiZ2giKTsK
KyAgICBjaGVja0J1ZmZlcihnaGlqLT5kYXRhKCksIGdoaWotPnNpemUoKSwgImdoaWoiKTsKKyAg
ICBjaGVja0J1ZmZlcihoLT5kYXRhKCksIGgtPnNpemUoKSwgImgiKTsKKyAgICBjaGVja0J1ZmZl
cihpamstPmRhdGEoKSwgaWprLT5zaXplKCksICJpamsiKTsKKyAgICBjaGVja0J1ZmZlcihrbC0+
ZGF0YSgpLCBrbC0+c2l6ZSgpLCAia2wiKTsKKyAgICBjaGVja0J1ZmZlcihsLT5kYXRhKCksIGwt
PnNpemUoKSwgImwiKTsKKyAgICBhdXRvIGZnaGlqa2wgPSBidWZmZXItPmdldENvbnRpZ3VvdXNE
YXRhKDUsIDIwKTsKKyAgICBFWFBFQ1RfRVEoZmdoaWprbC0+c2l6ZSgpLCBidWZmZXItPnNpemUo
KSAtIDUpOworICAgIGNoZWNrQnVmZmVyKGZnaGlqa2wtPmRhdGEoKSwgZmdoaWprbC0+c2l6ZSgp
LCAiZmdoaWprbCIpOworICAgIGF1dG8gb3V0Qm91bmQgPSBidWZmZXItPmdldENvbnRpZ3VvdXNE
YXRhKDMwLCAyMCk7CisgICAgRVhQRUNUX0VRKG91dEJvdW5kLT5zaXplKCksIDB1KTsKK30KKwog
VEVTVF9GKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXJUZXN0LCBpc0VxdWFsVG8pCiB7CiAgICAgYXV0
byBtYWtlQnVmZmVyID0gW10gKFZlY3RvcjxWZWN0b3I8dWludDhfdD4+JiYgY29udGVudHMpIHsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9BVkZv
dW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0Lm1tCmluZGV4IGJhZmE3NWY0NmU2MDJk
Y2NmMTdmNTdmN2MwMjUzZmYwYjE5NWIxNGYuLjk4NmUwOGVkOTA0ZTBhYjNmMDdiMTExOGIxZjgz
NjhiNDI0MDJlMDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbQpAQCAt
MTkzLDExICsxOTMsMTQgQEAgVEVTVChBVkZvdW5kYXRpb25Tb2Z0TGluaywgQ29uc3RhbnRzKQog
I2VuZGlmCiAKICNlbmRpZgotICAgIAorCisjaWYgIVBMQVRGT1JNKFdBVENIT1MpCisgICAgRVhQ
RUNUX1RSVUUoW1BBTDo6QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENo
YW5nZU5vdGlmaWNhdGlvbiBpc0VxdWFsVG9TdHJpbmc6QCJBVlJvdXRlRGV0ZWN0b3JNdWx0aXBs
ZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uIl0pOworI2VuZGlmCisKICNpZiBI
QVZFKEFWUk9VVEVQSUNLRVJWSUVXKQotICAgIEVYUEVDVF9UUlVFKFtBVlJvdXRlRGV0ZWN0b3JN
dWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uIGlzRXF1YWxUb1N0cmlu
ZzpAIkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmlj
YXRpb24iXSk7Ci0gICAgRVhQRUNUX1RSVUUoW0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNE
aWRDaGFuZ2VOb3RpZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOkAiQVZPdXRwdXRDb250ZXh0T3V0
cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiJdKTsKLSNlbmRpZiAvLyBQTEFURk9STShX
QVRDSE9TKQorICAgIEVYUEVDVF9UUlVFKFtQQUw6OkFWT3V0cHV0Q29udGV4dE91dHB1dERldmlj
ZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOkAiQVZPdXRwdXRDb250ZXh0
T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiJdKTsKKyNlbmRpZiAvLyBIQVZFKEFW
Uk9VVEVQSUNLRVJWSUVXKQogCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jb2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQ29yZU1lZGlhVXRpbGl0aWVzLm1tCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc4M2EzODA1NTc1MmVhMzFjOTFkNGQ0OWNlM2NmMDQ0ZGJhNmRkNGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQ29yZU1lZGlh
VXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKworI2lmIFVTRShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0
aW9uL01lZGlhVGltZUFWRm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK1RFU1QoUEFMLCBNZWRpYVRpbWUpCit7CisgICAgRVhQRUNUX0VRKFBBTDo6dG9NZWRpYVRp
bWUoUEFMOjp0b0NNVGltZShNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpKSwgTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorI2VuZGlm
Cg==
</data>
<flag name="commit-queue"
          id="481397"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453899</attachid>
            <date>2022-03-04 21:39:46 -0800</date>
            <delta_ts>2022-03-05 19:45:20 -0800</delta_ts>
            <desc>Combined patch for EWS tests</desc>
            <filename>bug-237472-20220305163944.patch</filename>
            <type>text/plain</type>
            <size>180961</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQ5NjA5NzYyYjgwNTJk
ODdiMWUzNjBiNjVhNzhmMzYyZjk1YjM5YS4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDczCisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODE0OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmx5LWJ5IGZpeDogdXBkYXRlIGNhbGwgdG8gQVZPdXRw
dXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbgorICAgICAgICBub3cg
dGhhdCB0aGUgYWNjZXNzIG1hY3JvIGdvdCBmaXhlZC4KKworICAgICAgICBBUEkgVGVzdCBhZGRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1Mu
bW06CisgICAgICAgICgtW1dlYk1lZGlhU2Vzc2lvbkhlbHBlciBzdGFydE1vbml0b3JpbmdBaXJQ
bGF5Um91dGVzXSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpyb3V0ZURldGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpp
bnZhbGlkYXRlUGxheWJhY2tUYXJnZXRzKToKKyAgICAgICAgKC1bV2ViQVZSb3V0ZVBpY2tlclZp
ZXdIZWxwZXIgbm90aWZpY2F0aW9uSGFuZGxlcjpdKToKKworMjAyMi0wMi0yMyAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSB1c2UgU2hhcmVkQnVmZmVyIGludGVybmFsbHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3OAorICAgICAgICByZGFyOi8vODkzNDg3
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGEgcmVmYWN0b3IgdG8gYWxsb3cgU291cmNlQnVmZmVyUGFyc2VyIHRvIHJldHVybiBTaGFy
ZWRCdWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gQ01CbG9ja0J1ZmZlci4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gb2JzZXJ2YWJsZSBiZWhhdmlvdXJzLgorICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpyZWVu
cXVldWVNZWRpYUZvclRpbWUpOiBGbHktYnkgZml4OiB0eXBvLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZSk6IEZseS1ieSBmaXgsICBleGl0
IGVhcmx5CisgICAgICAgIGlmIGVuZCB0aW1lIGlzIGxvd2VyIHRoYW4gc3RhcnQgdGltZSB3aGlj
aCBjYW4gaGFwcGVuIGlmIHRoZSBkdXJhdGlvbiBpcworICAgICAgICBzbWFsbGVyIHRoYW4gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlYWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpkcmFp
blBlbmRpbmdTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVZQOEZy
YW1lSGVhZGVyKTogTWFrZSBtZXRob2RzIGNvbnN0LgorCisyMDIyLTAyLTIzICBKZWFuLVl2ZXMg
QXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29udmVy
dCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorICAgICAgICByZGFyOi8v
ODkzMzg0NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0Q29udGlndW91c0RhdGEgYW5kCisgICAg
ICAgIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tCdWZmZXIgbWV0aG9kcy4K
KworICAgICAgICBBUEkgdGVzdHMgYWRkZWQgZm9yIGdldENvbnRpZ3VvdXNEYXRhLgorICAgICAg
ICBjcmVhdGVDTUJsb2NrQnVmZmVyIHdpbGwgYmUgdXNlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
U2hhcmVkQnVmZmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGcmVlU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxv
Y2tCdWZmZXIgY29uc3QpOgorCiAyMDIyLTAzLTA0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVG9wIGxheWVycyBzaG91bGQgbm90IGJlIG1vdmVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1ZjhlYTk4YWQzMjZlNDQ4MWY1YjE0ZDMwZDMzOGQxZmQ1MDNjYTRmLi43Mzgz
ZmVlMDFhMzE4NzlmZmI0NjExZGI5NDk5NjYxM2E0Nzg5ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUg
cGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEw
OTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNuJ3Qgc29mdC1s
aW5rZWQuCisKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcz
CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NDczCisgICAgICAgIENNVGltZTogY29udmVyc2lvbiBkb2Vzbid0IHdv
cmsgd2l0aCBpbnZhbGlkIG51bWJlcgorCisgICAgICAgICogcGFsL2F2Zm91bmRhdGlvbi9NZWRp
YVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NNVGltZSk6CisgICAgICAg
ICogcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg6CisKKzIwMjItMDMtMDQgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkgY29udmVyc2lvbiB0byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlk
IHRpbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc0NzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTQ5MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGbHktYnkgZml4OiBtYWNybyBkZWZpbml0
aW9uIHRvIGFjY2VzcyBtZXRob2QKKyAgICAgICAgQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNl
c0RpZENoYW5nZU5vdGlmaWNhdGlvbiB3YXMgaW5jb3JyZWN0LgorCisgICAgICAgICogcGFsL2F2
Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NN
VGltZSk6IEVuc3VyZSB0aGF0IGlmIHRoZSBjb252ZXJ0ZWQgdGltZSB3YXMgaW52YWxpZC4gVGhl
CisgICAgICAgIGZsYWcgaXMgY2FycmllZCBhY2Nyb3NzLgorICAgICAgICAqIHBhbC9jb2NvYS9B
VkZvdW5kYXRpb25Tb2Z0TGluay5oOgorCiAyMDIyLTAzLTAyICBEYW4gR2xhc3RvbmJ1cnkgIDxk
amdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBHUFVEZXZpY2VEZXNj
cmlwdG9yLnJlcXVpcmVkTGltaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlYzVjYzI5MDRhZjQ3ZjM4Nzc2ZmMx
MmFhMTdhZjE5Yjk3MzRmOTYuLjM4NWFmZjY2NjJiMGRiYmIyMjkwMGI3NDk3MDhlMDQ5ZjJkNDA1
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVu
YXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8v
cHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisgICAgICAgIGRp
ZG4ndCBuZWVkIHRvIGluaGVyaXQgZnJvbSBNZWRpYVNhbXBsZUFWRk9iakMuIAorCiAyMDIyLTAz
LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWJXZWJS
VENDb2RlY3M6OnNldEVuY29kZVJhdGVzIHNob3VsZCBzZW5kIExpYldlYlJUQ0NvZGVjc1Byb3h5
OjpTZXRFbmNvZGVSYXRlcyBvbmx5IHdoZW4gdGhlIGVuY29kZXIgaXMgbGl2ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5jcHAKaW5kZXggMDY1OTg0MDY4OWU0YWJiNTIyMGU1YmRkODA1MjNkNzQwMmY0
YWNlMi4uNjVjYWMzNDE5NTE0MDRmY2JkOGYyOWYwZjAyMWM3ZmM0ZDc5NjNlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRp
bWVBVkZvdW5kYXRpb24uY3BwCkBAIC02NSw2ICs2NSw4IEBAIENNVGltZSB0b0NNVGltZShjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIGlmIChtZWRpYVRpbWUuaXNWYWxpZCgpKQog
ICAgICAgICB0aW1lLmZsYWdzIHw9IGtDTVRpbWVGbGFnc19WYWxpZDsKKyAgICBlbHNlCisgICAg
ICAgIHRpbWUuZmxhZ3MgJj0gfmtDTVRpbWVGbGFnc19WYWxpZDsKICAgICBpZiAobWVkaWFUaW1l
Lmhhc0JlZW5Sb3VuZGVkKCkpCiAgICAgICAgIHRpbWUuZmxhZ3MgfD0ga0NNVGltZUZsYWdzX0hh
c0JlZW5Sb3VuZGVkOwogICAgIGlmIChtZWRpYVRpbWUuaXNQb3NpdGl2ZUluZmluaXRlKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCmluZGV4
IDg3YjU2MjA3ZTg0ZGYzZjQ5OTliMzZmNTVmMmRmNmY4Yzk5ZDU3NmIuLmQ3NGI4ZDViNmMzMzg1
ZjNkODNjOTNkZjIzMTBmN2NkYTJiMjY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJh
c2VSZW1vdmVUaW1lckQKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JU
KFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZU5leHRGaXJl
VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2Vf
dCB0aW1lclNvdXJjZSwgQ01UaW1lIGZpcmVUaW1lLCB1aW50MzJfdCBmbGFncyksICh0aW1lYmFz
ZSwgdGltZXJTb3VyY2UsIGZpcmVUaW1lLCBmbGFncyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFz
ZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSwgT1NTdGF0dXMsIChDTVRp
bWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2VfdCB0aW1lclNvdXJjZSksICh0aW1l
YmFzZSwgdGltZXJTb3VyY2UpLCBQQUxfRVhQT1JUKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9T
T1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSwgUEFMX0VYUE9SVCkKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
U09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25DcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjVHlwZSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIENGRGljdGlv
bmFyeVJlZiBleHRlbnNpb25zLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERl
c2NyaXB0aW9uT3V0KSwgKGFsbG9jYXRvciwgY29kZWNUeXBlLCB3aWR0aCwgaGVpZ2h0LCBleHRl
bnNpb25zLCBmb3JtYXREZXNjcmlwdGlvbk91dCksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCBDVkltYWdlQnVmZmVyUmVmIGltYWdlQnVmZmVyLCBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYqIG91dERlc2MpLCAoYWxsb2NhdG9yLCBpbWFnZUJ1ZmZlciwgb3V0RGVz
YyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9S
VChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywg
Q01WaWRlb0RpbWVuc2lvbnMsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNj
KSwgKHZpZGVvRGVzYyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0
UHJlc2VudGF0aW9uRGltZW5zaW9ucywgQ0dTaXplLCAoQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIHZpZGVvRGVzYywgQm9vbGVhbiB1c2VQaXhlbEFzcGVjdFJhdGlvLCBCb29sZWFuIHVzZUNs
ZWFuQXBlcnR1cmUpLCAodmlkZW9EZXNjLCB1c2VQaXhlbEFzcGVjdFJhdGlvLCB1c2VDbGVhbkFw
ZXJ0dXJlKSwgUEFMX0VYUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1l
ZGlhU29mdExpbmsuaAppbmRleCA1NzBhNmE5ODUzYzQ0ODE2OGI5OTAyMjA0MjMwMDk2ZGZlOGZl
YjAxLi4zM2NhMWIyNmYzZDM3ZTU5MjVhMjViNmFjZmJkMTU4YTQzMmU3YWIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCkBAIC0yNjMsNiArMjYz
LDggQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGlt
ZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlVG8KICNkZWZpbmUgQ01UaW1lYmFzZVNldFRpbWVy
RGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSBzb2Z0TGlua19Db3JlTWVkaWFfQ01UaW1l
YmFzZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseQogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSkKICNkZWZpbmUgQ01UaW1lQ29weUFzRGljdGlvbmFyeSBzb2Z0
TGlua19Db3JlTWVkaWFfQ01UaW1lQ29weUFzRGljdGlvbmFyeQorU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUg
Y29kZWNUeXBlLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVm
IGV4dGVuc2lvbnMsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRp
b25PdXQpLCAoYWxsb2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMs
IGZvcm1hdERlc2NyaXB0aW9uT3V0KSkKKyNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
Q3JlYXRlIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXRE
ZXNjKSkKICNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZm
ZXIgc29mdExpbmtfQ29yZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywgQ01WaWRlb0RpbWVuc2lvbnMs
IChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjKSwgKHZpZGVvRGVzYykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRM
aW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
LmgKaW5kZXggNWJkNTEyZjE1YmY4MDUzNzdjZjkxM2FiZjY5ZDAwY2M5ODc1NzdkYy4uMjVkNzU1
ZjUxNTFjYThlNWNjOTBjMzU4M2MyZWRlNGMzZGEzMWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaApAQCAtMzM4LDExICsz
MzgsMTIgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25TZXRBdXRob3JpemVkVG8KIAogI2lmICFQTEFURk9STShXQVRDSE9T
KQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24sIEFWUm91
dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5T
U3RyaW5nICopCi0jZGVmaW5lIEFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWRE
aWRDaGFuZ2VOb3RpZmljYXRpb24gUEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rv
ck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKQorI2RlZmluZSBB
VlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IGdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERp
ZENoYW5nZU5vdGlmaWNhdGlvbigpCiAjZW5kaWYgLy8gSEFWRShXQVRDSE9TKQogCiAjaWYgSEFW
RShBVlJPVVRFUElDS0VSVklFVykKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFBBTCwg
QVZGb3VuZGF0aW9uLCBBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZp
Y2F0aW9uLCBOU05vdGlmaWNhdGlvbk5hbWUpCisjZGVmaW5lIEFWT3V0cHV0Q29udGV4dE91dHB1
dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENv
bnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKICNlbmRpZiAvLyBIQVZF
KEFWUk9VVEVQSUNLRVJWSUVXKQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDk4YjAzNTc5MWE2ZWJiMGQ5ZjE1NzFhNTdhNDJlY2Q1ZjE1NWNmYjku
LjVkZWU3NTQwNTM1NzlmNTViNTVmMmZlNGFkMGRkMGE2OWRlYmZkNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zMTIsNiArMzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRmxvYXRSZWN0Q29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLmNwcApAQCAtNjQ5LDYgKzY1MCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKIAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhYTQ0ZjVmNTMxNjdi
OWJjMGYxNDIzZjI3YmZjMjRkNzE3ZWJhY2ZhLi5mOWUwYWJhZjRiOTIyYjg5MzcyZjliYTk3MjU0
MDlmYmM3YjdmODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM4MSw2ICszODEsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0g
QG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Db2xvckNvY29hLm1tCiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWEyMjdkNTk4ZTQyOWQ4NTViYjNkZWVkYTli
MWQ0NzI4MGQ2MjQzYi4uMTgxOTc0NDllZWQ2NDkzNzlmZjFmNDI3MTY4ZGFiNWRmODdkOWZkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU3OSw2ICsxNTc5LDggQEAKIAkJNTE0Qzc2N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjY2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmggKi87IH07CiAJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdGMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTE1MEI1REQyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQjVE
QzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTUwQjVERjI3Q0RGNDk5MDA0RkM4MUUgLyog
Q01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi87IH07CiAJ
CTUxNTFGMDdFMjYxNTQzNUEwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTFGMDdCMjYxNTM2
M0YwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg5MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQ
cm92aWRlci5oICovOyB9OwogCQk1MTVCRTE5MjFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NzcsNiArOTc3OSw4IEBA
CiAJCTUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNTBCNURDMjdDREYyRTAwMDRGQzgxRSAvKiBD
TVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDTVV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVVuaXF1ZUlk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODgxRDU0RjVG
NjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTI4OSw2ICsyOTI5
Myw4IEBACiAJCQkJN0JDRDQyREMyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29j
b2EuaCAqLywKIAkJCQlDREY5OTUwMTI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFja1ByaXZh
dGVXZWJNLmNwcCAqLywKIAkJCQlDREY5OTUwMDI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmggKi8sCisJCQkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRp
bGl0aWVzLmggKi8sCisJCQkJNTE1MEI1REUyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVz
Lm1tICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi8s
CiAJCQkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EubW0gKi8sCiAJCQkJ
QjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENvY29hLm1tICovLApAQCAtMzM4
OTcsNiArMzM5MDMsNyBAQAogCQkJCUY0RDA3NTU5MjM0RDgyMzMwMDg4MUU3MyAvKiBDbGlwYm9h
cmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MDM3MTYy
MUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJE
MTMxNEZBMDlENTAwNzQ1N0FFIC8qIENsb3NlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NTBCNUREMjdDREYyRTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzBDMDU0Q0IxMTE4QzhFNDAwQ0UyNjM2IC8qIENvZGVHZW5lcmF0b3IucG0gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjVERjBFODFCOUFCMDBCMjU5NjUgLyogQ29sbGFwc2VkQm9yZGVyVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MjVBNDlBMTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xs
ZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODgwNCw2ICszODgxMSw3IEBA
CiAJCQkJQ0RGNEI3MTUxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREI3MDQ1QjFGNzQ2NUExMDAzOTIzREYgLyogQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMjI0MjgxRjc1Njk2NjAwNUYwNzdCIC8qIENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1MEI1
REYyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlckNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQ
VU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2Q0ExMUQyMEU1MDAwNEMyMDFD
IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAppbmRleCAwYTZmMjhhMjAxMzEzNTUzNThiNmU3ZjljZGMxMjZhNGQ1
YzBlNmFjLi5hMTI4MjczYTU3NmY4M2JmYWUxN2I1NzI4MDgxNTI0ZjZkYmE1MjMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI2LDYgKzI2LDkgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgpAQCAtNDAsOCArNDMs
MTAgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyOwogY2xhc3MgTW9ja1NhbXBsZUJveDsKIGNsYXNzIFByb2Nlc3NJ
ZGVudGl0eTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsK
ICAgICBlbnVtIFR5cGUgewpAQCAtNzIsMTMgKzc3LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgZW51bSBE
aXZpZGVGbGFncyB7IEJlZm9yZVByZXNlbnRhdGlvblRpbWUsIEFmdGVyUHJlc2VudGF0aW9uVGlt
ZSB9OwogICAgIGVudW0gY2xhc3MgVXNlRW5kVGltZSA6IGJvb2wgewogICAgICAgICBEb05vdFVz
ZSwKICAgICAgICAgVXNlLAogICAgIH07Ci0gICAgdmlydHVhbCBzdGQ6OnBhaXI8UmVmUHRyPE1l
ZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYg
cHJlc2VudGF0aW9uVGltZSwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90VXNlKSA9IDA7
CisgICAgdmlydHVhbCBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlh
U2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUgPSBVc2VFbmRUaW1l
OjpEb05vdFVzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07CisgICAgfQogICAgIHZpcnR1YWwgUmVmPE1l
ZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0ID0gMDsKIAogICAgIHZp
cnR1YWwgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJbWFnZURhdGEoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CkBAIC0xMTksNyArMTI4LDExIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc0FscGhhOyB9CiAg
ICAgYm9vbCBoYXNTeW5jSW5mbygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNTeW5jSW5m
bzsgfQogCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVj
b2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQp
ZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRo
KCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKKyAgICB9CisKICAg
ICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gb2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTEzNCw4ICsxNDcsMTI4IEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCitzdHJ1Y3QgQXVkaW9JbmZvOworc3RydWN0IFZpZGVvSW5mbzsKKworc3Ry
dWN0IFRyYWNrSW5mbyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUcmFja0luZm8+IHsK
KyAgICBlbnVtIGNsYXNzIFRyYWNrVHlwZSB7IFVua25vd24sIEF1ZGlvLCBWaWRlbyB9OworCisg
ICAgYm9vbCBpc0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6QXVk
aW87IH0KKyAgICBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tU
eXBlOjpWaWRlbzsgfQorCisgICAgVHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkgfHwgY29kZWNOYW1l
ICE9IG90aGVyLmNvZGVjTmFtZSB8fCB0cmFja0lEICE9IG90aGVyLnRyYWNrSUQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBlcXVhbFRvKG90aGVyKTsKKyAgICB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBGb3VyQ0MgY29kZWNOYW1lOworICAgIHVp
bnQ2NF90IHRyYWNrSUQgeyAwIH07CisKKyAgICB2aXJ0dWFsIH5UcmFja0luZm8oKSA9IGRlZmF1
bHQ7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0lu
Zm8mIG90aGVyKSBjb25zdCA9IDA7CisgICAgVHJhY2tJbmZvKFRyYWNrVHlwZSB0eXBlKQorICAg
ICAgICA6IG1fdHlwZSh0eXBlKSB7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUcmFja1R5cGUg
bV90eXBlIHsgVHJhY2tUeXBlOjpVbmtub3duIH07Cit9OworCitzdHJ1Y3QgVmlkZW9JbmZvIDog
cHVibGljIFRyYWNrSW5mbyB7CisgICAgc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9JbmZvKCkpOyB9CisKKyAgICBGbG9hdFNpemUgc2l6
ZTsKKyAgICAvLyBTaXplIGluIHBpeGVscyBhdCB3aGljaCB0aGUgdmlkZW8gaXMgcmVuZGVyZWQu
IFRoaXMgaXMgYWZ0ZXIgaXQgaGFzCisgICAgLy8gYmVlbiBzY2FsZWQgYnkgaXRzIGFzcGVjdCBy
YXRpby4KKyAgICBGbG9hdFNpemUgZGlzcGxheVNpemU7CisgICAgdWludDhfdCBiaXREZXB0aCB7
IDggfTsKKyAgICBQbGF0Zm9ybVZpZGVvQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgIE1lZGlh
U2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246Ok5vbmUgfTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGF0b21EYXRhOworCitwcml2
YXRlOgorICAgIFZpZGVvSW5mbygpCisgICAgICAgIDogVHJhY2tJbmZvKFRyYWNrVHlwZTo6Vmlk
ZW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyVmlkZW9JbmZv
KSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxjb25z
dCBWaWRlb0luZm8+KG90aGVyVmlkZW9JbmZvKTsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gb3Ro
ZXIuc2l6ZSAmJiBkaXNwbGF5U2l6ZSA9PSBvdGhlci5kaXNwbGF5U2l6ZSAmJiBiaXREZXB0aCA9
PSBvdGhlci5iaXREZXB0aCAmJiBjb2xvclNwYWNlID09IG90aGVyLmNvbG9yU3BhY2UgJiYgcm90
YXRpb24gPT0gb3RoZXIucm90YXRpb24gJiYgKCghYXRvbURhdGEgJiYgIW90aGVyLmF0b21EYXRh
KSB8fCAoYXRvbURhdGEgJiYgb3RoZXIuYXRvbURhdGEgJiYgKmF0b21EYXRhID09ICpvdGhlci5h
dG9tRGF0YSkpOworICAgIH0KK307CisKK3N0cnVjdCBBdWRpb0luZm8gOiBwdWJsaWMgVHJhY2tJ
bmZvIHsKKyAgICBzdGF0aWMgUmVmPEF1ZGlvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBdWRpb0luZm8oKSk7IH0KKworICAgIHVpbnQzMl90IHJhdGUgeyAwIH07CisgICAg
dWludDMyX3QgY2hhbm5lbHMgeyAwIH07CisgICAgdWludDMyX3QgZnJhbWVzUGVyUGFja2V0IHsg
MCB9OworICAgIHVpbnQzMl90IGJpdERlcHRoIHsgMTYgfTsKKyAgICBpbnQ4X3QgcHJvZmlsZSB7
IDAgfTsKKyAgICBpbnQ4X3QgZXh0ZW5kZWRQcm9maWxlIHsgMCB9OworCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gY29va2llRGF0YTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0luZm8oKQorICAg
ICAgICA6IFRyYWNrSW5mbyhUcmFja1R5cGU6OkF1ZGlvKSB7IH0KKyAgICBib29sIGVxdWFsVG8o
Y29uc3QgVHJhY2tJbmZvJiBvdGhlckF1ZGlvSW5mbykgY29uc3QgZmluYWwKKyAgICB7CisgICAg
ICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8Y29uc3QgQXVkaW9JbmZvPihvdGhlckF1ZGlvSW5m
byk7CisgICAgICAgIHJldHVybiByYXRlID09IG90aGVyLnJhdGUgJiYgY2hhbm5lbHMgPT0gb3Ro
ZXIuY2hhbm5lbHMgJiYgYml0RGVwdGggPT0gb3RoZXIuYml0RGVwdGggJiYgZnJhbWVzUGVyUGFj
a2V0ID09IG90aGVyLmZyYW1lc1BlclBhY2tldCAmJiBwcm9maWxlID09IG90aGVyLnByb2ZpbGUg
JiYgZXh0ZW5kZWRQcm9maWxlID09IG90aGVyLmV4dGVuZGVkUHJvZmlsZSAmJiAoKCFjb29raWVE
YXRhICYmICFvdGhlci5jb29raWVEYXRhKSB8fCAoY29va2llRGF0YSAmJiBvdGhlci5jb29raWVE
YXRhICYmICpjb29raWVEYXRhID09ICpvdGhlci5jb29raWVEYXRhKSk7CisgICAgfQorfTsKKwor
Y2xhc3MgTWVkaWFTYW1wbGVzQmxvY2sgeworcHVibGljOgorICAgIHN0cnVjdCBNZWRpYVNhbXBs
ZUl0ZW0geworICAgICAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgTWVk
aWFUaW1lIGRlY29kZVRpbWU7CisgICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbjsKKyAgICAgICAg
c3RkOjp2YXJpYW50PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UsIFJlZjxjb25zdCBGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICAgICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIGZs
YWdzOworICAgIH07CisKKyAgICB2b2lkIHNldEluZm8oUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4m
JiBpbmZvKSB7IG1faW5mbyA9IFdURk1vdmUoaW5mbyk7IH0KKyAgICBjb25zdCBUcmFja0luZm8q
IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm8uZ2V0KCk7IH0KKyAgICBib29sIGlzVmlkZW8o
KSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc1ZpZGVvKCk7IH0KKyAgICBib29s
IGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc0F1ZGlvKCk7IH0K
KyAgICBUcmFja0luZm86OlRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvID8g
bV9pbmZvLT50eXBlKCkgOiBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93bjsgfQorICAgIHZv
aWQgYXBwZW5kKE1lZGlhU2FtcGxlSXRlbSYmIGl0ZW0pIHsgbV9zYW1wbGVzLmFwcGVuZChXVEZN
b3ZlKGl0ZW0pKTsgfQorICAgIHZvaWQgYXBwZW5kKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2sp
IHsgbV9zYW1wbGVzLmFwcGVuZFZlY3RvcihzdGQ6OmV4Y2hhbmdlKGJsb2NrLm1fc2FtcGxlcywg
eyB9KSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXpl
KCk7IH07CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmlzRW1w
dHkoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fc2FtcGxlcy5jbGVhcigpOyB9CisgICAgdXNp
bmcgU2FtcGxlc1ZlY3RvciA9IFZlY3RvcjxNZWRpYVNhbXBsZUl0ZW0+OworICAgIFNhbXBsZXNW
ZWN0b3IgdGFrZVNhbXBsZXMoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlcywgeyB9
KTsgfQorCisgICAgY29uc3QgTWVkaWFTYW1wbGVJdGVtJiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzW2luZGV4XTsgfQorICAgIGNvbnN0IE1lZGlhU2Ft
cGxlSXRlbSYgZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZmlyc3QoKTsgfQorICAg
IGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5s
YXN0KCk7IH0KKyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlcy5iZWdpbigpOyB9CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmVuZCgpOyB9CisKK3ByaXZh
dGU6CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV9pbmZvOworICAgIFNhbXBsZXNWZWN0
b3IgbV9zYW1wbGVzOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZpZGVvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzVmlk
ZW8oKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkF1ZGlvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzQXVkaW8oKTsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZjg3
YjZhNGY2M2IyNmEyMTg4MjA2ZTkzOGFhNTg1Nzk3YWIzOTVlNC4uMWU2MWQwYjZmYWI3NTEwNGI3
ZmEwMDJhOGJkMDQ1NmNiNDZmOGU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCkBAIC0xNTIsNiArMTUyLDI1IEBAIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IEZyYWdt
ZW50ZWRTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAg
ICByZXR1cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50
LT5iZWdpblBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0
aCkgY29uc3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAgICAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1pbihtX3NpemUgLSBw
b3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBlbGVt
ZW50ID0gZ2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzaXplX3Qgb2Zmc2V0
SW5TZWdtZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uOworICAgIGlmIChl
bGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0gbGVuZ3RoKQorICAg
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5zZWdtZW50LmNvcHlS
ZWYoKSwgb2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVkRGF0YS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50
LT5zZWdtZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQtPnNlZ21lbnQtPnNp
emUoKSAtIG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7IGNvbWJpbmVkRGF0
YS5zaXplKCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVuZCgpOyBlbGVtZW50
KyspIHsKKyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3RoIC0gY29tYmluZWRE
YXRhLnNpemUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAgICAgY29tYmluZWRE
YXRhLmFwcGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkpOworICAgIH0KKyAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5lZERhdGEpKTsKK30K
KwogY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3JFbnRyeSog
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3Np
dGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYzZjI2MjAwMzNkZDhj
ZmYxNTYyM2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRiZjRmZjY4MTZhNTgy
ZTkwZjk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC01NCw2
ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lmIFVTRShGT1VOREFU
SU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7Cit0eXBlZGVmIHN0
cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoRk9VTkRB
VElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNEYXRh
QXJyYXkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5Q
dHI8Q01CbG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0OwogI2VuZGlm
CiAjaWYgVVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhpcyB0YWtlcyBPKGxv
ZyhOKSkgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJEYXRhVmlldyBnZXRT
b21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxT
aGFyZWRCdWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxl
bmd0aCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9IZXhTdHJpbmcoKSBj
b25zdDsKIApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb21iaW5lcyBh
bGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0
ZXIgY2xlYXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0
b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0aW9uKSBjb25zdDsK
KyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24o
c2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBp
bnRlcm5hbGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0Zy
YW1lLmNwcAppbmRleCBhNTQ5YzFhNWM0OGViMjNkNjRiYTNmZDM1Mzg0MDhiZDE1NTIzNGYwLi5h
MjIxOGM1ZGQ3NDFmZmM0Njg4NTc3MWVkZDUxOTRiYzMxMmE3ZmRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcApAQCAtOTgsMTggKzk4LDYgQEAgdm9pZCBWaWRlb0ZyYW1l
OjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgVmlkZW9GcmFtZTo6aXNEaXZpc2FibGUo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RkOjpwYWlyPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4sIFJlZlB0cjxXZWJD
b3JlOjpNZWRpYVNhbXBsZT4+IFZpZGVvRnJhbWU6OmRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBV
c2VFbmRUaW1lKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IG51
bGxwdHIsIG51bGxwdHIgfTsKLX0KLQogUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiBWaWRlb0Zy
YW1lOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0CiB7CiAgICAgQ1JBU0goKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAppbmRleCA2NDExZGY3ZDY0MGNjZGVkMWQxZTNl
MTFmZDFhNDI4YTI5MWIzMWVkLi4yMjg1ZThhYzdiZjAyMTQyZjkyYTkxZjc4MGU3NTkxMDI0MmFh
NmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCkBAIC03Miw4ICs3Miw2IEBA
IHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qg
ZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3Qg
TWVkaWFUaW1lJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lc3RhbXBz
KGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2
aWRlKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgVXNlRW5kVGltZSA9IFVzZUVu
ZFRpbWU6OkRvTm90VXNlKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8V2ViQ29yZTo6
TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRp
b0ZpbGVSZWFkZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2Nv
YS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKaW5kZXggYjcwM2NmZWNkMzE2YzYyN2M2OTRlNjRi
OGU2OTc2MjA2ODY3ZjdhYi4uYmQ4N2U0NjhmOGYwZGZmMGIzNGM2OGE1ZjQ5YjQ2ZTNkYjAwYzU2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9G
aWxlUmVhZGVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YT4gQXVkaW9GaWxlUmVhZGVyOjpkZW11eFdl
Yk1EYXRhKGNvbnN0IHVpCiAgICAgcGFyc2VyLT5hcHBlbmREYXRhKFdURk1vdmUoc2VnbWVudCkp
OwogICAgIGlmICghdHJhY2spCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHBhcnNlci0+
Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7CisgICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRp
b1NhbXBsZXMoKTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0
YT4oQXVkaW9GaWxlUmVhZGVyV2ViTURhdGEgeyBXVEZNb3ZlKGJ1ZmZlciksIHRyYWNrLnJlbGVh
c2VOb25OdWxsKCksIFdURk1vdmUoZHVyYXRpb24pLCBXVEZNb3ZlKHNhbXBsZXMpIH0pOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNz
aW9uSGVscGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL01lZGlh
U2Vzc2lvbkhlbHBlcklPUy5tbQppbmRleCBhNDBlY2JiOGI4MmU4OWE0ZGRkYzQxMTI2NGFiN2Nj
ZmM5NjBmOWUyLi45YThlOTFmZWU5YjMzM2JhNTlhN2RmNzY5Y2QyNzAyYzhjMzc0YTg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uSGVs
cGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNl
c3Npb25IZWxwZXJJT1MubW0KQEAgLTQ2MCw3ICs0NjAsNyBAQCAtICh2b2lkKXN0YXJ0TW9uaXRv
cmluZ0FpclBsYXlSb3V0ZXMKICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+X3JvdXRlRGV0ZWN0b3IgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jQVZSb3V0ZURldGVjdG9ySW5zdGFuY2UoKSBpbml0XSk7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRlY3Rvci5nZXQoKS5yb3V0ZURldGVjdGlvbkVuYWJsZWQg
PSBwcm90ZWN0ZWRTZWxmLT5fbW9uaXRvcmluZ0FpclBsYXlSb3V0ZXM7Ci0gICAgICAgICAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnByb3RlY3Rl
ZFNlbGYuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHdpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlk
Q2hhbmdlOikgbmFtZTpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDpwcm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRlY3Rvci5nZXQo
KV07CisgICAgICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnByb3RlY3RlZFNlbGYuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHdpcmVsZXNz
Um91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlOikgbmFtZTpQQUw6OkFWUm91dGVEZXRlY3Rvck11bHRp
cGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnByb3RlY3RlZFNl
bGYtPl9yb3V0ZURldGVjdG9yLmdldCgpXTsKIAogICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+
X2NhbGxiYWNrLT5leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSgpOwogICAg
ICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2RmYmYwNWZk
NzI2YWZkOTlhMzI5YzZhYzExYWM5ZWQ3YTU1Li4xOTA4YjQ2YWZiNWQ2MTA0MTJmYWVjZGMxMjQy
MTY0ZWZhNjE5NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
aGFyZWRCdWZmZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
aGFyZWRCdWZmZXJDb2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZUpJ
VE9wZXJhdGlvbnMuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29y
ZU1lZGlhU29mdExpbmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5U
aHJlYWQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAtOTksNiAr
MTAwLDU1IEBAIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0YSAqZGF0
YSkKICAgICByZXR1cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3RhdGljIHZv
aWQgRnJlZURhdGFTZWdtZW50KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKK3sKKyAgICBh
dXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IERhdGFTZWdtZW50Kj4ocmVmY29u
KTsKKyAgICBidWZmZXItPmRlcmVmKCk7Cit9CisKK1JldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVm
PiBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGVDTUJsb2NrQnVmZmVyKCkgY29uc3QKK3sK
KyAgICBhdXRvIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIgPSBbXSAoY29uc3QgRGF0YVNlZ21lbnQm
IHNlZ21lbnQpIC0+IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiB7CisgICAgICAgIC8vIEZy
b20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246CisgICAgICAg
IC8vIE5vdGUgdGhhdCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRh
aW5zIG1pc2FsaWduZWQgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICAgIC8vIFRvIGF2b2lkIGxp
bmstdGltZSBpc3N1ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxv
Y2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCisgICAg
ICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4gZGVjbGFy
aW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgorICAgICAgICBDTUJsb2NrQnVm
ZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOworICAgICAgICBhbGxvY2F0b3IudmVyc2lv
biA9IDA7CisgICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKKyAgICAg
ICAgYWxsb2NhdG9yLkZyZWVCbG9jayA9IEZyZWVEYXRhU2VnbWVudDsKKyAgICAgICAgYWxsb2Nh
dG9yLnJlZkNvbiA9IGNvbnN0X2Nhc3Q8RGF0YVNlZ21lbnQqPigmc2VnbWVudCk7CisgICAgICAg
IHNlZ21lbnQucmVmKCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcGFydGlhbEJ1ZmZlciA9
IG51bGxwdHI7CisgICAgICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5
QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNl
Z21lbnQuZGF0YSgpKSksIHNlZ21lbnQuc2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCAwLCBz
ZWdtZW50LnNpemUoKSwgMCwgJnBhcnRpYWxCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YocGFy
dGlhbEJ1ZmZlcik7CisgICAgfTsKKworICAgIGlmIChoYXNPbmVTZWdtZW50KCkgJiYgIWlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIobV9zZWdtZW50c1sw
XS5zZWdtZW50KTsKKworICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxs
cHRyOworICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgaXNFbXB0eSgpID8gMCA6IG1fc2VnbWVudHMuc2l6ZSgpLCAwLCAmcmF3
QmxvY2tCdWZmZXIpOworICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3
QmxvY2tCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYmxvY2tCdWZm
ZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBibG9ja0J1ZmZlcjsKKworICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2Vn
bWVudHMpIHsKKyAgICAgICAgaWYgKCFzZWdtZW50LnNlZ21lbnQtPnNpemUoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIHBhcnRpYWxCdWZmZXIgPSBzZWdtZW50VG9DTUJs
b2NrQnVmZmVyKHNlZ21lbnQuc2VnbWVudCk7CisgICAgICAgIGlmICghcGFydGlhbEJ1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoUEFMOjpDTUJsb2NrQnVm
ZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCBwYXJ0aWFsQnVmZmVyLmdl
dCgpLCAwLCAwLCAwKSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBibG9ja0J1ZmZlcjsKK30KKwogUmV0YWluUHRy
PE5TRGF0YT4gU2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGEoKSBjb25zdAogewogICAgIHJldHVy
biBicmlkZ2VfY2FzdChjcmVhdGVDRkRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5o
CmluZGV4IDA4NDRiMWU4ZGNhY2ZjYTYwNmQwMWFmZGM5YzZmNzIwZTMzOTQ0NWMuLmFmYzMxMjU0
ZWI1NGZhZGYzZjEyMTk5NjVlODI1ZWQzMjYzZDRiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllcy5oCkBAIC0zMyw2ICszMywxNSBAQCBlbnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllcyA6IHVpbnQ4X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUx
NzBtLAorICAgIEJ0NDcwbSwKKyAgICBTbXB0ZTI0MG0sCisgICAgRmlsbSwKKyAgICBCdDIwMjAs
CisgICAgU21wdGVTdDQyODEsCisgICAgU21wdGVScDQzMSwKKyAgICBTbXB0ZUVnNDMyLAorICAg
IEplZGVjUDIyUGhvc3Bob3JzLAorICAgIFVuc3BlY2lmaWVkLAogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpAQCAtNDQsNyArNTMsMTYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM+IHsKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwYmcsCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6RmlsbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpCdDIwMjAsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xv
clByaW1hcmllczo6U21wdGVTdDQyODEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9D
b2xvclByaW1hcmllczo6U21wdGVScDQzMSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhvc3Bob3JzLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAppbmRleCBlOTA3MzVjODhkN2ZlNTFmMzc3
NTViZDhjMDc0NGZhNmI1M2M2ZmU5Li4zOTFhZGVjYWQyMmNhNmQ5MTFlYjAwOGI3NTZjOGRlYTc3
NGYyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCkBAIC0zNCw2ICsz
NCwxMiBAQCBlbnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMgOiB1aW50
OF90IHsKICAgICBCdDcwOSwKICAgICBCdDQ3MGJnLAogICAgIFNtcHRlMTcwbSwKKyAgICBTbXB0
ZTI0MG0sCisgICAgRmNjLAorICAgIFlDZ0NvLAorICAgIEJ0MjAyME5vbmNvbnN0YW50THVtaW5h
bmNlLAorICAgIEJ0MjAyMENvbnN0YW50THVtaW5hbmNlLAorICAgIFVuc3BlY2lmaWVkLAogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtNDYsNyArNTIsMTMgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
PiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlJn
YiwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ3
MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0
NDcwYmcsCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6
OlNtcHRlMTcwbQorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2Vm
ZmljaWVudHM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6RmNjLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpZQ2dDbywKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2UsCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5h
bmNlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpV
bnNwZWNpZmllZAogICAgID47CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcy5oCmluZGV4IGNjN2YxZWEyMTRlNGE5YWI1ZWMxZTYyYWIyNDQ2Mjg4YTg0MGQ0
ZWIuLmJiMTgzYzAzMDYzMDFiMzcwNzhmZGNkNTQwMjNmZmU3NDNiYzJhYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oCkBAIC0zMyw2ICszMywyMCBAQCBl
bnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyA6IHVpbnQ4X3Qg
ewogICAgIEJ0NzA5LAogICAgIFNtcHRlMTcwbSwKICAgICBJZWM2MTk2NjIxLAorICAgIEdhbW1h
MjJjdXJ2ZSwKKyAgICBHYW1tYTI4Y3VydmUsCisgICAgU21wdGUyNDBtLAorICAgIExpbmVhciwK
KyAgICBMb2csCisgICAgTG9nU3FydCwKKyAgICBJZWM2MTk2NjI0LAorICAgIEJ0MTM2MUV4dGVu
ZGVkQ29sb3VyR2FtdXQsCisgICAgQnQyMDIwXzEwYml0LAorICAgIEJ0MjAyMF8xMmJpdCwKKyAg
ICBTbXB0ZVN0MjA4NCwKKyAgICBTbXB0ZVN0NDI4MSwKKyAgICBBcmliU3RkQjY3SGxnLAorICAg
IFVuc3BlY2lmaWVkCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00NCw3ICs1OCwy
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcz4gewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUxNzBtLAotICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjEKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2
NjIxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkdhbW1hMjJjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpHYW1tYTI4Y3VydmUsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhciwKKyAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2csCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9nU3Fy
dCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpJZWM2MTk2NjI0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJ0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQsCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEwYml0LAorICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAy
MF8xMmJpdCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpTbXB0ZVN0MjA4NCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpBcmliU3RkQjY3SGxnLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVk
CiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggMDRjYmU0ZDI3ZjE5MGI3YjI3Yjlj
YTdlOThhOWM0NzE3M2QyZjg5Yi4uYmY0N2ZjZWJiNTZlMmY5ZGU1NGE0MjBkZTJkMjE2YTQ3ZWNh
MmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNl
QnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGU6OnJlZW5xdWV1ZU1lZGlhRm9yVGltZShUcmFja0J1ZmZlciYgdHJhY2tCdWZm
ZXIsIGNvbnN0CiAgICAgICAgIHx8IChjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPmZpcnN0IC0g
dGltZSkgPiB0aW1lRnVkZ2VGYWN0b3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU2Vh
Y2ggYmFja3dhcmQgZm9yIHRoZSBwcmV2aW91cyBzeW5jIHNhbXBsZS4KKyAgICAvLyBTZWFyY2gg
YmFja3dhcmQgZm9yIHRoZSBwcmV2aW91cyBzeW5jIHNhbXBsZS4KICAgICBEZWNvZGVPcmRlclNh
bXBsZU1hcDo6S2V5VHlwZSBkZWNvZGVLZXkoY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5zZWNv
bmQtPmRlY29kZVRpbWUoKSwgY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5zZWNvbmQtPnByZXNl
bnRhdGlvblRpbWUoKSk7CiAgICAgYXV0byBjdXJyZW50U2FtcGxlRFRTSXRlcmF0b3IgPSB0cmFj
a0J1ZmZlci5zYW1wbGVzLmRlY29kZU9yZGVyKCkuZmluZFNhbXBsZVdpdGhEZWNvZGVLZXkoZGVj
b2RlS2V5KTsKICAgICBBU1NFUlQoY3VycmVudFNhbXBsZURUU0l0ZXJhdG9yICE9IHRyYWNrQnVm
ZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5lbmQoKSk7CkBAIC0xMTcxLDYgKzExNzEsOSBAQCB2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVTYW1wbGUoUmVmPE1lZGlhU2FtcGxl
PiYmIG9yaWdpbmFsU2FtcGxlKQogICAgICAgICAgICAgICAgIE1lZGlhVGltZSBlcmFzZUJlZ2lu
VGltZSA9IHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXA7CiAgICAgICAg
ICAgICAgICAgTWVkaWFUaW1lIGVyYXNlRW5kVGltZSA9IGZyYW1lRW5kVGltZXN0YW1wIC0gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlOwogCisgICAgICAgICAgICAgICAgaWYgKGVyYXNlRW5kVGlt
ZSA8PSBlcmFzZUJlZ2luVGltZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICAgICAgICBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFu
Z2U7CiAgICAgICAgICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZl
ci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVy
YXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBmcmFtZSBpcyBhdCB0
aGUgZW5kIG9mIHRoZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBzZXF1ZW50aWFsIHNjYW4g
ZnJvbSBlbmQgKE8oMSkpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJv
dXRlUGlja2VyVmlld1RhcmdldFBpY2tlci5tbQppbmRleCBkYjg4MjUxMWIxYWRlYjYxZjcxOTll
YjkyNTRiODgzMjJlODlhNGVkLi5hMjI4ODZlNDlhOWE0ZDA5NDE2NWZjMTRjNWMyMTc2MzdkNWYy
MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9BVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlci5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJvdXRlUGlja2Vy
Vmlld1RhcmdldFBpY2tlci5tbQpAQCAtOTEsNyArOTEsNyBAQCBBVk91dHB1dENvbnRleHQgKiBB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKGJvb2wg
dXNlaQogICAgICAgICAgICAgbV9vdXRwdXRDb250ZXh0ID0gW1BBTDo6Z2V0QVZPdXRwdXRDb250
ZXh0Q2xhc3MoKSBvdXRwdXRDb250ZXh0XTsKICAgICAgICAgQVNTRVJUKG1fb3V0cHV0Q29udGV4
dCk7CiAgICAgICAgIGlmIChtX291dHB1dENvbnRleHQpCi0gICAgICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3
RGVsZWdhdGUuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBu
YW1lOlBBTDo6Z2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlk
Q2hhbmdlTm90aWZpY2F0aW9uKCkgb2JqZWN0Om1fb3V0cHV0Q29udGV4dC5nZXQoKV07CisgICAg
ICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
Om1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlm
aWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6QVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9vdXRwdXRDb250ZXh0LmdldCgpXTsKICAgICB9
CiAKICAgICByZXR1cm4gbV9vdXRwdXRDb250ZXh0LmdldCgpOwpAQCAtMTExLDcgKzExMSw3IEBA
IEFWUm91dGVEZXRlY3RvciAqQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXI6OnJvdXRlRGV0
ZWN0b3IoKQogewogICAgIGlmICghbV9yb3V0ZURldGVjdG9yKSB7CiAgICAgICAgIG1fcm91dGVE
ZXRlY3RvciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NBVlJvdXRlRGV0ZWN0b3JJbnN0YW5jZSgpIGlu
aXRdKTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjptX3JvdXRlUGlja2VyVmlld0RlbGVnYXRlLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rv
cihub3RpZmljYXRpb25IYW5kbGVyOikgbmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZSb3V0
ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbigpIG9i
amVjdDptX3JvdXRlRGV0ZWN0b3IuZ2V0KCldOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUu
Z2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6
QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlv
biBvYmplY3Q6bV9yb3V0ZURldGVjdG9yLmdldCgpXTsKICAgICAgICAgaWYgKFttX3JvdXRlRGV0
ZWN0b3IgbXVsdGlwbGVSb3V0ZXNEZXRlY3RlZF0pCiAgICAgICAgICAgICBhdmFpbGFibGVEZXZp
Y2VzRGlkQ2hhbmdlKCk7CiAgICAgfQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgQVZPdXRwdXRDb250
ZXh0ICogQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXI6Om91dHB1dENvbnRleHQoKQogdm9p
ZCBBVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZVBsYXliYWNrVGFyZ2V0
cygpCiB7CiAgICAgaWYgKG1fcm91dGVEZXRlY3RvcikgewotICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3
RGVsZWdhdGUuZ2V0KCkgbmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9y
TXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbigpIG9iamVjdDptX3Jv
dXRlRGV0ZWN0b3IuZ2V0KCldOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
bmFtZTpQQUw6OkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VO
b3RpZmljYXRpb24gb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CiAgICAgICAgIFttX3Jv
dXRlRGV0ZWN0b3Igc2V0Um91dGVEZXRlY3Rpb25FbmFibGVkOk5PXTsKICAgICAgICAgbV9yb3V0
ZVBpY2tlclZpZXcgPSBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChtX291dHB1dENvbnRleHQp
IHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjptX3JvdXRlUGlja2VyVmlld0RlbGVnYXRlLmdldCgpIG5hbWU6UEFMOjpnZXRfQVZG
b3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRp
b24oKSBvYmplY3Q6bV9vdXRwdXRDb250ZXh0LmdldCgpXTsKKyAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX3JvdXRlUGlja2VyVmll
d0RlbGVnYXRlLmdldCgpIG5hbWU6UEFMOjpBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX291dHB1dENvbnRleHQuZ2V0KCldOwogICAgICAg
ICBtX291dHB1dENvbnRleHQgPSBudWxscHRyOwogICAgIH0KIApAQCAtMjgyLDkgKzI4Miw5IEBA
IC0gKHZvaWQpbm90aWZpY2F0aW9uSGFuZGxlcjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KICAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6UEFMOjpnZXRfQVZG
b3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRp
b24oKV0pCisgICAgICAgIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6
UEFMOjpBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSkK
ICAgICAgICAgICAgIG1fY2FsbGJhY2stPmN1cnJlbnREZXZpY2VEaWRDaGFuZ2UoKTsKLSAgICAg
ICAgZWxzZSBpZiAoW1tub3RpZmljYXRpb24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOlBBTDo6Z2V0
X0FWRm91bmRhdGlvbl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hh
bmdlTm90aWZpY2F0aW9uKCldKQorICAgICAgICBlbHNlIGlmIChbW25vdGlmaWNhdGlvbiBuYW1l
XSBpc0VxdWFsVG9TdHJpbmc6UEFMOjpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVj
dGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSkKICAgICAgICAgICAgIG1fY2FsbGJhY2stPmF2YWls
YWJsZURldmljZXNEaWRDaGFuZ2UoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZG
T2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKaW5kZXggNmNjZmZiMGQ2YTkyZWYwNmFlNzZmODhhMGIy
ODU2OTc1ZGEzYjJmNy4uMDI1ZDBkMzQ0ZjNhZWE0MjhhNmVkODc2ODY4OGNjYWJmZDM3YTMyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKQEAgLTY1LDcg
KzY1LDYgQEAgcHVibGljOgogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVy
VHlwZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29u
c3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Rpdmlz
YWJsZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLm1tCmluZGV4IGU4MzhlY2UzMTdlOTA0NGJiYWM5ZWM3NzBiODkxZmM5YWQzMWNk
ZjAuLjljYWQ4OWQxYzc2YzljYzExOGI0NzEyMmE1NmNiZDU3YTEzMTJkNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTI0NSwxMSArMjQ1LDYg
QEAgRmxvYXRTaXplIE1lZGlhU2FtcGxlQVZGT2JqQzo6cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIEZsb2F0U2l6ZShQQUw6OkNNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFBy
ZXNlbnRhdGlvbkRpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24sIHRydWUsIHRydWUpKTsKIH0K
IAotdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoIntQVFMoIiwgcHJlc2VudGF0aW9uVGltZSgpLCAiKSwgRFRTKCIs
IGRlY29kZVRpbWUoKSwgIiksIGR1cmF0aW9uKCIsIGR1cmF0aW9uKCksICIpLCBmbGFncygiLCAo
aW50KWZsYWdzKCksICIpLCBwcmVzZW50YXRpb25TaXplKCIsIHByZXNlbnRhdGlvblNpemUoKS53
aWR0aCgpLCAieCIsIHByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSwgIil9Iik7Ci19Ci0KIHZv
aWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1l
JiBvZmZzZXQpCiB7CiAgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM3NjhkNWJhZGY1OGViZGMyNWYwNWE0MTM5ZDhhNjE5OTBkZTNiMjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxp
dGllcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVm
IGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBUcmFja0luZm87CisKK1dF
QkNPUkVfRVhQT1JUIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3Jt
YXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oY29uc3QgVHJhY2tJbmZvJik7CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9D
TVV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NN
VXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY5NmQxNGQxMDIyZDNiMDEyMGJmZGFiZmU0ODFjZjkz
MGRmMjBhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDTVV0aWxpdGllcy5oIgorCisjaWYg
UExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
I2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBvcnQgIk1l
ZGlhVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmgiCisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlw
dGlvbi5oPgorI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKKyNpbXBvcnQgIlZpZGVvVG9v
bGJveFNvZnRMaW5rLmgiCisjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsu
aD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL2Nm
L0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVO
QUJMRShPUFVTKSB8fCBFTkFCTEUoVk9SQklTKQorCitzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9J
bmZvJiBpbmZvKQoreworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsK
KyAgICBhc2JkLm1Gb3JtYXRJRCA9IGluZm8uY29kZWNOYW1lLnZhbHVlOworICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBQQUw6OkF1ZGlvRm9ybWF0R2V0
UHJvcGVydHkoa0F1ZGlvRm9ybWF0UHJvcGVydHlfRm9ybWF0SW5mbywgaW5mby5jb29raWVEYXRh
LT5zaXplKCksIGluZm8uY29va2llRGF0YS0+ZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlm
IChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3IsIChj
aGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0
dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
KGFzYmQpLCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCkp
OworfQorCisjZW5kaWYKKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQcmlt
YXJpZXMoUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIHByaW1hcmllcykKK3sKKyAgICBzd2l0
Y2ggKHByaW1hcmllcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpC
dDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1Jf
NzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhv
c3Bob3JzOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVf
MzIxMzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtOgor
ICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG06CisgICAgICAg
IHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2FzZSBQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzE6CisgICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOgorICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwOgorICAgICAgICByZXR1cm4gUEFM
OjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisKK3N0YXRpYyBDRlN0
cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJhY3Rl
cmlzdGljcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9J
VFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFXzI0ME1fMTk5NTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U21wdGVTdDIwODQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgIGNhc2UgUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ6CisgICAgY2Fz
ZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDoKKyAg
ICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lU
VV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlNtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGc6CisgICAgICAgIHJldHVybiBQQUw6
OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMToK
KyAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRp
b25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXRE
ZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICByZXR1
cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RhdGljIENG
U3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoUGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50cyBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAg
ICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50
THVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNy
TWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzOjpCdDQ3MGJnOgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUxNzBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVf
Ul82MDFfNDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5
OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbToKKyAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1Owor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRy
YWNrSW5mbyhjb25zdCBUcmFja0luZm8mIGluZm8pCit7CisgICAgaWYgKGluZm8uaXNBdWRpbygp
KSB7CisgICAgICAgIGF1dG8mIGF1ZGlvSW5mbyA9IGRvd25jYXN0PGNvbnN0IEF1ZGlvSW5mbz4o
aW5mbyk7CisgICAgICAgIGlmICghYXVkaW9JbmZvLmNvb2tpZURhdGEgfHwgIWF1ZGlvSW5mby5j
b29raWVEYXRhLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBzd2l0Y2ggKGF1ZGlvSW5mby5jb2RlY05hbWUudmFsdWUpIHsKKyNpZiBFTkFCTEUoT1BVUykK
KyAgICAgICAgY2FzZSAnb3B1cyc6CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFp
bGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGF1ZGlvSW5mbyk7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBjYXNlICd2b3JiJzoKKyAgICAgICAgICAgIGlmICgh
aXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihhdWRp
b0luZm8pOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaW5mby5pc1ZpZGVvKCkpIHsKKyAgICAg
ICAgYXV0byYgdmlkZW9JbmZvID0gZG93bmNhc3Q8Y29uc3QgVmlkZW9JbmZvPihpbmZvKTsKKwor
ICAgICAgICBhdXRvIGRhdGEgPSB2aWRlb0luZm8uYXRvbURhdGEtPmNyZWF0ZUNGRGF0YSgpOwor
ICAgICAgICBBU1NFUlQodmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAwOScgfHwgdmlkZW9JbmZv
LmNvZGVjTmFtZSA9PSAndnAwOCcpOworICAgICAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvbktl
eXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OworICAgICAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlv
blZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07CisgICAgICAgIGF1dG8gY29uZmlndXJhdGlvbkRp
Y3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25m
aWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25m
aWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgICAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBl
eHRlbnNpb25zS2V5cyB7IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxl
RGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9OworICAgICAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBl
eHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9OworCisgICAgICAg
IGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2UgJiYgKnZpZGVvSW5mby5jb2xvclNw
YWNlLmZ1bGxSYW5nZSkgeworICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6
a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOworICAgICAgICAg
ICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLnByaW1hcmllcykgeworICAgICAgICAg
ICAgaWYgKGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMo
KnZpZGVvSW5mby5jb2xvclNwYWNlLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgICAgICBleHRl
bnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7CisgICAg
ICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNl
LnRyYW5zZmVyKSB7CisgICAgICAgICAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBj
b252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oKnZpZGVvSW5mby5jb2xvclNwYWNlLnRyYW5zZmVy
KSkgeworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZl
clRyYW5zZmVyRnVuY3Rpb25LZXkpOworICAgICAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMu
YXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UubWF0cml4KSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoKnZpZGVvSW5mby5jb2xv
clNwYWNlLm1hdHJpeCkpIHsKKyAgICAgICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQo
a0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7CisgICAgICAgICAgICAgICAgZXh0ZW5zaW9u
c1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRh
dGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICAgICAgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICAg
ICAgQ01WaWRlb0NvZGVjVHlwZSBjb2RlYyA9IHZpZGVvSW5mby5jb2RlY05hbWUgPT0gInZwMDki
ID8ga0NNVmlkZW9Db2RlY1R5cGVfVlA5IDogJ3ZwMDgnOworICAgICAgICBpZiAobm9FcnIgIT0g
UEFMOjpDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
Y29kZWMsIHZpZGVvSW5mby5zaXplLndpZHRoKCksIHZpZGVvSW5mby5zaXplLmhlaWdodCgpLCBl
eHRlbnNpb25zLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30KKworI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBhZTE2
NDE0ZjIxYzY4NDZjMTg5NzcwOWUxNDI0ZTRhNmE0Yjc2MWEwLi5iNTI4OWRjYzg0MmY4NDljMDUw
YmFjZmRkOWMzZTliMDA5MTc3NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRl
ICJBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJDTVV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTM2LDcgKzM3LDYgQEAKICNpbmNsdWRlICJNZWRp
YVNhbXBsZUFWRk9iakMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5o
IgogI2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1By
aXZhdGVXZWJNLmgiCiAjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKQEAgLTIz
NSwyNSArMjM1LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8d2VibTo6SWQ+IHsK
ICAgICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewotICAgIHN0YXRpYyBBU0NJSUxpdGVyYWwgdG9T
dHJpbmcoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGUgc3RhdGUpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6Ok5vbmU6IHJldHVybiAiTm9uZSJfczsKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0VibWw6
IHJldHVybiAiUmVhZGluZ0VibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRFYm1sOiByZXR1cm4gIlJlYWRFYm1sIl9zOwotICAg
ICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5n
U2VnbWVudDogcmV0dXJuICJSZWFkaW5nU2VnbWVudCJfczsKLSAgICAgICAgY2FzZSBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0luZm86IHJldHVybiAiUmVh
ZGluZ0luZm8iX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRJbmZvOiByZXR1cm4gIlJlYWRJbmZvIl9zOwotICAgICAgICBjYXNlIFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nVHJhY2tzOiByZXR1
cm4gIlJlYWRpbmdUcmFja3MiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdUcmFjazogcmV0dXJuICJSZWFkaW5nVHJhY2siX3M7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJl
YWRUcmFjazogcmV0dXJuICJSZWFkVHJhY2siX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdDbHVzdGVyOiByZXR1cm4gIlJlYWRp
bmdDbHVzdGVyIl9zOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiVW5rbm93biJfczsKLSAg
ICB9Ci19OwotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
Mjc3LDE0ICsyNTgsMTQgQEAgc3RhdGljIFN0YXR1cyBzZWdtZW50UmVhZEVycm9yVG9XZWJtU3Rh
dHVzKFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm8KIHsKICAgICBzd2l0Y2gg
KGVycm9yKSB7CiAgICAgY2FzZSBTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJv
cjo6RW5kT2ZGaWxlOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0VuZE9mRmlsZSk7Ci0gICAgY2Fz
ZSBTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6RXJyb3JDb2Rl
OjpSZWFkZXJGYWlsZWQpKTsKKyAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6
UmVhZEVycm9yOjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShXZWJNUGFy
c2VyOjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOwogICAgIH0KIH0KIAotY2xhc3MgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJtOjpSZWFk
ZXIgeworY2xhc3MgV2ViTVBhcnNlcjo6U2VnbWVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyB3ZWJt
OjpSZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZv
aWQgYXBwZW5kU2VnbWVudChTZWdtZW50JiYgc2VnbWVudCkKKyAgICB2b2lkIGFwcGVuZFNlZ21l
bnQoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50JiYgc2VnbWVudCkKICAgICB7CiAgICAgICAg
IG1fZGF0YS5wdXNoX2JhY2soV1RGTW92ZShzZWdtZW50KSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRTZWdtZW50ID09IG1fZGF0YS5lbmQoKSkKQEAgLTM2NSwyMSArMzQ2LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtXb3VsZEJsb2NrKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBGcmVlU2hhcmVkQnVmZmVyKHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVf
dCkKLSAgICB7Ci0gICAgICAgIGF1dG8qIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2hhcmVk
QnVmZmVyKj4ocmVmY29uKTsKLSAgICAgICAgYnVmZmVyLT5kZXJlZigpOwotICAgIH0KLQotICAg
IFN0YXR1cyBSZWFkSW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIENNQmxvY2tCdWZmZXJSZWYg
b3V0cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQorICAgIFN0YXR1cyBSZWFk
SW50byhzdGQ6OnNpemVfdCBudW1Ub1JlYWQsIFNoYXJlZEJ1ZmZlckJ1aWxkZXImIG91dHB1dEJ1
ZmZlciwgdWludDY0X3QqIG51bUFjdHVhbGx5UmVhZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChv
dXRwdXRCdWZmZXIgJiYgbnVtQWN0dWFsbHlSZWFkKTsKKyAgICAgICAgQVNTRVJUKG51bUFjdHVh
bGx5UmVhZCk7CiAgICAgICAgIGlmICghbnVtQWN0dWFsbHlSZWFkKQogICAgICAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCiAgICAgICAgICpudW1BY3R1
YWxseVJlYWQgPSAwOwotICAgICAgICBpZiAoIW91dHB1dEJ1ZmZlcikKLSAgICAgICAgICAgIHJl
dHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICB3aGlsZSAo
bnVtVG9SZWFkICYmIG1fY3VycmVudFNlZ21lbnQgIT0gbV9kYXRhLmVuZCgpKSB7CiAgICAgICAg
ICAgICBhdXRvJiBjdXJyZW50U2VnbWVudCA9ICptX2N1cnJlbnRTZWdtZW50OwpAQCAtMzg5LDQ0
ICszNjIsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmVkQnVmZmVyID0gY3Vy
cmVudFNlZ21lbnQuZ2V0U2hhcmVkQnVmZmVyKCk7Ci0gICAgICAgICAgICBDTUJsb2NrQnVmZmVy
UmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIHVpbnQ2NF90IGxhc3RS
ZWFkID0gMDsKKyAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJhd0Jsb2NrQnVmZmVy
OwogICAgICAgICAgICAgaWYgKCFzaGFyZWRCdWZmZXIpIHsKICAgICAgICAgICAgICAgICAvLyBX
ZSBjb3VsZCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIG5lZWRlZCBpZiB0
aGUgcmVhZCBpcyBwYXJ0aWFsLgotICAgICAgICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJs
b2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxw
dHIsIG51bVRvUmVhZCwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbnVtVG9SZWFk
LCBrQ01CbG9ja0J1ZmZlckFzc3VyZU1lbW9yeU5vd0ZsYWcsICZyYXdCbG9ja0J1ZmZlcik7Ci0g
ICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgICAg
ICBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihyYXdCbG9ja0J1ZmZlciwg
MCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJE
YXRhKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICAgICAgICAgICAgICBp
ZiAoIWJ1ZmZlci50cnlSZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bVRvUmVhZCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAg
ICAgICAgICAgICAgICBhdXRvIHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5yZWFkKG1fcG9z
aXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQsIGJsb2NrQnVmZmVyRGF0YSk7CisgICAgICAg
ICAgICAgICAgYnVmZmVyLnJlc2l6ZShudW1Ub1JlYWQpOworICAgICAgICAgICAgICAgIGF1dG8g
cmVhZFJlc3VsdCA9IGN1cnJlbnRTZWdtZW50LnJlYWQobV9wb3NpdGlvbldpdGhpblNlZ21lbnQs
IG51bVRvUmVhZCwgYnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZWFkUmVz
dWx0Lmhhc192YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudFJlYWRF
cnJvclRvV2VibVN0YXR1cyhyZWFkUmVzdWx0LmVycm9yKCkpOwotICAgICAgICAgICAgICAgIGxh
c3RSZWFkID0gcmVhZFJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBUT0RPOiBjb3VsZCB3ZSBvbmx5IGNyZWF0ZSBhIG5ldyBDTUJsb2NrQnVm
ZmVyIGlmIHRoZSBiYWNrZW5kIG1lbW9yeSBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBvbmU/
Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGNhblJlYWQgPSBzdGQ6Om1pbjxzaXplX3Q+KG51bVRv
UmVhZCwgc2hhcmVkQnVmZmVyLT5zaXplKCkgLSBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCk7Ci0g
ICAgICAgICAgICAgICAgLy8gRnJvbSBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tTb3VyY2UgZG9j
dW1lbnRhdGlvbjoKLSAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgZm9yIDY0LWJpdCBhcmNo
aXRlY3R1cmVzLCB0aGlzIHN0cnVjdCBjb250YWlucyBtaXNhbGlnbmVkIGZ1bmN0aW9uIHBvaW50
ZXJzLgotICAgICAgICAgICAgICAgIC8vIFRvIGF2b2lkIGxpbmstdGltZSBpc3N1ZXMsIGl0IGlz
IHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxvY2tCdWZmZXJDdXN0b21CbG9ja1Nv
dXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCi0gICAgICAgICAgICAgICAgLy8gYnkgdXNp
bmcgYXNzaWdubWVudCBzdGF0ZW1lbnRzLCByYXRoZXIgdGhhbiBkZWNsYXJpbmcgdGhlbSBhcyBn
bG9iYWwgb3Igc3RhdGljIHN0cnVjdHMuCi0gICAgICAgICAgICAgICAgQ01CbG9ja0J1ZmZlckN1
c3RvbUJsb2NrU291cmNlIGFsbG9jYXRvcjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IudmVy
c2lvbiA9IDA7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLkFsbG9jYXRlQmxvY2sgPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5GcmVlQmxvY2sgPSBGcmVlU2hhcmVkQnVm
ZmVyOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZDb24gPSBzaGFyZWRCdWZmZXIuZ2V0
KCk7Ci0gICAgICAgICAgICAgICAgc2hhcmVkQnVmZmVyLT5yZWYoKTsKLSAgICAgICAgICAgICAg
ICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhudWxs
cHRyLCBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2FzdDx1aW50OF90Kj4oc2hhcmVkQnVmZmVy
LT5kYXRhKCkpKSwgc2hhcmVkQnVmZmVyLT5zaXplKCksIG51bGxwdHIsICZhbGxvY2F0b3IsIG1f
cG9zaXRpb25XaXRoaW5TZWdtZW50LCBjYW5SZWFkLCAwLCAmcmF3QmxvY2tCdWZmZXIpOwotICAg
ICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAgICAg
ICAgICAgICAgIGxhc3RSZWFkID0gY2FuUmVhZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gYmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAg
IGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKG91dHB1
dEJ1ZmZlciwgcmF3QmxvY2tCdWZmZXIsIDAsIDAsIDApOwotICAgICAgICAgICAgaWYgKGVyciAh
PSBrQ01CbG9ja0J1ZmZlck5vRXJyKQotICAgICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBidWZmZXIucmVzaXplKHJl
YWRSZXN1bHQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgcmF3QmxvY2tCdWZmZXIgPSBzaGFyZWRCdWZmZXItPmdldENvbnRpZ3Vv
dXNEYXRhKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50LCBudW1Ub1JlYWQpOworICAgICAgICAgICAg
YXV0byBsYXN0UmVhZCA9IHJhd0Jsb2NrQnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICBvdXRw
dXRCdWZmZXIuYXBwZW5kKCpyYXdCbG9ja0J1ZmZlcik7CiAgICAgICAgICAgICBtX3Bvc2l0aW9u
ICs9IGxhc3RSZWFkOwogICAgICAgICAgICAgKm51bUFjdHVhbGx5UmVhZCArPSBsYXN0UmVhZDsK
ICAgICAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ICs9IGxhc3RSZWFkOwpAQCAtNDkx
LDggKzQ0Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ID0g
MDsKICAgICB9CiAKLSAgICBTdGRMaXN0PFNlZ21lbnQ+IG1fZGF0YTsKLSAgICBTdGRMaXN0PFNl
Z21lbnQ+OjppdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CisgICAg
U3RkTGlzdDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+IG1fZGF0YTsKKyAgICBTdGRMaXN0
PFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQg
eyBtX2RhdGEuZW5kKCkgfTsKICAgICBzaXplX3QgbV9wb3NpdGlvbiB7IDAgfTsKICAgICBzaXpl
X3QgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQgeyAwIH07CiB9OwpAQCAtNTg0LDEzOSArNTM1LDQ4
IEBAIHN0YXRpYyBib29sIGNhbkxvYWRGb3JtYXRSZWFkZXIoKQogI2VuZGlmIC8vICFVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzV2Vi
TUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpCi17Ci0gICAgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlcjo6d2ViTUZvcm1hdFJlYWRlckVuYWJsZWQoKSAmJiBjYW5Mb2FkRm9ybWF0UmVh
ZGVyKCkgJiYgaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCk7Ci19Ci0KLU1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9y
dGVkKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQorV2ViTVBhcnNlcjo6V2ViTVBhcnNlcihDYWxs
YmFjayYgY2FsbGJhY2spCisgICAgOiBtX3BhcnNlcihtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxs
b2NDaGVjazxXZWJtUGFyc2VyPigpKQorICAgICwgbV9yZWFkZXIobWFrZVVuaXF1ZVJlZjxTZWdt
ZW50UmVhZGVyPigpKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKLSNpZiBFTkFCTEUo
VlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKLSAgICBpZiAoIWlzV2VibVBh
cnNlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUu
Y29udGFpbmVyVHlwZSgpOwotICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7Ci0gICAgYm9vbCBp
c1ZpZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlw
ZSwgInZpZGVvL3dlYm0iKTsKLSAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1Zp
ZGVvQ29udGFpbmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgCi0gICAgYm9vbCBpc0FueUF1ZGlvQ29kZWNB
dmFpbGFibGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoVk9SQklTKQotICAgIGlzQW55QXVkaW9Db2Rl
Y0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotI2lmIEVO
QUJMRShPUFVTKQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc09wdXNEZWNvZGVy
QXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmIChpc0F1ZGlvQ29udGFpbmVyVHlwZSAmJiAh
aXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGJvb2wgaXNBbnlDb2RlY0F2
YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsKLSNpZiBFTkFCTEUoVlA5KQotICAg
IGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7Ci0jZW5kaWYK
LQotICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICBhdXRvIGNvZGVj
cyA9IHR5cGUuY29kZWNzKCk7Ci0gICAgaWYgKGNvZGVjcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Ok1heUJlU3VwcG9ydGVkOwotCi0g
ICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgewotI2lmIEVOQUJMRShWUDkpCi0gICAgICAg
IGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29kZWMuc3RhcnRzV2l0aCgidnAwOCIp
IHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDkiKSkgewotCi0gICAg
ICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0g
ICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBhcnNlVlBDb2RlY1BhcmFtZXRlcnMo
Y29kZWMpOwotICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFtZXRlcnMpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
Ci0KLSAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRl
ZCgqY29kZWNQYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoVlA5KQotCi0jaWYgRU5BQkxFKFZPUkJJ
UykKLSAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7Ci0gICAgICAgICAgICBpZiAoIWlz
Vm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBs
YXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpCi0KLSNpZiBFTkFC
TEUoT1BVUykKLSAgICAgICAgaWYgKGNvZGVjID09ICJvcHVzIikgewotICAgICAgICAgICAgaWYg
KCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKE9QVVMpCi0KLSAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNTdXBw
b3J0ZWQ7Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotCi0gICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYgLy8g
RU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCiB9CiAKLVJlZlB0
cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpjcmVhdGUo
Y29uc3QgQ29udGVudFR5cGUmIHR5cGUpCitXZWJNUGFyc2VyOjp+V2ViTVBhcnNlcigpCiB7Ci0g
ICAgaWYgKGlzQ29udGVudFR5cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkpOwotICAgIHJldHVybiBudWxscHRyOwogfQogCi1T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKLSAgICA6IG1f
cmVhZGVyKG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKK3ZvaWQgV2ViTVBhcnNlcjo6
cmVzZXRTdGF0ZSgpCiB7Ci0gICAgaWYgKGlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQotICAgICAg
ICBtX3BhcnNlciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdlYm1QYXJzZXI+
KCk7CisgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgaWYgKG1f
cGFyc2VyKQorICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOworICAgIG1fcmVhZGVyLT5yZXNl
dCgpOworICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/IFN0
YXRlOjpSZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOworICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50ID0gbnVsbHB0cjsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVk
ID0gZmFsc2U7CisgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIHRy
YWNrIDogbV90cmFja3MpCisgICAgICAgIHRyYWNrLT5yZXNldCgpOwogfQogCi1Tb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjp+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCit2b2lkIFdlYk1QYXJzZXI6
OnJlc2V0KCkKIHsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3BhcnNlci0+RGlkU2Vl
aygpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVu
dCYmIHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
ciwgQXBwZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCitpbnQgV2ViTVBhcnNlcjo6cGFyc2UoU291cmNl
QnVmZmVyUGFyc2VyOjpTZWdtZW50JiYgc2VnbWVudCkKIHsKLSAgICBpZiAoIW1fcGFyc2VyKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiZmxhZ3MoIiwgYXBwZW5k
RmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkgPyAiRGlzY29udGludWl0eSIgOiAi
IiwgIiksIHNpemUoIiwgc2VnbWVudC5zaXplKCksICIpIik7Ci0KLSAgICBpZiAoYXBwZW5kRmxh
Z3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpIHsKLSAgICAgICAgbV9yZWFkZXItPnJl
c2V0KCk7Ci0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0gICAgfQorICAgIGlmICghbV9w
YXJzZXIpCisgICAgICAgIHJldHVybiAtMTsKICAgICBtX3JlYWRlci0+YXBwZW5kU2VnbWVudChX
VEZNb3ZlKHNlZ21lbnQpKTsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG1fc3RhdHVz
ID0gbV9wYXJzZXItPkZlZWQodGhpcywgJm1fcmVhZGVyKTsKICAgICAgICAgaWYgKG1fc3RhdHVz
Lm9rKCkgfHwgbV9zdGF0dXMuY29kZSA9PSBTdGF0dXM6OmtFbmRPZkZpbGUgfHwgbV9zdGF0dXMu
Y29kZSA9PSBTdGF0dXM6OmtXb3VsZEJsb2NrKSB7CiAgICAgICAgICAgICBtX3JlYWRlci0+cmVj
bGFpbVNlZ21lbnRzKCk7Ci0KLSAgICAgICAgICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBl
ZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1T
YW1wbGVEdXJhdGlvbi4KLSAgICAgICAgICAgIC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwg
bm8gbW9yZSBhdWRpbyBkYXRhIG1heSBiZSBpbmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55
IHBlbmRpbmcKLSAgICAgICAgICAgIC8vIGF1ZGlvIGJ1ZmZlcnMuCi0gICAgICAgICAgICBmbHVz
aFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKLQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKG1fc3RhdHVzLmNvZGUgIT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oRXJy
b3JDb2RlOjpSZWNlaXZlZEVibWxJbnNpZGVTZWdtZW50KSkKQEAgLTc0MSw2MSArNjAxLDI0IEBA
IHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pCiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAg
IEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwgbV9z
dGF0dXMuY29kZSwgIikiKTsKLSAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlz
LCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY29kZSA9IG1fc3RhdHVzLmNvZGVdIHsK
LSAgICAgICAgaWYgKG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCi0g
ICAgICAgICAgICBtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKGNvZGUp
OwotICAgIH0pOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEoKQoteworICAgIHJldHVybiBt
X3N0YXR1cy5jb2RlOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldFNob3Vs
ZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQordm9pZCBXZWJNUGFy
c2VyOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50
aWZpZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50NjRfdCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpyZXNldFBhcnNlclN0YXRlKCkKLXsKLSAgICBJTkZPX0xPR19J
Rl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKLSAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgIG1f
cGFyc2VyLT5EaWRTZWVrKCk7Ci0gICAgbV9yZWFkZXItPnJlc2V0KCk7Ci0gICAgbV9zdGF0ZSA9
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50
IDogU3RhdGU6Ok5vbmU7Ci0gICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwot
ICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKLSAgICBtX2N1
cnJlbnRCbG9jay5yZXNldCgpOwotICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKLSAg
ICAgICAgdHJhY2stPnJlc2V0KCk7CisgICAgbV9sb2dnZXIgPSAmbG9nZ2VyOworICAgIG1fbG9n
SWRlbnRpZmllciA9IGxvZ0lkZW50aWZpZXI7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6aW52YWxpZGF0ZSgpCit2b2lkIFdlYk1QYXJzZXI6OmludmFsaWRhdGUoKQogewotICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotCiAgICAgbV9wYXJzZXIgPSBu
dWxscHRyOwogICAgIG1fdHJhY2tzLmNsZWFyKCk7CiAgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnQgPSBudWxscHRyOwogICAgIG1fY3VycmVudEJsb2NrLnJlc2V0KCk7CiB9CiAKLXZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25z
dCB2b2lkKiBsb2dJZGVudGlmaWVyKQotewotICAgIG1fbG9nZ2VyID0gJmxvZ2dlcjsKLSAgICBt
X2xvZ0lkZW50aWZpZXIgPSBsb2dJZGVudGlmaWVyOwotfQotCi1hdXRvIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAt
PiBUcmFja0RhdGEqCithdXRvIFdlYk1QYXJzZXI6OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVp
bnQ2NF90IHRyYWNrTnVtYmVyKSAtPiBUcmFja0RhdGEqCiB7CiAgICAgZm9yIChhdXRvJiB0cmFj
ayA6IG1fdHJhY2tzKSB7CiAgICAgICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIu
aXNfcHJlc2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRy
YWNrTnVtYmVyKQpAQCAtODA0LDcgKzYyNyw3IEBAIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
bkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rpb24qIGFj
dGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmIG1ldGFkYXRhLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBBU1NFUlQoYWN0aW9uKTsK
ICAgICBpZiAoIWFjdGlvbikKQEAgLTg3Niw3ICs2OTksNyBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25FbGVtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSwgQQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRh
ZGF0YSYgbWV0YWRhdGEpCitTdGF0dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUik7CiAKQEAgLTg5MiwyNCArNzE1LDIwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkK
ICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAic3RhdGUoIiwgb2xkU3Rh
dGUsICItPiIsIG1fc3RhdGUsICIpLCBpZCgiLCBtZXRhZGF0YS5pZCwgIiksIHNpemUoIiwgbWV0
YWRhdGEuc2l6ZSwgIikiKTsKIAogICAgIGlmIChtZXRhZGF0YS5pZCA9PSBJZDo6a1RyYWNrcykg
ewotICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSAmJiAhbV9kaWRQcm92aWRlQ29udGVu
dEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spIHsKKyAgICAg
ICAgaWYgKCFtX2tleUlkcy5pc0VtcHR5KCkgJiYgIW1fY2FsbGJhY2suY2FuRGVjcnlwdCgpKSB7
CiAgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkVuY291
bnRlcmVkIGVuY3J5cHRlZCBjb250ZW50IHdpdGhvdXQgYW4ga2V5IHJlcXVlc3QgY2FsbGJhY2si
KTsKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6Q29u
dGVudEVuY3J5cHRlZCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRp
b25TZWdtZW50RW5jb3VudGVyZWQpIHsKLSAgICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFk
Q2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFsaXph
dGlvblNlZ21lbnQgPSBXVEZNb3ZlKCptX2luaXRpYWxpemF0aW9uU2VnbWVudCldKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxs
YmFjaykKLSAgICAgICAgICAgICAgICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNh
bGxiYWNrKFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfQorICAgICAgICBpZiAobV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJl
ZCkKKyAgICAgICAgICAgIG1fY2FsbGJhY2sucGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdURk1v
dmUoKm1faW5pdGlhbGl6YXRpb25TZWdtZW50KSk7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnQgPSBudWxscHRyOwogICAgICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA9
IHRydWU7CiAKICAgICAgICAgaWYgKCFtX2tleUlkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byYga2V5SWRQYWlyIDogbV9rZXlJZHMpCi0gICAgICAgICAgICAgICAgbV9kaWRQ
cm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJh
Y2soV1RGTW92ZShrZXlJZFBhaXIuc2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0KTsKKyAgICAgICAg
ICAgICAgICBtX2NhbGxiYWNrLmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9y
VHJhY2tJRChXVEZNb3ZlKGtleUlkUGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3QpOwogICAg
ICAgICB9CiAgICAgICAgIG1fa2V5SWRzLmNsZWFyKCk7CiAgICAgfQpAQCAtOTE3LDcgKzczNiw3
IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxl
bWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25z
dCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQorU3RhdHVzIFdlYk1QYXJzZXI6
Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogewogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05MjUsNyArNzQ0LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
Q29kZShFcnJvckNvZGU6OkludmFsaWREb2NUeXBlKSk7CiAKICAgICBtX2luaXRpYWxpemF0aW9u
U2VnbWVudEVuY291bnRlcmVkID0gdHJ1ZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9
IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPEluaXRpYWxpemF0aW9uU2VnbWVudD4o
KTsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1h
bGxvY0NoZWNrPFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PigpOwog
ICAgIC8vIFRPRE86IFNldHRpbmcgdGhpcyB0byBmYWxzZSBoZXJlLCB3aWxsIHByZXZlbnQgYWRk
aW5nIGEgbmV3IG1lZGlhIHNlZ21lbnQgc2hvdWxkIGEKICAgICAvLyBwYXJ0aWFsIGluaXQgc2Vn
bWVudCBiZSBlbmNvdW50ZXJlZCBhZnRlciBhIGNhbGwgdG8gc291cmNlQnVmZmVyLmFib3J0KCku
CiAgICAgLy8gSXQncyBwcm9iYWJseSBmaW5lIGFzIG5vLW9uZSBpbiB0aGVpciByaWdodCBtaW5k
IHNob3VsZCBzZW5kIHBhcnRpYWwgaW5pdCBzZWdtZW50IG9ubHkKQEAgLTkzNiw3ICs3NTUsNyBA
QCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRh
ZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRC
ZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJN
UGFyc2VyOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFj
dGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAt
OTUzLDcgKzc3Miw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRC
ZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFjCiAgICAgcmV0dXJuIFN0YXR1
cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpPbkluZm8oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKK1N0
YXR1cyBXZWJNUGFyc2VyOjpPbkluZm8oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5m
byYgaW5mbykKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApA
QCAtOTY5LDcgKzc4OCw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8o
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKICAgICByZXR1cm4gU3Rh
dHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXN0
ZXImIGNsdXN0ZXIsIEFjdGlvbiogYWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uQ2x1c3Rl
ckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFj
dGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIp
OwogCkBAIC05ODUsNyArODA0LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
Q2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXMKICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBU
cmFja0VudHJ5JiB0cmFja0VudHJ5KQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeShj
b25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5KQogewog
ICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBlLmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRy
eS5jb2RlY19pZC5pc19wcmVzZW50KCkpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwpAQCAtMTA1MCwxNCArODY5LDE0IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJh
Y2tFCiAKICNpZiBFTkFCTEUoVk9SQklTKQogICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JC
SVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFw
cGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5
LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICBtX3RyYWNr
cy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tF
bnRyeSwgKnRoaXMpKTsKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BVUykKICAgICBpZiAoY29kZWNTdHJp
bmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1f
dHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJh
Y2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAg
bV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0
cmFja0VudHJ5LCAqdGhpcykpOwogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKICAgICB9CiAjZW5kaWYKQEAgLTEwNjYsNyArODg1LDcgQEAgU3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBUcmFja0UKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0K
IAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tCZWdpbihjb25z
dCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQor
d2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRh
dGEmLCBjb25zdCBCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9H
X0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMDgxLDcgKzkwMCw3IEBAIHdlYm06
OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVu
dE1ldGFkYXRhJiwgY29uc3QKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVk
KTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tFbmQo
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smKQord2VibTo6U3RhdHVzIFdlYk1Q
YXJzZXI6Ok9uQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smKQog
ewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMDkwLDcg
KzkwOSw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrRW5k
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0
dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpPblNpbXBsZUJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2lt
cGxlQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2Vy
OjpPblNpbXBsZUJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxl
QmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJM
RShMT0dJREVOVElGSUVSKTsKIApAQCAtMTEwNSw3ICs5MjQsNyBAQCB3ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRh
ZGF0YSYsCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrRW5kKGNvbnN0
IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNpbXBsZUJsb2NrJikKK3dlYm06OlN0YXR1cyBXZWJN
UGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNp
bXBsZUJsb2NrJikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsK
IApAQCAtMTExNCw3ICs5MzMsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjbwogICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1l
dGFkYXRhJiwgd2VibTo6QWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6
T25CbG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0
aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7
CiAKQEAgLTExMjYsNyArOTQ1LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGEKICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCB3ZWJtOjpCbG9ja0dyb3VwJiBibG9ja0dyb3VwKQord2VibTo6U3RhdHVz
IFdlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCB3ZWJtOjpCbG9ja0dyb3VwJiBibG9ja0dyb3VwKQogewogICAgIElORk9fTE9HX0lG
X1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogICAgIGlmIChibG9ja0dyb3VwLmJsb2NrLmlzX3By
ZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy5pc19wcmVzZW50KCkpIHsKQEAg
LTExMzYsMTcgKzk1NSwxMyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YQogICAgICAgICAgICAg
RVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJJZ25vcmluZyB1bmtub3duIHRy
YWNrIG51bWJlciAiLCB0cmFja051bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKICAgICAgICAgfQotICAgICAgICBpZiAodHJhY2tEYXRhLT50
cmFjaygpLnRyYWNrX3VpZC5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRp
bmcudmFsdWUoKSA+IDApIHsKLSAgICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJh
Y2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0cmFja0lEID0gdHJhY2tE
YXRhLT50cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpLCBwYWRkaW5nID0gTWVkaWFUaW1lKGJsb2Nr
R3JvdXAuZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcyldKCkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spCi0gICAgICAg
ICAgICAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBwYWRk
aW5nKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFja0RhdGEt
PnRyYWNrKCkudHJhY2tfdWlkLmlzX3ByZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFk
ZGluZy52YWx1ZSgpID4gMCkKKyAgICAgICAgICAgIG1fY2FsbGJhY2sucGFyc2VkVHJpbW1pbmdE
YXRhKHRyYWNrRGF0YS0+dHJhY2soKS50cmFja191aWQudmFsdWUoKSwgTWVkaWFUaW1lKGJsb2Nr
R3JvdXAuZGlzY2FyZF9wYWRkaW5nLnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcykpOwogICAgIH0K
ICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYg
bWV0YWRhdGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJt
OjpTdGF0dXMgV2ViTVBhcnNlcjo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0
YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKICAgICBBU1NF
UlQocmVhZGVyKTsKICAgICBpZiAoIXJlYWRlcikKQEAgLTExODMsMzcgKzk5OCwyMCBAQCB3ZWJt
OjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFk
YXRhJiBtZXRhZGF0YSwgUmVhZAogICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRh
KCpyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZywgUEFMOjpDTVRpbWVNYWtlKGJsb2Nr
LT50aW1lY29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3RpbWVzY2FsZSksIGJsb2NrLT5udW1f
ZnJhbWVzKTsKKyAgICByZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIs
IG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZywgTWVkaWFUaW1lKGJsb2NrLT50aW1lY29kZSArIG1f
Y3VycmVudFRpbWVjb2RlLCBtX3RpbWVzY2FsZSksIGJsb2NrLT5udW1fZnJhbWVzKTsKIH0KIAot
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxD
TVNhbXBsZUJ1ZmZlclJlZj4gc2FtcGxlQnVmZmVyLCB1aW50NjRfdCB0cmFja0lELCBzdGQ6Om9w
dGlvbmFsPHNpemVfdD4gYnl0ZVJhbmdlT2Zmc2V0KQotewotICAgIG1fY2FsbE9uQ2xpZW50VGhy
ZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzYW1wbGVC
dWZmZXIgPSBXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGJ5dGVSYW5nZU9mZnNldF0g
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlh
U2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAg
ICAgIGlmIChieXRlUmFuZ2VPZmZzZXQpCi0gICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0
ZVJhbmdlT2Zmc2V0KCpieXRlUmFuZ2VPZmZzZXQpOwotICAgICAgICBtX2RpZFByb3ZpZGVNZWRp
YURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmco
KSk7Ci0gICAgfSk7Ci19CiAKICNkZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgu
Li4pIGlmIChwYXJzZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRyKCktPmVycm9y
KGxvZ0NoYW5uZWwoKSwgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwg
X19mdW5jX18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQogCi1SZXRh
aW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRh
Ojpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVu
Z3RoKSBjb25zdAorUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpj
b250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3Ro
KSBjb25zdAogewotICAgIGlmICghb2Zmc2V0ICYmICFsZW5ndGggJiYgUEFMOjpDTUJsb2NrQnVm
ZmVySXNSYW5nZUNvbnRpZ3VvdXMobV9jb21wbGV0ZUJsb2NrQnVmZmVyLmdldCgpLCAwLCAwKSkK
LSAgICAgICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKLSAgICBDTUJsb2NrQnVmZmVy
UmVmIHJhd0NvbnRpZ3VvdXNCdWZmZXIgPSBudWxscHRyOwotICAgIGlmIChQQUw6OkNNQmxvY2tC
dWZmZXJDcmVhdGVDb250aWd1b3VzKG51bGxwdHIsIG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQo
KSwgbnVsbHB0ciwgbnVsbHB0ciwgb2Zmc2V0LCBsZW5ndGgsIDAsICZyYXdDb250aWd1b3VzQnVm
ZmVyKSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxU
KFdlYkF1ZGlvLCAiZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGJsb2NrIGJ1ZmZlciIpOwor
ICAgIGlmIChvZmZzZXQgKyBsZW5ndGggPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBhZG9wdENGKHJhd0Nv
bnRpZ3VvdXNCdWZmZXIpOworICAgIHJldHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPmdldENv
bnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJl
YWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRl
c1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnJlYWRGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1l
dGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCiB7CiAgICAgaWYgKG1fY29tcGxldGVQ
YWNrZXRTaXplICYmICptX2NvbXBsZXRlUGFja2V0U2l6ZSAhPSBtZXRhZGF0YS5zaXplKSB7CiAg
ICAgICAgIC8vIFRoZSBwYWNrZXQncyBtZXRhZGF0YSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50
bHkgcGVuZGluZyBjb21wbGV0ZSBwYWNrZXQ7IHJlc3RhcnQuCkBAIC0xMjI0LDIwICsxMDIyLDkg
QEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZy
YW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKICAgICBpZiAoIW1fY29tcGxldGVQYWNrZXRTaXpl
KQogICAgICAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IG1ldGFkYXRhLnNpemU7CiAKLSAgICBp
ZiAoIW1fY3VycmVudEJsb2NrQnVmZmVyKSB7Ci0gICAgICAgIEFTU0VSVCghbV9wYXJ0aWFsQnl0
ZXNSZWFkKTsKLSAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxw
dHI7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHksIDAsICZyYXdCbG9ja0J1
ZmZlcik7Ci0gICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3Qmxv
Y2tCdWZmZXIpIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNN
QmxvY2tCdWZmZXJDcmVhdGVFbXB0eSBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAg
ICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAg
ICB9Ci0KICAgICB3aGlsZSAoKmJ5dGVzUmVtYWluaW5nKSB7CiAgICAgICAgIHVpbnQ2NF90IGJ5
dGVzUmVhZDsKLSAgICAgICAgYXV0byBzdGF0dXMgPSBzdGF0aWNfY2FzdDxTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpTZWdtZW50UmVhZGVyJj4ocmVhZGVyKS5SZWFkSW50bygqYnl0ZXNSZW1haW5p
bmcsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYXV0
byBzdGF0dXMgPSBzdGF0aWNfY2FzdDxXZWJNUGFyc2VyOjpTZWdtZW50UmVhZGVyJj4ocmVhZGVy
KS5SZWFkSW50bygqYnl0ZXNSZW1haW5pbmcsIG1fY3VycmVudEJsb2NrQnVmZmVyLCAmYnl0ZXNS
ZWFkKTsKICAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKICAgICAgICAgbV9w
YXJ0aWFsQnl0ZXNSZWFkICs9IGJ5dGVzUmVhZDsKIApAQCAtMTI0OSwxNTYgKzEwMzYsOTIgQEAg
d2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1f
Y29tcGxldGVQYWNrZXRTaXplKQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0
YXR1czo6a09rUGFydGlhbCk7CiAKLSAgICBpZiAoIW1fY29tcGxldGVCbG9ja0J1ZmZlcikKLSAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gV1RGTW92ZShtX2N1cnJlbnRCbG9ja0J1ZmZl
cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBw
ZW5kQnVmZmVyUmVmZXJlbmNlKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQXBwZW5kQnVm
ZmVyUmVmZXJlbmNlIHRvIGNvbXBsZXRlIGJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
LSAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAg
ICAgICAgfQotICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgfQor
ICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IG1fY3VycmVudEJsb2NrQnVmZmVyLnRha2UoKTsK
KyAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKICAgICBtX3BhcnRpYWxC
eXRlc1JlYWQgPSAwOwogCiAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtP
a0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29u
c3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit2b2lkIFdlYk1Q
YXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKK3sKKyAg
ICBtX2tleUZyYW1lcy5jbGVhcigpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFt
ZXNTdGF0ZSgpOworfQorCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRh
dGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IE1lZGlhVGltZSYg
cHJlc2VudGF0aW9uVGltZSwgaW50KQogewogI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzdGF0
dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nKTsKICAg
ICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1czsKIAot
ICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVzZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCwgbWV0
YWRhdGEpOwotICAgIHJlc2V0KCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwotICAgIFVOVVNFRF9QQVJBTShz
YW1wbGVDb3VudCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKLX0KKyAgICBtX2xhc3RQb3NpdGlvbiA9IG1ldGFkYXRhLnBvc2l0aW9uOwogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQsIGNv
bnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhKQotewotI2lmIEVOQUJMRShWUDkpCi0g
ICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKICAgICBjb25zdGV4cHIgc2l6
ZV90IG1heEhlYWRlclNpemUgPSAzMjsgLy8gVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgVlA5IHVu
Y29tcHJlc3NlZCBoZWFkZXIgaXMgMTQ0IGJpdHMgYW5kIDExIGJ5dGVzIGZvciBWUDguIFJvdW5k
IGhpZ2guCi0gICAgc2l6ZV90IHNlZ21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFk
ZXJTaXplLCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgIHNpemVfdCBzZWdtZW50SGVhZGVy
TGVuZ3RoID0gc3RkOjptaW4obWF4SGVhZGVyU2l6ZSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5z
aXplKCkpOwogICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJs
b2NrQnVmZmVyKDAsIHNlZ21lbnRIZWFkZXJMZW5ndGgpOwogICAgIGlmICghY29udGlndW91c0J1
ZmZlcikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNr
RGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyIGZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBkYXRh
IGJsb2NrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNN
QmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxs
cHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwotICAgIGlmIChlcnIpIHsK
LSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERh
dGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YSBmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOworICAg
ICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQorICAgIGNv
bnN0IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsK
IAogICAgIGJvb2wgaXNLZXkgPSBmYWxzZTsKLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CiAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBl
OjpWUDkpIHsKICAgICAgICAgaWYgKCFtX2hlYWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhl
YWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpKQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcp
OwogCiAgICAgICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkgewogICAgICAgICAgICAgaXNL
ZXkgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2so
KS52aWRlby52YWx1ZSgpLmNvbG91cik7Ci0gICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFp
bGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0Rm9ybWF0
RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICAgICAgc2V0
Rm9ybWF0RGVzY3JpcHRpb24oY3JlYXRlVmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihtX2hl
YWRlclBhcnNlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6VlA4KSB7CiAgICAgICAgIGF1dG8g
aGVhZGVyID0gcGFyc2VWUDhGcmFtZUhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFk
ZXJMZW5ndGgpOwogICAgICAgICBpZiAoaGVhZGVyICYmIGhlYWRlci0+a2V5ZnJhbWUpIHsKICAg
ICAgICAgICAgIGlzS2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoKmhlYWRlciwgdHJhY2so
KS52aWRlby52YWx1ZSgpLmNvbG91cik7Ci0gICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFp
bGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0Rm9ybWF0
RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICAgICAgc2V0
Rm9ybWF0RGVzY3JpcHRpb24oY3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0
cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKSk7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBp
ZiAoIW1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzLnNldEluZm8oZm9ybWF0RGVzY3JpcHRpb24oKSk7CisgICAgZWxzZSBpZiAoZm9y
bWF0RGVzY3JpcHRpb24oKSAmJiAqZm9ybWF0RGVzY3JpcHRpb24oKSAhPSAqbV9jb21wbGV0ZU1l
ZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKKwogICAg
IGF1dG8gdHJhY2sgPSB0aGlzLT50cmFjaygpOwotICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1pZ2h0
IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMgYmVl
biByZWFkIGludG8gYGNvbXBsZXRlQmxvY2tCdWZmZXJgLgotICAgIC8vIEJlbG93IHdlIGNyZWF0
ZSBzYW1wbGUgYnVmZmVycyBmb3IgZWFjaCBmcmFtZSwgZWFjaCB3aXRoIHRoZSBibG9jaydzIHRp
bWVjb2RlIGFuZCBgbnVtX2ZyYW1lc2AgdmFsdWUuCi0gICAgLy8gU2hvdWxkbid0IHdlIGNyZWF0
ZSBqdXN0IG9uZSBzYW1wbGUgYnVmZmVyIG9uY2UgYWxsIHRoZSBibG9jaydzIGZyYW1lcyBoYXZl
IGJlZW4gcmVhZCBpbnRvIGBjdXJyZW50QmxvY2tCdWZmZXJgPwogCiAgICAgdWludDY0X3QgZHVy
YXRpb24gPSAwOwogICAgIGlmICh0cmFjay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkK
LSAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVz
ZW50YXRpb25UaW1lLnRpbWVzY2FsZSAvIGtfdXNfaW5fc2Vjb25kczsKKyAgICAgICAgZHVyYXRp
b24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRp
bWVTY2FsZSgpIC8ga191c19pbl9zZWNvbmRzOwogCi0gICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3
U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0g
eyBQQUw6OkNNVGltZU1ha2UoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwg
cHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSB9OwotICAgIGVyciA9IFBBTDo6Q01T
YW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXIuZ2V0KCksIHRoaXMtPmZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIHNhbXBsZUNv
dW50LCAxLCAmdGltaW5nLCAxLCAmKm1fY29tcGxldGVQYWNrZXRTaXplLCAmcmF3U2FtcGxlQnVm
ZmVyKTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lC
TEUoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihy
YXdTYW1wbGVCdWZmZXIpOworICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJl
c2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lKGR1cmF0aW9uLCBwcmVz
ZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpKSwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVhc2VO
b25OdWxsKCksIGlzS2V5ID8gTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgOiBNZWRp
YVNhbXBsZTo6U2FtcGxlRmxhZ3M6Ok5vbmUgfSk7CiAKLSAgICBhdXRvIGF0dGFjaG1lbnRzQXJy
YXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVC
dWZmZXIuZ2V0KCksIHRydWUpOwotICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKLSAgICBp
ZiAoIWF0dGFjaG1lbnRzQXJyYXkpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5V
TEwiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CiAKLSAgICBpZiAoIWlzS2V5KSB7Ci0gICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQg
PSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9j
Zl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0
YWNobWVudHNBcnJheSwgaSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0
YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFu
VHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFj
a191aWQudmFsdWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKFdURk1vdmUoc2Ft
cGxlQnVmZmVyKSwgdHJhY2tJRCwgbWV0YWRhdGEucG9zaXRpb24pOworICAgIEFTU0VSVCghKmJ5
dGVzUmVtYWluaW5nKTsKKyAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09r
Q29tcGxldGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOwog
ICAgIFVOVVNFRF9QQVJBTShzYW1wbGVDb3VudCk7CiAgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRh
KTsKLSNlbmRpZiAvLyBFTkFCTEUoVlA5KQorICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKKyNlbmRpZgogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1
ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpCit2b2lkIFdlYk1QYXJzZXI6OkF1ZGlvVHJh
Y2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKIHsKICAgICBtTnVtRnJhbWVzSW5D
b21wbGV0ZUJsb2NrID0gMDsKLSAgICBtX3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAgbV9wYWNr
ZXRUaW1pbmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCA9IDA7Ci0g
ICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZCgpOworICAgIFRyYWNrRGF0YTo6cmVzZXRDb21w
bGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFk
ZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5p
bmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQord2Vi
bTo6U3RhdHVzIFdlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdl
Ym06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0
X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGlu
dCkKIHsKLSAgICBpZiAobV9wYWNrZXRUaW1pbmdzLnNpemUoKSkgewotICAgICAgICBhdXRvJiBs
YXN0VGltaW5nID0gbV9wYWNrZXRUaW1pbmdzLmxhc3QoKTsKLSAgICAgICAgaWYgKFBBTDo6Q01U
aW1lQ29tcGFyZShQQUw6OkNNVGltZUFkZChsYXN0VGltaW5nLmR1cmF0aW9uLCBsYXN0VGltaW5n
LnByZXNlbnRhdGlvblRpbWVTdGFtcCksIHByZXNlbnRhdGlvblRpbWUpKSB7Ci0gICAgICAgICAg
ICAvLyBEaXNjb250aW51aXR5IGVuY291bnRlcmVkLCBlbWl0IHRoZSBwcmV2aW91c2x5IGRlbXV4
ZWQgc2FtcGxlcy4KLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihtZXRhZGF0YS5wb3Np
dGlvbik7Ci0gICAgICAgICAgICByZXNldCgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYXV0
byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5n
KTsKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0YXR1
czsKIAotICAgIC8vIEF0dGVtcHRzIHRvIG1pbmltaXNlIHRoZSBhbW91bnQgb2YgbWVtb3J5IGFs
bG9jYXRpb25zIGR1ZSB0byByZXBldGl0dmUgQ01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVy
ZW5jZSBjYWxscyBpbiByZWFkRnJhbWVEYXRhLgotICAgIG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxv
Y2srKzsKLSAgICBpZiAobU51bUZyYW1lc0luQ29tcGxldGVCbG9jayA+IG1NYXhCbG9ja0J1ZmZl
ckNhcGFjaXR5KQotICAgICAgICBtTWF4QmxvY2tCdWZmZXJDYXBhY2l0eSA9IG1OdW1GcmFtZXNJ
bkNvbXBsZXRlQmxvY2s7Ci0KLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7CisgICAgbV9s
YXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKIAogICAgIGlmICghZm9ybWF0RGVzY3Jp
cHRpb24oKSkgewogICAgICAgICBpZiAoIXRyYWNrKCkuY29kZWNfcHJpdmF0ZS5pc19wcmVzZW50
KCkpIHsKQEAgLTE0MDYsMjQgKzExMjksMTggQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAg
ICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAg
fQogCi0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNj
cmlwdGlvbjsKKyAgICAgICAgUmVmUHRyPEF1ZGlvSW5mbz4gZm9ybWF0RGVzY3JpcHRpb247CiAg
ICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRlLnZhbHVlKCk7
CiAgICAgICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6Vm9yYmlzKQotICAgICAgICAgICAg
Zm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHBy
aXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKKyAgICAgICAgICAgIGZvcm1h
dERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHByaXZhdGVEYXRhLnNpemUoKSwg
cHJpdmF0ZURhdGEuZGF0YSgpKTsKICAgICAgICAgZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5
cGU6Ok9wdXMpIHsKLSAgICAgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3Vv
dXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQsICptX2NvbXBs
ZXRlUGFja2V0U2l6ZSk7CisgICAgICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250
aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplKTsK
ICAgICAgICAgICAgIGlmICghY29udGlndW91c0J1ZmZlcikgewogICAgICAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVE
YXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKGNvbnRp
Z3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVm
ZmVyRGF0YSk7Ci0gICAgICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICAgICAgUEFSU0VS
X0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxl
ZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVy
LCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBPcHVzQ29va2ll
Q29udGVudHMgY29va2llQ29udGVudHM7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZh
dGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0
ZVBhY2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpKSB7CisgICAgICAg
ICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0
ZURhdGEuZGF0YSgpLCBjb250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRpZ3VvdXNCdWZmZXIt
PmRhdGEoKSwgY29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAg
ICAgICAgICAgfQpAQCAtMTQzMyw0MCArMTE1MCwyOSBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVh
ZAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9mcmFtZXNQZXJQYWNrZXQgPSBjb29raWVD
b250ZW50cy5mcmFtZXNQZXJQYWNrZXQ7CiAgICAgICAgICAgICBtX2ZyYW1lRHVyYXRpb24gPSBj
b29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uOwotICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb29raWVDb250ZW50cyk7Cisg
ICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29va2ll
Q29udGVudHMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikg
ewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIGNy
ZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIiKTsKKyAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgQXVk
aW9JbmZvIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CiAgICAgICAgICAgICByZXR1cm4gU2tp
cCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHN0
cmVhbURlc2NyaXB0aW9uID0gUEFMOjpDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLmdldCgpKTsKLSAgICAgICAgaWYgKCFz
dHJlYW1EZXNjcmlwdGlvbikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBm
YWlsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKLSAgICAgICAgfQotICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gUEFMOjpDTVRpbWVNYWtl
KHN0cmVhbURlc2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0LCBzdHJlYW1EZXNjcmlwdGlvbi0+
bVNhbXBsZVJhdGUpOworICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gTWVkaWFUaW1lKGZvcm1h
dERlc2NyaXB0aW9uLT5mcmFtZXNQZXJQYWNrZXQsIGZvcm1hdERlc2NyaXB0aW9uLT5yYXRlKTsK
IAotICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9u
KSk7CisgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6Ok9wdXMp
IHsKICAgICAgICAgLy8gT3B1cyB0ZWNobmljYWxseSBhbGxvd3MgdGhlIGZyYW1lIGR1cmF0aW9u
IGFuZCBmcmFtZXMtcGVyLXBhY2tldCB2YWx1ZXMgdG8gY2hhbmdlIGZyb20gcGFja2V0IHRvIHBh
Y2tldC4KICAgICAgICAgLy8gQ29yZUF1ZGlvIGRvZXNuJ3Qgc3VwcG9ydCBBU0JEIHZhbHVlcyBs
aWtlIHRoZXNlIHRvIGNoYW5nZSBvbiBhIHBlci1wYWNrZXQgYmFzaXMsIHNvIHRocm93IGFuIGVy
cm9yIHdoZW4KICAgICAgICAgLy8gdGhhdCBraW5kIG9mIHZhcmlhYmlsaXR5IGlzIGVuY291bnRl
cmVkLgogICAgICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7CiAgICAgICAg
IGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRlLnZhbHVlKCk7Ci0gICAg
ICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVy
KG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAg
ICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVy
KDAsIGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICBpZiAoIWNvbnRpZ3VvdXNC
dWZmZXIpIHsKICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMg
ZGF0YSBibG9jayIpOwogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwogICAgICAgICB9Ci0gICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51
bGxwdHI7Ci0gICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50
ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgKGNoYXIqKikm
YmxvY2tCdWZmZXJEYXRhKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgUEFSU0VS
X0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxl
ZCB3aXRoIGVycm9yIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVE
YXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBh
Y2tldFNpemUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpCisgICAgICAgIGlmICgh
cGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRh
KCksIGNvbnRpZ3VvdXNCdWZmZXItPnNpemUoKSwgY29udGlndW91c0J1ZmZlci0+ZGF0YSgpLCBj
b29raWVDb250ZW50cykKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1lc1BlclBh
Y2tldCAhPSBtX2ZyYW1lc1BlclBhY2tldAogICAgICAgICAgICAgfHwgY29va2llQ29udGVudHMu
ZnJhbWVEdXJhdGlvbiAhPSBtX2ZyYW1lRHVyYXRpb24pIHsKICAgICAgICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIk9wdXMgZnJhbWVzLXBlci1wYWNrZXQgY2hhbmdlZCB3aXRo
aW4gYSB0cmFjazsgZXJyb3IiKTsKQEAgLTE0NzQsNjMgKzExODAsMzMyIEBAIHdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSh3ZWJtOjpSZWFkCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3BhY2tldFNpemVzLmFwcGVu
ZCgqbV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIG1fcGFja2V0VGltaW5ncy5hcHBlbmQoeyBt
X3BhY2tldER1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLCBQQUw6OmtDTVRpbWVJbnZhbGlkIH0p
OwotICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgKz0gKm1fY29tcGxldGVQYWNrZXRTaXpl
OwotICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OworICAgIGlmICghbV9j
b21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBs
ZXMuc2V0SW5mbyhmb3JtYXREZXNjcmlwdGlvbigpKTsKKyAgICBlbHNlIGlmIChmb3JtYXREZXNj
cmlwdGlvbigpICYmICpmb3JtYXREZXNjcmlwdGlvbigpICE9ICptX2NvbXBsZXRlTWVkaWFTYW1w
bGVzLmluZm8oKSkKKyAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgYXV0byBz
YW1wbGVEdXJhdGlvbiA9IFBBTDo6Q01UaW1lR2V0U2Vjb25kcyhQQUw6OkNNVGltZVN1YnRyYWN0
KHByZXNlbnRhdGlvblRpbWUsIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSkpICsgUEFMOjpDTVRp
bWVHZXRTZWNvbmRzKG1fcGFja2V0RHVyYXRpb24pICogc2FtcGxlQ291bnQ7CisgICAgbV9jb21w
bGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCksIG1fcGFja2V0RHVyYXRpb24sIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxl
YXNlTm9uTnVsbCgpLCBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyB9KTsKIAotICAg
IGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikgewotICAgICAg
ICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9zaXRpb24pOwotICAgICAgICByZXNldCgp
OwotICAgIH0KKyAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKICAgICBBU1NFUlQoISpieXRl
c1JlbWFpbmluZyk7CiAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0Rh
dGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJh
bmdlT2Zmc2V0KQorCitib29sIFdlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJp
bmdWaWV3IG5hbWUpCit7CisgICAgcmV0dXJuIG5hbWUgPT0gIlZfVlA4IiB8fCBuYW1lID09ICJW
X1ZQOSI7Cit9CisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRBdWRpb0NvZGVjKFN0cmlu
Z1ZpZXcgbmFtZSkKK3sKKyAgICByZXR1cm4gbmFtZSA9PSAiQV9WT1JCSVMiIHx8IG5hbWUgPT0g
IkFfT1BVUyI7Cit9CisKK1NvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKQorICAgIDogbV9wYXJzZXIoKnRoaXMpCit7Cit9CisKK2Jvb2wgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm4g
UGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9ybWF0UmVhZGVyRW5hYmxlZCgpICYm
IGNhbkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJzZXJBdmFpbGFibGUoKTsKK30KKwor
TWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Omlz
Q29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCit7CisjaWYgRU5B
QkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisgICAgaWYgKCFpc1dl
Ym1QYXJzZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBhdXRvIGNvbnRhaW5lclR5cGUgPSB0
eXBlLmNvbnRhaW5lclR5cGUoKTsKKyAgICBib29sIGlzQXVkaW9Db250YWluZXJUeXBlID0gZXF1
YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAiYXVkaW8vd2VibSIpOworICAgIGJv
b2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5l
clR5cGUsICJ2aWRlby93ZWJtIik7CisgICAgaWYgKCFpc0F1ZGlvQ29udGFpbmVyVHlwZSAmJiAh
aXNWaWRlb0NvbnRhaW5lclR5cGUpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpT
dXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYm9vbCBpc0FueUF1ZGlvQ29kZWNB
dmFpbGFibGUgPSBmYWxzZTsKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlzQW55QXVkaW9Db2Rl
Y0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorI2lmIEVO
QUJMRShPUFVTKQorICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc09wdXNEZWNvZGVy
QXZhaWxhYmxlKCk7CisjZW5kaWYKKworICAgIGlmIChpc0F1ZGlvQ29udGFpbmVyVHlwZSAmJiAh
aXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGJvb2wgaXNBbnlDb2RlY0F2
YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsKKyNpZiBFTkFCTEUoVlA5KQorICAg
IGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7CisjZW5kaWYK
KworICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBhdXRvIGNvZGVj
cyA9IHR5cGUuY29kZWNzKCk7CisgICAgaWYgKGNvZGVjcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Ok1heUJlU3VwcG9ydGVkOworCisg
ICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgeworI2lmIEVOQUJMRShWUDkpCisgICAgICAg
IGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29kZWMuc3RhcnRzV2l0aCgidnAwOCIp
IHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDkiKSkgeworCisgICAg
ICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisg
ICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBhcnNlVlBDb2RlY1BhcmFtZXRlcnMo
Y29kZWMpOworICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFtZXRlcnMpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CisKKyAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZFN1cHBvcnRl
ZCgqY29kZWNQYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQorCisjaWYgRU5BQkxFKFZPUkJJ
UykKKyAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7CisgICAgICAgICAgICBpZiAoIWlz
Vm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBs
YXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpCisKKyNpZiBFTkFC
TEUoT1BVUykKKyAgICAgICAgaWYgKGNvZGVjID09ICJvcHVzIikgeworICAgICAgICAgICAgaWYg
KCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE9QVVMpCisKKyAgICAgICAg
cmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNTdXBw
b3J0ZWQ7CisKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworCisgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisjZW5kaWYgLy8g
RU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCit9CisKK1JlZlB0
cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpjcmVhdGUo
Y29uc3QgQ29udGVudFR5cGUmIHR5cGUpCit7CisgICAgaWYgKGlzQ29udGVudFR5cGVTdXBwb3J0
ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRl
ZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkp
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYk1QYXJzZXI6OnByb3ZpZGVNZWRp
YURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzLCB1aW50NjRfdCBwb3NpdGlvbikKK3sK
KyAgICBtX2NhbGxiYWNrLnBhcnNlZE1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZXMpLCBwb3NpdGlv
bik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkSW5pdGlhbGl6YXRp
b25EYXRhKEluaXRpYWxpemF0aW9uU2VnbWVudCYmIGluaXRpYWxpemF0aW9uU2VnbWVudCkKIHsK
LSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0VtcHR5KCkpCisgICAgbV9jYWxsT25DbGllbnRUaHJl
YWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGluaXRpYWxp
emF0aW9uU2VnbWVudCA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjaykKKyAg
ICAgICAgICAgIG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhXVEZNb3ZlKGlu
aXRpYWxpemF0aW9uU2VnbWVudCkpOworICAgIH0pOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnBhcnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9j
aywgdWludDY0X3QgcG9zaXRpb24pCit7CisgICAgaWYgKCFzYW1wbGVzQmxvY2suaW5mbygpKSB7
CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiTm8gVHJhY2tJ
bmZvIHNldCIpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGVyciA9IFBBTDo6Q01TYW1w
bGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2NvbXBsZXRlQmxvY2tC
dWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0U2l6ZXMuc2l6
ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3MuZGF0YSgpLCBtX3Bh
Y2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCksICZyYXdTYW1wbGVCdWZmZXIp
OwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNjcmlwdGlvbnMgZmFpbGVkIHdp
dGggJWQiLCBlcnIpOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3Jt
YXREZXNjcmlwdGlvbjsKKyAgICBpZiAoc2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgeworICAgICAg
ICBpZiAobV92aWRlb0luZm8gIT0gc2FtcGxlc0Jsb2NrLmluZm8oKSkgeworICAgICAgICAgICAg
bV92aWRlb0luZm8gPSBzYW1wbGVzQmxvY2suaW5mbygpOworICAgICAgICAgICAgbV92aWRlb0Zv
cm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpz
YW1wbGVzQmxvY2suaW5mbygpKTsKKyAgICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlv
biA9IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
bV9hdWRpb0luZm8gIT0gc2FtcGxlc0Jsb2NrLmluZm8oKSkgeworICAgICAgICAgICAgZmx1c2hQ
ZW5kaW5nQXVkaW9TYW1wbGVzKCk7CisgICAgICAgICAgICBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKnNhbXBsZXNCbG9jay5p
bmZvKCkpOworICAgICAgICAgICAgbV9hdWRpb0luZm8gPSBzYW1wbGVzQmxvY2suaW5mbygpOwor
ICAgICAgICB9CisgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gbV9hdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uOworICAgIH0KKworICAgIGlmIChzYW1wbGVzQmxvY2suaXNWaWRlbygpKSB7CisgICAg
ICAgIHJldHVyblNhbXBsZXMobV92aWRlb0luZm8uZ2V0KCksIHNhbXBsZXNCbG9jay50YWtlU2Ft
cGxlcygpLCBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2Ft
cGxlQnVmZmVyKTsKIAotICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVl
KCk7Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNhbXBsZUJ1ZmZlciks
IHRyYWNrSUQsIGxhdGVzdEJ5dGVSYW5nZU9mZnNldCk7CisgICAgLy8gUGFjayBhdWRpbyBpZiBu
ZWVkZWQuCisgICAgaWYgKG1fcXVldWVkQXVkaW9TYW1wbGVzLnNpemUoKSkgeworICAgICAgICBh
dXRvJiBsYXN0U2FtcGxlID0gbV9xdWV1ZWRBdWRpb1NhbXBsZXMubGFzdCgpOworICAgICAgICBp
ZiAobGFzdFNhbXBsZS5kdXJhdGlvbiArIGxhc3RTYW1wbGUucHJlc2VudGF0aW9uVGltZSAhPSBz
YW1wbGVzQmxvY2suZmlyc3QoKS5wcmVzZW50YXRpb25UaW1lKQorICAgICAgICAgICAgZmx1c2hQ
ZW5kaW5nQXVkaW9TYW1wbGVzKHBvc2l0aW9uKTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBzYW1w
bGUgOiBzYW1wbGVzQmxvY2spCisgICAgICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiArPSBzYW1w
bGUuZHVyYXRpb247CisgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMuYXBwZW5kKFdURk1vdmUoc2Ft
cGxlc0Jsb2NrKSk7CisgICAgaWYgKG1fcXVldWVkQXVkaW9EdXJhdGlvbiA8IG1fbWluaW11bUF1
ZGlvU2FtcGxlRHVyYXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBmbHVzaFBlbmRpbmdBdWRp
b1NhbXBsZXMocG9zaXRpb24pOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZs
dXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJl
dHVyblNhbXBsZXMoY29uc3QgVHJhY2tJbmZvKiBpbmZvLCBNZWRpYVNhbXBsZXNCbG9jazo6U2Ft
cGxlc1ZlY3RvciYmIHNhbXBsZXMsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3Jp
cHRpb24sIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9uKQogewotICAgIGZvciAoYXV0
byYgdHJhY2sgOiBtX3RyYWNrcykgewotICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pIHsKLSAgICAg
ICAgICAgIEF1ZGlvVHJhY2tEYXRhJiBhdWRpb1RyYWNrID0gZG93bmNhc3Q8QXVkaW9UcmFja0Rh
dGE+KHRyYWNrLmdldCgpKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2suY3JlYXRlU2FtcGxlQnVm
ZmVyKCk7Ci0gICAgICAgICAgICBhdWRpb1RyYWNrLnJlc2V0Q29tcGxldGVkKCk7CisgICAgaWYg
KCFzYW1wbGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFJldGFpblB0cjxDTUJsb2Nr
QnVmZmVyUmVmPiBjb21wbGV0ZUJsb2NrQnVmZmVyczsKKyAgICBpZiAoc2FtcGxlcy5zaXplKCkg
PiAxKSB7CisgICAgICAgIC8vIE9wdGltaXNhdGlvbiBzbyB0aGF0IHdlIGFsbG9jYXRlIHRoZSBl
bnRpcmUgQ01CbG9ja0J1ZmZlciBhdCBvbmNlIGlmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB0byBy
ZXR1cm4uCisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRy
OworICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFs
bG9jYXRvckRlZmF1bHQsIHNhbXBsZXMuc2l6ZSgpLCAwLCAmcmF3QmxvY2tCdWZmZXIpOworICAg
ICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Jsb2NrQnVmZmVyKSB7
CisgICAgICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVF
bXB0eSBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KKyAgICAgICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSByYXdCbG9ja0J1ZmZlcjsKICAg
ICB9CisgICAgVmVjdG9yPENNU2FtcGxlVGltaW5nSW5mbz4gcGFja2V0VGltaW5nczsKKyAgICBW
ZWN0b3I8c2l6ZV90PiBwYWNrZXRTaXplczsKKyAgICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBs
ZXMpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxlLmRhdGEpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvJiBkYXRhID0gc3RkOjpnZXQ8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+PihzYW1wbGUuZGF0YSk7CisgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBkYXRhLT5j
cmVhdGVDTUJsb2NrQnVmZmVyKCk7CisgICAgICAgIGlmICghYmxvY2tCdWZmZXIpIHsKKyAgICAg
ICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiY3JlYXRlQ01CbG9j
a0J1ZmZlcjogZmFpbGVkIHRvIGNyZWF0ZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFjb21wbGV0ZUJsb2NrQnVmZmVycykKKyAgICAgICAgICAgIGNv
bXBsZXRlQmxvY2tCdWZmZXJzID0gV1RGTW92ZShibG9ja0J1ZmZlcik7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJS
ZWZlcmVuY2UoY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCksIGJsb2NrQnVmZmVyLmdldCgpLCAw
LCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vycikgewor
ICAgICAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiQ01C
bG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZTogbm90IGVub3VnaCBtZW1vcnkiKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
cGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OnRvQ01UaW1lKHNhbXBsZS5kdXJhdGlvbiksIFBB
TDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUpLCBQQUw6OnRvQ01UaW1lKHNhbXBs
ZS5kZWNvZGVUaW1lKSB9KTsKKyAgICAgICAgcGFja2V0U2l6ZXMuYXBwZW5kKGRhdGEtPnNpemUo
KSk7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVs
bHB0cjsKKyAgICBpZiAoYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHko
a0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1hdERl
c2NyaXB0aW9uLCBwYWNrZXRTaXplcy5zaXplKCksIHBhY2tldFRpbWluZ3Muc2l6ZSgpLCBwYWNr
ZXRUaW1pbmdzLmRhdGEoKSwgcGFja2V0U2l6ZXMuc2l6ZSgpLCBwYWNrZXRTaXplcy5kYXRhKCks
ICZyYXdTYW1wbGVCdWZmZXIpKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJ
REVOVElGSUVSLCAiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeTogZmFpbGVkIHRvIGNyZWF0ZSBz
YW1wbGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpbmZvLT5pc1ZpZGVv
KCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZl
ckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICAg
ICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOworICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJy
YXkpIHsKKyAgICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAi
Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5OiBmYWlsZWQgdG8gcmV0cmll
dmUgYXR0YWNobWVudCBhcnJheSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9
PSBzYW1wbGVzLnNpemUoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBD
RkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9j
YXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNo
bWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgaWYgKCEoc2FtcGxlc1tpXS5mbGFncyAmIE1l
ZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jKSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rp
b25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05v
dFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY2FsbE9u
Q2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCB0cmFja0lEID0gaW5mby0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1w
bGVCdWZmZXIpLCBwb3NpdGlvbl0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQcm92
aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0
byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5n
ZXQoKSwgdHJhY2tJRCk7CisgICAgICAgIGlmIChwb3NpdGlvbikKKyAgICAgICAgICAgIG1lZGlh
U2FtcGxlLT5zZXRCeXRlUmFuZ2VPZmZzZXQoKnBvc2l0aW9uKTsKKworICAgICAgICBtX2RpZFBy
b3ZpZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1w
dHlTdHJpbmcoKSk7CisgICAgfSk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit2b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZFRyaW1taW5nRGF0YSh1aW50NjRfdCB0cmFja0lELCBj
b25zdCBNZWRpYVRpbWUmIHBhZGRpbmcpCiB7Ci0gICAgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbiA9IGR1cmF0aW9uOworICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCB0cmFja0lELCBwYWRkaW5nXSAoKSB7Cisg
ICAgICAgIGlmIChtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICBt
X2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sodHJhY2tJRCwgcGFkZGluZyk7CisgICAgfSk7
CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNTdXBwb3J0ZWRWaWRlb0NvZGVj
KFN0cmluZ1ZpZXcgbmFtZSkKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y29udGVudEtl
eVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYg
a2V5SUQsIHVpbnQ2NF90IHRyYWNrSUQpCiB7Ci0gICAgcmV0dXJuIG5hbWUgPT0gIlZfVlA4IiB8
fCBuYW1lID09ICJWX1ZQOSI7CisgICAgaWYgKG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0
SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrKQorICAgICAgICBtX2RpZFByb3Zp
ZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjayhX
VEZNb3ZlKGtleUlEKSwgdHJhY2tJRCk7CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6aXNTdXBwb3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK3ZvaWQgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+IHBvc2l0aW9uKQogewotICAgIHJldHVybiBuYW1lID09ICJBX1ZPUkJJUyIgfHwgbmFt
ZSA9PSAiQV9PUFVTIjsKKyAgICBpZiAoIW1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVChtX2F1ZGlvSW5mbyk7CisgICAgcmV0dXJuU2FtcGxlcyht
X2F1ZGlvSW5mby5nZXQoKSwgbV9xdWV1ZWRBdWRpb1NhbXBsZXMudGFrZVNhbXBsZXMoKSwgbV9h
dWRpb0Zvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBwb3NpdGlvbik7CisgICAgbV9xdWV1ZWRBdWRp
b0R1cmF0aW9uID0geyB9OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVu
ZERhdGEoU2VnbWVudCYmIHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlciwgQXBwZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCit7CisgICAgSU5GT19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIsIGFwcGVuZEZsYWdzID09IEFwcGVu
ZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVpdHkiIDogIiIsICIpLCBzaXplKCIs
IHNlZ21lbnQuc2l6ZSgpLCAiKSIpOworCisgICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZs
YWdzOjpEaXNjb250aW51aXR5KQorICAgICAgICBtX3BhcnNlci5yZXNldCgpOworCisgICAgaWYg
KGludCBjb2RlID0gbV9wYXJzZXIucGFyc2UoV1RGTW92ZShzZWdtZW50KSkgPCAwKSB7CisgICAg
ICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwg
Y29kZSwgIikiKTsKKyAgICAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNvZGVdIHsKKyAgICAgICAgICAgIGlmICht
X2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKQorICAgICAgICAgICAgICAg
IG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soY29kZSk7CisgICAgICAg
IH0pOworICAgIH0KKyAgICAvLyBBdWRpbyB0cmFja3MgYXJlIGdyb3VwZWQgaW50byBtZXRhLXNh
bXBsZXMgb2YgYSBkdXJhdGlvbiBubyBtb3JlIHRoYW4gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24u
CisgICAgLy8gQnV0IGF0IHRoZSBlbmQgb2YgYSBmaWxlLCBubyBtb3JlIGF1ZGlvIGRhdGEgbWF5
IGJlIGluY29taW5nLCBzbyBmbHVzaCBhbmQgZW1pdCBhbnkgcGVuZGluZworICAgIC8vIGF1ZGlv
IGJ1ZmZlcnMuCisgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7CisKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVu
ZGluZ01lZGlhRGF0YSgpCit7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0
U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3QpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91
bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50NjRfdCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjppbnZhbGlkYXRlKCkKK3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSKTsKKyAgICBtX3BhcnNlci5pbnZhbGlkYXRlKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKQoreworICAgIG1fcGFyc2VyLnNldExvZ2dlcihsb2dnZXIsIGxvZ0lkZW50
aWZpZXIpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRp
b1NhbXBsZUR1cmF0aW9uKGZsb2F0IGR1cmF0aW9uKQoreworICAgIG1fbWluaW11bUF1ZGlvU2Ft
cGxlRHVyYXRpb24gPSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdChkdXJhdGlvbik7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1Nv
dXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAppbmRleCBlODc2YWI0MTRhNGFiYjMzZDUx
OGMzN2I0MWZlNWExNDc3NmFiNDk2Li44MTA3YjcwNmUzNTEwN2QyNDQ0ZTcxMWM4ZmQzNTcwMGM3
NDNlZTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCkBAIC0yNywxOSArMjcsMTkg
QEAKIAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8v
Q29yZUF1ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CiAjaW5jbHVk
ZSA8cGFsL3NwaS9jZi9Db3JlTWVkaWFTUEkuaD4KICNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1
ZGUgPHdlYm0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJtL3N0YXR1cy5oPgogI2luY2x1ZGUg
PHdlYm0vdnA5X2hlYWRlcl9wYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogdHlw
ZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNj
cmlwdGlvblJlZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUNNQmxvY2tCdWZmZXIgKkNNQmxvY2tC
dWZmZXJSZWY7CiAKIG5hbWVzcGFjZSB3ZWJtIHsKIGNsYXNzIFdlYm1QYXJzZXI7CkBAIC00Nyw0
MiArNDcsMzYgQEAgY2xhc3MgV2VibVBhcnNlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwg
cHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CitjbGFzcyBXZWJNUGFyc2VyIDogcHJpdmF0ZSB3ZWJt
OjpDYWxsYmFjayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
Y2xhc3MgU2VnbWVudFJlYWRlcjsKLQotICAgIHN0YXRpYyBib29sIGlzV2ViTUZvcm1hdFJlYWRl
ckF2YWlsYWJsZSgpOwotICAgIHN0YXRpYyBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUg
aXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYpOwotICAgIHN0YXRpYyBT
cGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlNRVR5cGVzKCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBjcmVhdGUoY29u
c3QgQ29udGVudFR5cGUmKTsKKyAgICBjbGFzcyBDYWxsYmFjayB7CisgICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
ZFRyaW1taW5nRGF0YSh1aW50NjRfdCwgY29uc3QgTWVkaWFUaW1lJikgeyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJ
bml0aWFsaXphdGlvblNlZ21lbnQmJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2Vk
TWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KSA9IDA7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBjYW5EZWNyeXB0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAg
dmlydHVhbCB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgeyB9CisgICAgICAgIHZpcnR1YWwgfkNh
bGxiYWNrKCkgPSBkZWZhdWx0OworICAgIH07CiAKLSAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
KCk7Ci0gICAgflNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKKyAgICBXZWJNUGFyc2VyKENhbGxi
YWNrJik7CisgICAgfldlYk1QYXJzZXIoKTsKIAotICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxl
KCk7CisgICAgY2xhc3MgU2VnbWVudFJlYWRlcjsKIAorICAgIGludCBwYXJzZShTb3VyY2VCdWZm
ZXJQYXJzZXI6OlNlZ21lbnQmJik7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGNvbnN0IHdlYm06OlN0YXR1cyYg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFR5cGU6OldlYk07IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVu
ZERhdGEoU2VnbWVudCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0sIEFw
cGVuZEZsYWdzID0gQXBwZW5kRmxhZ3M6Ok5vbmUpIGZpbmFsOwotICAgIHZvaWQgZmx1c2hQZW5k
aW5nTWVkaWFEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRh
Rm9yVHJhY2tJRChib29sLCB1aW50NjRfdCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRQcm92aWRl
TWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCByZXNldFBhcnNl
clN0YXRlKCkgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CisgICAgdm9pZCBw
cm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KTsKIAotICAgIHZv
aWQgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9T
YW1wbGVEdXJhdGlvbihmbG9hdCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRM
b2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7Ci0KLSAg
ICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgdWlu
dDY0X3QsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBieXRlUmFuZ2VPZmZzZXQpOwotICAgIHVzaW5n
IERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHRy
YWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgZGlzY2FyZFBhZGRpbmcpPjsKLSAgICB2b2lkIHNldERp
ZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2soRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayYm
IGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExv
Z2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIGNvbnN0IExvZ2dlciogbG9nZ2Vy
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CiAKICAgICBl
bnVtIGNsYXNzIEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtMTIwLDE4ICsxMTQsMTIgQEAgcHVibGlj
OgogICAgIGNsYXNzIFRyYWNrRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2Rl
Y1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KKyAgICAgICAgc3RhdGlj
IGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkm
IHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4K
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihj
b2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlVua25vd24sIHBhcnNlcik7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
VHJhY2tJbmZvOjpUcmFja1R5cGU6OlVua25vd24sIHBhcnNlcik7CiAgICAgICAgIH0KIAotICAg
ICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgVW5rbm93biwKLSAgICAgICAgICAg
IEF1ZGlvLAotICAgICAgICAgICAgVmlkZW8sCi0gICAgICAgIH07Ci0KLSAgICAgICAgVHJhY2tE
YXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50
cnksIFR5cGUgdHJhY2tUeXBlLCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpCisgICAg
ICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5
JiB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUsIFdlYk1QYXJzZXIm
IHBhcnNlcikKICAgICAgICAgICAgIDogbV9jb2RlYyB7IGNvZGVjVHlwZSB9CiAgICAgICAgICAg
ICAsIG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5IHsgdHJhY2tFbnRyeSB9IH0KICAgICAgICAg
ICAgICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUgfQpAQCAtMTQyLDExMyArMTMwLDExMiBAQCBw
dWJsaWM6CiAKICAgICAgICAgQ29kZWNUeXBlIGNvZGVjKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
YzsgfQogICAgICAgICB3ZWJtOjpUcmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7
IH0KLSAgICAgICAgVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsg
fQorICAgICAgICBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVy
biBtX3RyYWNrVHlwZTsgfQogCi0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBmb3JtYXREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb247IH0K
LSAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4mJiBkZXNjcmlwdGlvbikgeyBtX2Zvcm1hdERlc2NyaXB0aW9uID0gV1RGTW92
ZShkZXNjcmlwdGlvbik7IH0KKyAgICAgICAgUmVmUHRyPFRyYWNrSW5mbz4gZm9ybWF0RGVzY3Jp
cHRpb24oKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9uLmNvcHlSZWYoKTsgfQor
ICAgICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJlZjxUcmFja0luZm8+JiYgZGVzY3Jp
cHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZN
b3ZlKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIG1fZm9ybWF0RGVzY3JpcHRpb24tPnRyYWNr
SUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOworICAgICAgICB9CiAKLSAgICAgICAgU291
cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXI7IH0K
KyAgICAgICAgV2ViTVBhcnNlciYgcGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXI7IH0K
IAotICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJl
YWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGlt
ZSYsIGludCkKKyAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25z
dCBNZWRpYVRpbWUmLCBpbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtJ
bnZhbGlkRWxlbWVudElkKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNl
dENvbXBsZXRlZCgpCisgICAgICAgIHZpcnR1YWwgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0
YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbnVs
bHB0cjsKKyAgICAgICAgICAgIG1fY29tcGxldGVNZWRpYVNhbXBsZXMgPSB7IH07CiAgICAgICAg
IH0KKwogICAgICAgICB2b2lkIHJlc2V0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzZXRD
b21wbGV0ZWQoKTsKKyAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAg
ICAgICAgICAgIG1fY29tcGxldGVQYWNrZXRTaXplID0gc3RkOjpudWxsb3B0OwogICAgICAgICAg
ICAgbV9wYXJ0aWFsQnl0ZXNSZWFkID0gMDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVm
ZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyLnJlc2V0KCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRyYWluUGVuZGluZ1NhbXBsZXMoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fY29tcGxldGVNZWRpYVNhbXBsZXMuc2l6ZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fcGFyc2VyLnByb3ZpZGVNZWRpYURh
dGEoV1RGTW92ZShtX2NvbXBsZXRlTWVkaWFTYW1wbGVzKSwgbV9sYXN0UG9zaXRpb24pOworICAg
ICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogICAgICAgICB9CiAKICAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjb250aWd1b3Vz
Q29tcGxldGVCbG9ja0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsK
KyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZm
ZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CiAgICAgICAgIHdlYm06OlN0
YXR1cyByZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRh
dGEmLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9j
a0J1ZmZlclJlZj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOwotICAgICAgICBzdGQ6Om9wdGlvbmFs
PHNpemVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgICAgIC8vIEluaXRpYWwgYWxsb2Nh
dGlvbiBzaXplIG9mIGVtcHR5IENNQmxvY2tCdWZmZXIuCi0gICAgICAgIHNpemVfdCBtTWF4Qmxv
Y2tCdWZmZXJDYXBhY2l0eSB7IDAgfTsKKyAgICAgICAgUmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+IG1fY29tcGxldGVCbG9ja0J1ZmZlcjsKKyAgICAgICAgTWVkaWFTYW1wbGVzQmxvY2sg
bV9jb21wbGV0ZU1lZGlhU2FtcGxlczsKKyAgICAgICAgdWludDY0X3QgbV9sYXN0UG9zaXRpb24g
eyAwIH07CiAKICAgICBwcml2YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKICAgICAg
ICAgd2VibTo6VHJhY2tFbnRyeSBtX3RyYWNrOwotICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOwot
ICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlw
dGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY3VycmVudEJsb2Nr
QnVmZmVyOwotICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsKKyAgICAg
ICAgY29uc3QgVHJhY2tJbmZvOjpUcmFja1R5cGUgbV90cmFja1R5cGU7CisgICAgICAgIFJlZlB0
cjxUcmFja0luZm8+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIFNoYXJlZEJ1ZmZlckJ1
aWxkZXIgbV9jdXJyZW50QmxvY2tCdWZmZXI7CisgICAgICAgIFdlYk1QYXJzZXImIG1fcGFyc2Vy
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7CiAg
ICAgICAgIC8vIFNpemUgb2YgdGhlIGN1cnJlbnRseSBpbmNvbXBsZXRlIHBhcnNlZCBwYWNrZXQu
CiAgICAgICAgIHNpemVfdCBtX3BhcnRpYWxCeXRlc1JlYWQgeyAwIH07CiAgICAgfTsKIAogICAg
IGNsYXNzIFZpZGVvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2Vi
bTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2Vy
KSAtPiBVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0
ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4KICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+KGNv
ZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyKTsKICAgICAgICAgfQogCi0gICAgICAgIFZpZGVv
VHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRy
YWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikKLSAgICAgICAgICAgIDog
VHJhY2tEYXRhKGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6VmlkZW8sIHBhcnNlcikKKyAg
ICAgICAgVmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJh
Y2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKQorICAgICAgICAgICAgOiBU
cmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZTo6Vmlk
ZW8sIHBhcnNlcikKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgd2VibTo6U3RhdHVz
IGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0
YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLQogICAgIHByaXZhdGU6
Ci0gICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGltZSYsIGludCwgY29u
c3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYpOwogICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05h
bWUoKSBjb25zdCB7IHJldHVybiAiVmlkZW9UcmFja0RhdGEiOyB9CisgICAgICAgIHdlYm06OlN0
YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0
YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkgZmluYWw7CisgICAgICAg
IHZvaWQgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOwogCiAjaWYgRU5BQkxFKFZQ
OSkKICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFyc2VyOwor
ICAgICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFtZXM7CiAjZW5kaWYKICAgICB9OwogCiAgICAg
Y2xhc3MgQXVkaW9UcmFja0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIs
IGZsb2F0IG1pbmltdW1TYW1wbGVEdXJhdGlvbikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRh
PgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKSAtPiBVbmlx
dWVSZWY8QXVkaW9UcmFja0RhdGE+CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlciwg
bWluaW11bVNhbXBsZUR1cmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVm
PEF1ZGlvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlcik7CiAgICAgICAg
IH0KIAotICAgICAgICBBdWRpb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3
ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJz
ZXIsIGZsb2F0IG1pbmltdW1TYW1wbGVEdXJhdGlvbikKLSAgICAgICAgICAgIDogVHJhY2tEYXRh
IHsgY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpBdWRpbywgcGFyc2VyIH0KLSAgICAgICAg
ICAgICwgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyBtaW5pbXVtU2FtcGxlRHVyYXRpb24gfQor
ICAgICAgICBBdWRpb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpU
cmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpCisgICAgICAgICAgICA6
IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6
OkF1ZGlvLCBwYXJzZXIgfQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB3ZWJtOjpT
dGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotICAgICAgICB2
b2lkIHJlc2V0Q29tcGxldGVkKCkgZmluYWw7Ci0gICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVm
ZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQgPSBzdGQ6Om51
bGxvcHQpOwotCiAgICAgcHJpdmF0ZToKKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90
KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9pZCByZXNldENvbXBs
ZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KIAotICAgICAgICBDTVRpbWUg
bV9zYW1wbGVQcmVzZW50YXRpb25UaW1lOwotICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlv
bjsKLSAgICAgICAgc2l6ZV90IG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07CisgICAg
ICAgIE1lZGlhVGltZSBtX3BhY2tldER1cmF0aW9uOwogICAgICAgICB1aW50OF90IG1fZnJhbWVz
UGVyUGFja2V0IHsgMCB9OwogICAgICAgICBTZWNvbmRzIG1fZnJhbWVEdXJhdGlvbiB7IDBfcyB9
OwotICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tldFNpemVzOwotICAgICAgICBWZWN0b3I8
Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWluZ3M7CiAgICAgICAgIHNpemVfdCBtTnVt
RnJhbWVzSW5Db21wbGV0ZUJsb2NrIHsgMCB9OwotICAgICAgICAvLyBGSVhNRTogMC41IC0gMS4w
IHNlY29uZHMgaXMgYSBiZXR0ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBidWZmZXIsIGJ1dCB1c2Ug
MiBzZWNvbmRzIHNvIGF0IGxlYXN0IHRoZSBmaXJzdAotICAgICAgICAvLyBzYW1wbGUgYnVmZmVy
IHdpbGwgcGxheSB1bnRpbCB3ZSBmaXggTWVkaWFTYW1wbGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1
ZmZlciB0byBkZWFsIHdpdGggYGVuZEN1cnNvcmAuCi0gICAgICAgIGZsb2F0IG1fbWluaW11bVNh
bXBsZUR1cmF0aW9uIHsgMiB9OwogICAgIH07CiAKLSAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9Ci0gICAgY29uc3Qgdm9pZCogbG9n
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQotCiBwcml2YXRl
OgotCiAgICAgVHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7Ci0K
ICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZFZpZGVvQ29kZWMoU3RyaW5nVmlldyk7CiAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcpOwogCkBAIC0yNjgs
NyArMjU1LDcgQEAgcHJpdmF0ZToKICAgICB3ZWJtOjpTdGF0dXMgT25CbG9ja0dyb3VwRW5kKGNv
bnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdlYm06OkJsb2NrR3JvdXAmKTsKICAg
ICB3ZWJtOjpTdGF0dXMgT25GcmFtZShjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgd2VibTo6
UmVhZGVyKiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKSBmaW5hbDsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbml0aWFsaXphdGlvblNlZ21lbnQ+IG1faW5pdGlhbGl6YXRpb25TZWdtZW50Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2Vn
bWVudD4gbV9pbml0aWFsaXphdGlvblNlZ21lbnQ7CiAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgUmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX2tleUlkczsKICAgICB3ZWJtOjpTdGF0dXMgbV9z
dGF0dXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHdlYm06OldlYm1QYXJzZXI+IG1fcGFyc2VyOwpA
QCAtMjg1LDEyICsyNzIsNjggQEAgcHJpdmF0ZToKICAgICB1c2luZyBCbG9ja1ZhcmlhbnQgPSBz
dGQ6OnZhcmlhbnQ8d2VibTo6QmxvY2ssIHdlYm06OlNpbXBsZUJsb2NrPjsKICAgICBzdGQ6Om9w
dGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7CiAgICAgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gbV9yZXdpbmRUb1Bvc2l0aW9uOwotICAgIGZsb2F0IG1fbWluaW11bUF1ZGlvU2Ft
cGxlRHVyYXRpb24geyAyIH07CiAKICAgICBSZWZQdHI8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsK
ICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07CiAgICAgdWludDY0
X3QgbV9uZXh0Q2hpbGRJZGVudGlmaWVyIHsgMCB9OworICAgIENhbGxiYWNrJiBtX2NhbGxiYWNr
OworfTsKKworY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZm
ZXJQYXJzZXIsIFdlYk1QYXJzZXI6OkNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpc1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFi
bGUoKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlzQ29udGVu
dFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgU3Bhbjxjb25z
dCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1JTUVUeXBlcygpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0IENvbnRl
bnRUeXBlJik7CisKKyAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CisgICAgflNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0oKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJs
ZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsgfQorICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiA9IFtdIHsgfSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6Tm9uZSkg
ZmluYWw7CisgICAgdm9pZCBmbHVzaFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKKyAgICB2b2lk
IHNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KSBmaW5h
bDsKKyAgICBib29sIHNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KSBm
aW5hbDsKKyAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKSBmaW5hbCB7IG1fcGFyc2VyLnJlc2V0
U3RhdGUoKTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZpbmFsOworCisgICAgdXNpbmcgRGlk
UGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQodWludDY0X3QgdHJhY2tJ
RCwgY29uc3QgTWVkaWFUaW1lJiBkaXNjYXJkUGFkZGluZyk+OworICAgIHZvaWQgc2V0RGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjayhEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrJiYgY2Fs
bGJhY2spCisgICAgeworICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvU2Ft
cGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiA9IHN0ZDo6bnVsbG9wdCk7CisgICAgdm9pZCBz
ZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCk7CisgICAgCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmll
cikgZmluYWw7CisgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBt
X2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICAvLyBXZWJNUGFyc2Vy
OjpDYWxsYmFjaworICAgIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZl
clBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpIGZpbmFsOworICAgIHZvaWQgcGFyc2Vk
TWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICBib29s
IGNhbkRlY3J5cHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhIW1fZGlkUHJvdmlkZUNvbnRlbnRL
ZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrOyB9CisgICAgdm9p
ZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNoYXJl
ZEJ1ZmZlcj4mJiwgdWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRh
KHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKyAgICAKKyAgICB2b2lkIHJldHVy
blNhbXBsZXMoY29uc3QgVHJhY2tJbmZvKiwgTWVkaWFTYW1wbGVzQmxvY2s6OlNhbXBsZXNWZWN0
b3ImJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gPSBz
dGQ6Om51bGxvcHQpOworCiAgICAgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2s7CisgICAgV2ViTVBhcnNlciBtX3BhcnNlcjsKKyAgICBS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9u
OworICAgIFJlZlB0cjxjb25zdCBUcmFja0luZm8+IG1fYXVkaW9JbmZvOworICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAg
UmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV92aWRlb0luZm87CisgICAgTWVkaWFUaW1lIG1fbWlu
aW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyA5NjAwMCwgNDgwMDAgfTsKKyAgICBNZWRpYVNhbXBs
ZXNCbG9jayBtX3F1ZXVlZEF1ZGlvU2FtcGxlczsKKyAgICBNZWRpYVRpbWUgbV9xdWV1ZWRBdWRp
b0R1cmF0aW9uOworICAgIFJlZlB0cjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0
IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKIH07CiAKIH0KQEAgLTI5OSwxMiAr
MzQyLDEyIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTSkKICAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyJiBwYXJzZXIpIHsgcmV0dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29y
ZTo6U291cmNlQnVmZmVyUGFyc2VyOjpUeXBlOjpXZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGEpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tE
YXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YSkKKyAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhJiB0
cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpUcmFj
a0luZm86OlRyYWNrVHlwZTo6VmlkZW87IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
IAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0
dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkg
eyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJh
Y2tUeXBlOjpBdWRpbzsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCiAjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NPVVJDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCmluZGV4IDk0MTBhN2M0
Nzk2MzQ3MDRlYjU5Yzk5OTYwMzQ4NDRiNjlhODg3NmQuLmQwMDQxYmY4OWIzMGMyY2M2MTg3OTA4
ZjRiZTc2YTNhYmZmNDI2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaApAQCAtMzAsOCArMzAsNiBA
QAogI2luY2x1ZGUgIlZQOVV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHdlYm0vZG9tX3R5cGVzLmg+
CiAKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9y
bWF0RGVzY3JpcHRpb25SZWY7Ci0KIG5hbWVzcGFjZSB2cDlfcGFyc2VyIHsKIGNsYXNzIFZwOUhl
YWRlclBhcnNlcjsKIH0KQEAgLTQwLDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZvOwogc3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsK
K3N0cnVjdCBWaWRlb0luZm87CiAKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRW
UDlEZWNvZGVyKCk7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2Rl
cigpOwpAQCAtNTAsNyArNDksNyBAQCBib29sIGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpOwogYm9v
bCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25m
aWd1cmF0aW9uUmVjb3JkJik7CiBzdGQ6Om9wdGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4g
dmFsaWRhdGVWUFBhcmFtZXRlcnMoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmLCBj
b25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKTsKIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2
cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNv
bG91cj4mKTsKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJz
ZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qgd2VibTo6RWxlbWVu
dDx3ZWJtOjpDb2xvdXI+Jik7CiAKIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiAgICAgYm9vbCBr
ZXlmcmFtZSB7IGZhbHNlIH07CkBAIC02NSw4ICs2NCw4IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRl
ciB7CiAgICAgYm9vbCBuZWVkc0NsYW1waW5nIHsgZmFsc2UgfTsKIH07CiAKLXN0ZDo6b3B0aW9u
YWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJhbWVEYXRh
LCBzaXplX3QgZnJhbWVTaXplKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXIm
LCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKK3N0ZDo6b3B0aW9uYWw8VlA4
RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRh
LCBzaXplX3QgZnJhbWVTaXplKTsKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21W
UDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06
OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9FWFBPUlQgVlA5VGVzdGluZ092ZXJyaWRlcyB7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCmluZGV4IDVjMGRmYWZkYjJlNjdmMDQ4MDUw
NWZlYWM2NmE0ZWQ1NDRhMjllMzMuLmNmOGM5YjIxMjhjMDE0OGQ1YTkwZDlkNTE1NmRmNjlmNGEw
ZmJkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCkBAIC0zMSwxMSArMzEsMTIgQEAKICNpbXBv
cnQgIkZvdXJDQy5oIgogI2ltcG9ydCAiTGliV2ViUlRDUHJvdmlkZXIuaCIKICNpbXBvcnQgIk1l
ZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKICNpbXBvcnQg
IlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJTY3JlZW5Qcm9wZXJ0aWVzLmgiCisjaW1wb3J0
ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN5c3RlbUJhdHRlcnkuaCIKICNpbXBvcnQgIlZp
ZGVvQ29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRp
b24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW1wb3J0IDx3ZWJt
L3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJD
b252ZXJzaW9uLmg+CkBAIC0zNTAsMjUgKzM1MSwzNSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0
VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJpZXMmIGNvZWZmaWNpZW50cykKICAgICB9CiB9
CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3Qg
cHJpbWFyaWVzKQorc3RhdGljIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyBjb252ZXJ0VG9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXModWludDhfdCBwcmltYXJpZXMpCiB7CiAgICAgc3dp
dGNoIChwcmltYXJpZXMpIHsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNf
SVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJV
X1RlY2hfMzIxM19FOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmll
c19FQlVfMzIxMzsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6
QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNDcwXzZf
TToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ0NzBtOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDQ3MGJnOwogICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4g
a0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOworICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25Db2xvclByaW1hcmllczo6RmlsbToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9D
b2xvclByaW1hcmllczo6RmlsbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzE7CiAgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6Ci0gICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfUDNfRDY1OwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5h
bmNlOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFy
aWVzX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJp
ZXM6OlNtcHRlRWc0MzI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
RUJVX1RlY2hfMzIxM19FOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpKZWRlY1AyMlBob3NwaG9yczsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJp
bWFyaWVzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGNoYXJhY3RlcmlzdGljcykKQEAg
LTQxMSwyOSArNDIyLDQ1IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBjCiAgICAgfQogfQogCi1z
dGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHVpbnQ4X3QgY2hh
cmFjdGVyaXN0aWNzKQorc3RhdGljIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3ModWludDhfdCBj
aGFyYWN0ZXJpc3RpY3MpCiB7CiAgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKICAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3
MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRf
NDcwXzZfTToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6R2FtbWEyMmN1cnZlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTI4Y3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNjAxXzc6CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMTcwbTsKICAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6Ci0g
ICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8x
OTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNN
UFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJh
bnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pYzoKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9nOworICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNf
U3FydDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TG9nU3FydDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpJRUNfNjE5NjZfMl80OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2NjI0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzEzNjFfMDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dDsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5
NjZfMl8xOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpJZWM2MTk2NjIxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMGJpdDsKICAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEyYml0OgotICAgICAgICByZXR1
cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQy
MDIwXzEyYml0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0OwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOgotICAgICAgICByZXR1cm4gUEFM
OjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRl
U3Q0MjgxOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJUXzIxMDBfSExHOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfMjEwMF9ITEc7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMToKLSAgICAgICAgcmV0dXJuIFBB
TDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVy
RnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9MaW5lYXI7CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGc7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ6Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6VW5zcGVjaWZpZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhD
b2VmZmljaWVudHMmIGNvZWZmaWNpZW50cykKQEAgLTQ2MiwyMSArNDg5LDMxIEBAIHN0YXRpYyB1
aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVu
dHMmIGNvZWZmaWNpZW50CiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRv
Q01ZQ2JDUk1hdHJpeCh1aW50OF90IGNvZWZmaWNpZW50cykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVv
TWF0cml4Q29lZmZpY2llbnRzIGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHModWludDhfdCBjb2VmZmljaWVudHMpCiB7CiAgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25j
b25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0
aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6SWRlbnRpdHk6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0
cml4Q29lZmZpY2llbnRzOjpSZ2I7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50czo6QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmlj
aWVudHM6OkZDQzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHM6OkZjYzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRf
NDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpCdDQ3MGJnOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcw
OV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlf
MjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRl
MTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVf
U1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8y
NDBNXzE5OTU7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
OjpTbXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6
OllDZ0NvOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
WUNnQ287CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIw
MjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50czo6QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5h
bmNlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQy
MDIwQ29uc3RhbnRMdW1pbmFuY2U7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlU
b0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCkBAIC00OTEsNyArNTI4
LDcgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBs
aW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCiAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNo
cm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOwogfQogCi1zdGF0aWMg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9u
RnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkJiByZWNvcmQsIGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQorc3RhdGljIFJl
ZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRo
LCBpbnQzMl90IGhlaWdodCkKIHsKICAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmls
ZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0zMSIKICAgICAvLyA8aHR0cHM6Ly93d3cu
d2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgpAQCAtNTIwLDEyICs1NTcsMTQgQEAgc3RhdGljIFJl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZy
b21WUENvZGVjQ29uZmkKICAgICAvLyBGSVhNRTogQ29udmVydCBleGlzdGluZyBzdHJ1Y3QgdG8g
YW4gSVNPQm94IGFuZCByZXBsYWNlIHRoZSB3cml0aW5nIGNvZGUgYmVsb3cKICAgICAvLyB3aXRo
IGEgc3ViY2xhc3Mgb2YgSVNPRnVsbEJveC4KIAorICAgIGF1dG8gdmlkZW9JbmZvID0gVmlkZW9J
bmZvOjpjcmVhdGUoKTsKKyAgICB2aWRlb0luZm8tPnNpemUgPSB2aWRlb0luZm8tPmRpc3BsYXlT
aXplID0geyBmbG9hdCh3aWR0aCksIGZsb2F0KGhlaWdodCkgfTsKKwogICAgIGNvbnN0ZXhwciBz
aXplX3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUgPSAxMjsKIAogICAgIHVpbnQz
Ml90IHZlcnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7CiAgICAgdWludDhfdCBiaXREZXB0aENocm9t
YUFuZFJhbmdlID0gKDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQu
Y2hyb21hU3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxh
Zyk7CiAgICAgdWludDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUgPSAwOwotCiAgICAg
YXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBD
b2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUsIDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlv
bkNvbnRlbnRzU2l6ZSk7CiAgICAgdmlldy0+c2V0KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2Up
OwogICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJvZmlsZSwgZmFsc2UpOwpAQCAtNTM1LDQ2ICs1
NzQsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmkKICAgICB2aWV3LT5zZXQoOCwgcmVjb3Jk
LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxzZSk7CiAgICAgdmlldy0+c2V0KDksIHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50
aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7Ci0KLSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3QgVUludDggKil2aWV3LT5kYXRh
KCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOwotCi0gICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25L
ZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKLSAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvblZh
bHVlc1tdID0geyBkYXRhLmdldCgpIH07Ci0gICAgYXV0byBjb25maWd1cmF0aW9uRGljdCA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRp
b25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRp
b25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tl
eXMgeyBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9uX1NhbXBsZURlc2NyaXB0aW9u
RXh0ZW5zaW9uQXRvbXMgfTsKLSAgICBWZWN0b3I8Q0ZUeXBlUmVmPiBleHRlbnNpb25zVmFsdWVz
ID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9OwotCi0gICAgaWYgKHJlY29yZC52aWRlb0Z1
bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSkgewotICAgICAg
ICBleHRlbnNpb25zS2V5cy5hcHBlbmQoUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJv
b2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ01Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpKSB7Ci0gICAgICAg
IGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsK
LSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7Ci0gICAg
fQotCi0gICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2Zl
ckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsKLSAgICAgICAgZXh0
ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7Ci0g
ICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7Ci0gICAg
fQotCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5h
cHBlbmQoY21NYXRyaXgpOwotICAgIH0KLQotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRh
dGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwotCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKLSAgICBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjID0gcmVjb3JkLmNvZGVj
TmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgOiAndnAwOCc7Ci0gICAgaWYg
KG5vRXJyICE9IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb2RlYywgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2Ny
aXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoZm9y
bWF0RGVzY3JpcHRpb24pOworICAgIHZpZGVvSW5mby0+YXRvbURhdGEgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDx1aW50OF90Kj4odmlldy0+ZGF0YSgpKSwgdmlldy0+Ynl0ZUxl
bmd0aCgpKTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UuZnVsbFJhbmdlID0gcmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlOworICAg
IHZpZGVvSW5mby0+Y29sb3JTcGFjZS5wcmltYXJpZXMgPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJpbWFyaWVzKTsKKyAgICB2aWRlb0luZm8tPmNv
bG9yU3BhY2UudHJhbnNmZXIgPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3MocmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKTsKKyAgICB2aWRlb0luZm8t
PmNvbG9yU3BhY2UubWF0cml4ID0gY29udmVydFRvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNp
ZW50cyhyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKTsKKyAgICB2aWRlb0luZm8tPmNvZGVjTmFt
ZSA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDkiID8gJ3ZwMDknIDogJ3ZwMDgnOworICAgIHJl
dHVybiB2aWRlb0luZm87CiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNl
cjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYg
Y29sb3IpCitSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA5SGVhZGVyUGFyc2Vy
KGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3ZWJtOjpF
bGVtZW50PENvbG91cj4mIGNvbG9yKQogewogICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
IHJlY29yZDsKIApAQCAtNjA2LDEwICs2MTUsMTAgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb24K
ICAgICAgICAgICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFy
aWVzKGNvbG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkpOwogICAgIH0KIAotICAgIHJldHVybiBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNv
cmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOworICAgIHJldHVybiBjcmVhdGVW
aWRlb0luZm9Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lk
dGgoKSwgcGFyc2VyLmhlaWdodCgpKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRl
cj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNp
emUpCitzdGQ6Om9wdGlvbmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNv
bnN0IHVpbnQ4X3QqIGZyYW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKIHsKICAgICAvLyBWUDgg
ZnJhbWUgaGVhZGVycyBhcmUgZGVmaW5lZCBpbiBSRkMgNjM4NjogPGh0dHBzOi8vdG9vbHMuaWV0
Zi5vcmcvaHRtbC9yZmM2Mzg2Pi4KIApAQCAtNjcxLDcgKzY4MCw3IEBAIHN0ZDo6b3B0aW9uYWw8
VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIodWludDhfdCogZnJhbWVEYXRhLCBz
aXplX3QgZnJhCiAgICAgcmV0dXJuIGhlYWRlcjsKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcihjb25zdCBW
UDhGcmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9y
KQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRlcihjb25zdCBWUDhG
cmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQog
ewogICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKICAgICByZWNvcmQuY29k
ZWNOYW1lID0gInZwMDgiOwpAQCAtNzAxLDcgKzcxMCw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3Qg
VlA4CiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xvclBy
aW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKICAgICB9CiAKLSAgICByZXR1
cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQo
cmVjb3JkLCBoZWFkZXIud2lkdGgsIGhlYWRlci5oZWlnaHQpOworICAgIHJldHVybiBjcmVhdGVW
aWRlb0luZm9Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBoZWFkZXIud2lk
dGgsIGhlYWRlci5oZWlnaHQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
aAppbmRleCA4NzEwNGQ4YjdiMzU3YzE2MGI2ZGNjYzQxYmZlMWY4OWUwYTZjMjcxLi5hOTgwOThj
NWEzOWZjYjQ1MGIyZmY5Yzc2MTBkOTc0ZTgyNDZkNGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLmgKQEAgLTI3LDE2ICsyNywxNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAK
LSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBj
bGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOwotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
Q01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitzdHJ1Y3QgQXVkaW9JbmZvOworCiBXRUJDT1JFX0VYUE9SVCBib29sIGlz
Vm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCByZWdpc3RlclZv
cmJpc0RlY29kZXJJZk5lZWRlZCgpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7
CitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3JiaXNBdWRpb0luZm8oc2l6ZV90LCBjb25zdCB2
b2lkKik7CiAKIHN0cnVjdCBPcHVzQ29va2llQ29udGVudHMgewogICAgIHVpbnQ4X3QgdmVyc2lv
biB7IDAgfTsKQEAgLTU1LDggKzU2LDEwIEBAIHN0cnVjdCBPcHVzQ29va2llQ29udGVudHMgewog
CiBXRUJDT1JFX0VYUE9SVCBib29sIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2RlcklmTmVlZGVkKCk7CitzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBrT3B1c0hlYWRlclNpemUgPSAxOTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUgPSAyOwogYm9vbCBwYXJzZU9wdXNQcml2YXRlRGF0
YShzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSwgc2l6ZV90
IGZyYW1lRGF0YVNpemUsIGNvbnN0IHZvaWQqIGZyYW1lRGF0YSwgT3B1c0Nvb2tpZUNvbnRlbnRz
Jik7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9y
bWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJik7CitSZWZQdHI8QXVkaW9J
bmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYpOwogCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
Yk1BdWRpb1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KaW5kZXggN2UwYWZiMjkwZGQ4NWE3
N2Y5YmVmZmY0OTQ3YTQ3Yjc1MzVlYjJmNC4uNjYwOWY0YWViNjdhMmRmNjQxZjA3MmU1ODE2MGY5
YWY1ZDM2ZGY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KQEAgLTMwLDEy
ICszMCwxMyBAQAogCiAjaW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlLmgiCiAjaW1wb3J0ICJNZWRpYVV0
aWxpdGllcy5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCisjaW1w
b3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvZGVjLmg+
CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Db21wb25lbnQuaD4KICNpbXBvcnQgPEF1ZGlv
VG9vbGJveC9BdWRpb0Zvcm1hdC5oPgotI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3Jp
cHRpb24uaD4KICNpbXBvcnQgPGRsZmNuLmg+CiAjaW1wb3J0IDx3dGYvRmxpcEJ5dGVzLmg+CiAj
aW1wb3J0IDx3dGYvU2Vjb25kcy5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgYm9vbCByZWdp
c3RlckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBPU1R5cGUgZGVjb2Rl
clR5cGUpCiAjZW5kaWYKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE9TVHlwZSBmb3JtYXRJ
RCwgVmVjdG9yPHVpbnQ4X3Q+JiYgbWFnaWNDb29raWUpCitzdGF0aWMgUmVmUHRyPEF1ZGlvSW5m
bz4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KE9TVHlwZSBmb3JtYXRJRCwgVmVjdG9yPHVpbnQ4
X3Q+JiYgbWFnaWNDb29raWUpCiB7CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGFz
YmQgeyB9OwogICAgIGFzYmQubUZvcm1hdElEID0gZm9ybWF0SUQ7CkBAIC04Nyw4ICs4OCwxNiBA
QCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9y
bWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoTwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24oYXNiZCksIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWNDb29raWUuZGF0YSgp
KTsKKyAgICBhdXRvIGF1ZGlvSW5mbyA9IEF1ZGlvSW5mbzo6Y3JlYXRlKCk7CisgICAgYXVkaW9J
bmZvLT5jb2RlY05hbWUgPSBmb3JtYXRJRDsKKyAgICBhdWRpb0luZm8tPnJhdGUgPSBhc2JkLm1T
YW1wbGVSYXRlOworICAgIGF1ZGlvSW5mby0+Y2hhbm5lbHMgPSBhc2JkLm1DaGFubmVsc1BlckZy
YW1lOworICAgIGF1ZGlvSW5mby0+ZnJhbWVzUGVyUGFja2V0ID0gYXNiZC5tRnJhbWVzUGVyUGFj
a2V0OworICAgIGF1ZGlvSW5mby0+Yml0RGVwdGggPSAxNjsKKyAgICBhdWRpb0luZm8tPmNvb2tp
ZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKG1hZ2ljQ29va2llKSk7CisgICAg
cmV0dXJuIGF1ZGlvSW5mbzsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpIHx8IEVOQUJM
RShPUFVTKQogCiAjaWYgRU5BQkxFKE9QVVMpCkBAIC0yMDAsNyArMjA5LDcgQEAgYm9vbCBwYXJz
ZU9wdXNQcml2YXRlRGF0YShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29uc3Qgdm9pZCogY29k
ZWNQcml2YXRlRGF0YSwKIAogICAgIGF1dG8qIHByaXZhdGVEYXRhUHRyID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDhfdCo+KGNvZGVjUHJpdmF0ZURhdGEpOwogCi0gICAgaWYgKGNvZGVjUHJpdmF0
ZVNpemUgPCAxOSkKKyAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA8IGtPcHVzSGVhZGVyU2l6ZSkK
ICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDEuIE1hZ2ljIFNpZ25hdHVyZToKQEAgLTM2
Miw3ICszNzEsNyBAQCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5lZWRlZCgpCiAjZW5kaWYK
IH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYgY29va2llQ29udGVudHMp
CitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0IE9wdXNDb29raWVD
b250ZW50cyYgY29va2llQ29udGVudHMpCiB7CiAjaWYgRU5BQkxFKE9QVVMpCiAgICAgaWYgKCFp
c09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCkBAIC0zNzIsNyArMzgxLDcgQEAgUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNv
bnN0IE9wdXNDb28KICAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9y
bWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRhKSk7CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlv
SW5mb0ZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0oY29va2llQ29udGVudHMpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtNDY1
LDcgKzQ3NCw3IEBAIGJvb2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVkZWQoKQogI2VuZGlm
CiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHBy
aXZhdGVEYXRhKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHNpemVf
dCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQogewogI2lmIEVOQUJM
RShWT1JCSVMpCiAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKQEAgLTQ3NSw3
ICs0ODQsNyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlz
QXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdgogICAgIGlmICghY29va2llRGF0YS5z
aXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ3ZvcmInLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsK
KyAgICByZXR1cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KCd2b3JiJywgV1RGTW92ZShjb29r
aWVEYXRhKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YVNpemUpOwogICAg
IFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1l
ci5oCmluZGV4IGZmOGMxYThiNDgxZDdmMzNjYzI0N2I2NGRmMWI4ZmFjNzBjYmRkZDIuLjJiN2Rk
NDQ0YzUzZDJkNmJkMDdhOWI4MzhkNjc5YjY0YjM3NDlhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNh
bXBsZUdTdHJlYW1lci5oCkBAIC01Nyw4ICs1Nyw2IEBAIHB1YmxpYzoKICAgICBGbG9hdFNpemUg
cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcHJlc2VudGF0aW9u
U2l6ZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92
ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBN
ZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwg
UmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUp
IG92ZXJyaWRlICB7IHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsgfQogICAgIFJlZjxNZWRp
YVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBvdmVycmlkZTsKICAgICBT
YW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAg
ICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNl
QnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291
cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwYTk0YWNmMWExZTEzNjZmNmE1
NzI1ODhiNzcwNDFlNGMzYzY0NzMyLi4zY2Y3ZWU2NTNlYzgxM2RmYmFlMzNlZjkzYTBjMzNmZTJj
NjM5NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291
cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcApAQCAtNjcs
OCArNjcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYgb2Zm
c2V0KSBvdmVycmlkZSB7IG1fYm94Lm9mZnNldFRpbWVzdGFtcHNCeShvZmZzZXQpOyB9CiAgICAg
dm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZXN0YW1w
LCBjb25zdCBNZWRpYVRpbWUmIGRlY29kZVRpbWVzdGFtcCkgb3ZlcnJpZGUgeyBtX2JveC5zZXRU
aW1lc3RhbXBzKHByZXNlbnRhdGlvblRpbWVzdGFtcCwgZGVjb2RlVGltZXN0YW1wKTsgfQotICAg
IGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAg
IHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZp
ZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSkgb3ZlcnJpZGUgeyByZXR1cm4ge251bGxw
dHIsIG51bGxwdHJ9OyB9CiAgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5n
Q29weSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdW5zaWduZWQgZ2VuZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fYm94LmdlbmVyYXRpb24oKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5
dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMxMzRjZTZhN2EyMTRjZGM5ZGUwNWM0NzUzNzJlMTdjOWEz
ZC4uODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJjNGU3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0
ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zNCw4ICszNCw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIE1lZGlhU2FtcGxlQnl0ZVJhbmdl
OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVT
b3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICA6IE1lZGlhU2FtcGxl
QVZGT2JqQyhudWxscHRyKQotICAgICwgbV9wcmVzZW50YXRpb25UaW1lKHNhbXBsZS5wcmVzZW50
YXRpb25UaW1lKCkpCisgICAgOiBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxlLnByZXNlbnRhdGlv
blRpbWUoKSkKICAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGltZSgpKQogICAgICwg
bV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKICAgICAsIG1fYnl0ZVJhbmdlKCpzYW1wbGUu
Ynl0ZVJhbmdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCmluZGV4IGI2NmYz
YTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLjVkYTI4ODVkNDVkMTc4ODgzNjIy
OTE3ZTVlNGFjYjk3ZjhlY2FlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5o
CkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBNZWRpYVNh
bXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNhbXBsZUFWRk9iakMg
eworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVk
aWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1wbGVCeXRlUmFuZ2U+
IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdpbkJ5dGVTb3VyY2VS
ZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKICAgICB7CkBAIC01NCw2ICs1NCw3IEBA
IHB1YmxpYzoKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBs
ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpQbGF0Zm9ybVNhbXBsZTo6Qnl0
ZVJhbmdlU2FtcGxlVHlwZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYpIGZpbmFsOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUm
LCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKyAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5v
bkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgeyByZXR1cm4gKmNvbnN0X2Nhc3Q8TWVkaWFTYW1wbGVC
eXRlUmFuZ2UqPih0aGlzKTsgfQogCiBwcml2YXRlOgogICAgIE1lZGlhU2FtcGxlQnl0ZVJhbmdl
KE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50NjRfdCB0cmFja0lEKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NzFl
ZWY1NjdlNWMzYmIyNzBkZDlmYmEwZjVkYTMzODE2M2VlZWU0Li5hYmYwYmI5YjQwOWZmMjU5ZGYw
MGQ0YjNjM2RjZWMwZjQ2MDI3ODExIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBB
dmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCkgY29udmVyc2lvbiB0byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlkIHRpbWUu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzMK
KyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTQ5MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGbHktYnkgZml4ZXM6IEFWRm91bmRhdGlvblNvZnRM
aW5rVGVzdCB3YXNuJ3QgYmVpbmcgY29tcGlsZWQKKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW06
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY29jb2EvQ29yZU1lZGlhVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TYW1wbGVNYXAuY3BwOiBVcGRhdGUgZm9sbG93aW5nIGJhc2UgY2xhc3MgZGVmaW5p
dGlvbiBjaGFuZ2UuCisKKzIwMjItMDItMjMgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBjb252ZXJ0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXIgdG8gQ01CbG9ja0J1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjM3MDc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVy
LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMjItMDMtMDQgIFBo
aWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFr
IFNES10gVXBncmFkZSBmcm9tIGxsdm0xMiB0byBsbHZtMTMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggODg5NGZiZDRmZGNlNWU2N2IzZDQzNzcyYWRmOWIwNmIzNTAxOTU0ZC4uM2RlYzBjZWU3
OTNjMDY1MTAwY2EzZTEzZThjZWU2ZjkyY2EzODA0YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTI2Miw2ICsyNjIsOCBAQAogCQk1MTA0Nzc3MzFEMjk4REREMDA5NzQ3RUIgLyogSURCRGVs
ZXRlUmVjb3Zlcnkuc3FsaXRlMy1zaG0gaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNDc3NzAxRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0
ZVJlY292ZXJ5LnNxbGl0ZTMtc2htICovOyB9OwogCQk1MTA0Nzc3NDFEMjk4REREMDA5NzQ3RUIg
LyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRlMy13YWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8q
IElEQkRlbGV0ZVJlY292ZXJ5LnNxbGl0ZTMtd2FsICovOyB9OwogCQk1MTA0Nzc3NzFEMjk4RTcy
MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA0Nzc3NjFEMjk4RTU3MDA5NzQ3RUIg
LyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCAqLzsgfTsKKwkJNTEwQTY2N0IyN0QzMDFBQzAwRDIy
NjI5IC8qIENvcmVNZWRpYVV0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE2NjdBMjdEMkZDN0EwMEQyMjYyOSAvKiBDb3JlTWVkaWFV
dGlsaXRpZXMubW0gKi87IH07CisJCTUxMEE2NjdDMjdEMzAxQzYwMEQyMjYyOSAvKiBBVkZvdW5k
YXRpb25Tb2Z0TGlua1Rlc3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzExREY1MTIyNkE5NUZCMDAzREQyRjcgLyogQVZGb3VuZGF0aW9uU29mdExp
bmtUZXN0Lm1tICovOyB9OwogCQk1MTBBOTFGODI0RDM2MjIxMDBCRkQ4OUMgLyogU29ueUR1YWxT
aG9jazMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTBBOTFGNzI0RDM2MjE5MDBCRkQ4OUMgLyogU29ueUR1YWxTaG9jazMubW0gKi87IH07CiAJCTUx
MEE5MjBBMjRENTA0ODkwMEJGRDg5QyAvKiBMb2dpdGVjaEYzMTAubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBOTIwOTI0RDUwNDgzMDBCRkQ4OUMg
LyogTG9naXRlY2hGMzEwLm1tICovOyB9OwogCQk1MTBBOTIwQzI0RDUyNzU1MDBCRkQ4OUMgLyog
TG9naXRlY2hGNzEwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwQTkyMEIyNEQ1Mjc1MTAwQkZEODlDIC8qIExvZ2l0ZWNoRjcxMC5tbSAqLzsgfTsK
QEAgLTIwNjksNiArMjA3MSw3IEBACiAJCTUxMDQ3NzcxMUQyOThEODUwMDk3NDdFQiAvKiBJREJE
ZWxldGVSZWNvdmVyeS5zcWxpdGUzLXdhbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSAiSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRl
My13YWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA0Nzc3NTFEMjk4RTAzMDA5
NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBJREJEZWxldGVSZWNvdmVyeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTEwNDc3NzYxRDI5OEU1NzAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5Lmh0
bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBJREJEZWxldGVSZWNvdmVyeS5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTBBNjY3QTI3RDJGQzdBMDBEMjI2MjkgLyog
Q29yZU1lZGlhVXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ29yZU1lZGlhVXRp
bGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBOTFGNzI0RDM2MjE5
MDBCRkQ4OUMgLyogU29ueUR1YWxTaG9jazMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTb255RHVhbFNob2NrMy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEwQTkyMDkyNEQ1MDQ4MzAwQkZEODlDIC8qIExvZ2l0ZWNoRjMxMC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2l0ZWNoRjMxMC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQTkyMEIyNEQ1Mjc1MTAwQkZEODlDIC8qIExvZ2l0
ZWNoRjcxMC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExvZ2l0
ZWNoRjcxMC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwNTYsNiArNTA1OSw3
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzExREY1MTIyNkE5NUZCMDAzREQyRjcgLyogQVZG
b3VuZGF0aW9uU29mdExpbmtUZXN0Lm1tICovLAogCQkJCTMxRjg2NUU1MjY3MDFFNzMwMDNCRkM2
RCAvKiBDb3JlQ3J5cHRvU1BJLmggKi8sCisJCQkJNTEwQTY2N0EyN0QyRkM3QTAwRDIyNjI5IC8q
IENvcmVNZWRpYVV0aWxpdGllcy5tbSAqLywKIAkJCQk3NTFCMDVENTFGOEVBQzFBMDAyOEEwOUUg
LyogRGF0YWJhc2VUcmFja2VyVGVzdC5tbSAqLywKIAkJCQk1N0YxQzkxMDI1RERENTE5MDBFOEY2
RUEgLyogUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRDb2NvYS5tbSAqLywKIAkJCQk1NzY5QzUwQTFE
OUIwMDAxMDAwODQ3RkIgLyogU2VyaWFsaXplZENyeXB0b0tleVdyYXAubW0gKi8sCkBAIC01NTI3
LDYgKzU1MzEsNyBAQAogCQkJCUY0RkEyQTRGMjREMUYwNTcwMDYxOEE0NiAvKiBBdHRyaWJ1dGVk
U3Vic3RyaW5nRm9yUHJvcG9zZWRSYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEQzhFNDhE
MUJDNUNCNDUwMDU5NEZFQyAvKiBBdWRpb1Nlc3Npb25DYXRlZ29yeUlPUy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUY0MkQ2MzQ0MjJBMTcyOUYwMEQyRkIzQSAvKiBBdXRvY29ycmVjdGlvblRlc3Rz
SU9TLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTEwQTY2N0MyN0QzMDFDNjAwRDIyNjI5IC8qIEFW
Rm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUI1MUE0
MTFBN0UwMDQ0N0M0QyAvKiBCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QzdGRUIyMDIwN0MwRjJFMDBEMjMyNzggLyogQmFja2dyb3VuZENvbG9yLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzE1Q0JCMzAyM0YxRkYxQTAwMzAwQ0M3IC8qIEJhY2tsaWdodExldmVsTm90aWZp
Y2F0aW9uLm1tIGluIFNvdXJjZXMgKi8sCkBAIC01NTU2LDYgKzU1NjEsNyBAQAogCQkJCUNEMEJE
MEE2MUY3OTkyNEQwMDFBQjJDRiAvKiBDb250ZXh0TWVudUltZ1dpdGhWaWRlby5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUExQzE0MkMyMjRBQTdCMkUwMDQ0NDIwNyAvKiBDb250ZXh0TWVudU1vdXNl
RXZlbnRzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQwMzRGQTEyNzVENTQwMjAwM0E4MUY4IC8q
IENvb2tpZUNvbnNlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTBBNjY3QjI3RDMwMUFDMDBE
MjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdF
QUMxQTQxMUEzNDAwNDQ3QzRDIC8qIENvdW50ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdB
RUFENDdGMUUyMDExNkMwMDQxNkVGRSAvKiBDcm9zc1BhcnRpdGlvbkZpbGVTY2hlbWVBY2Nlc3Mu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEQjFBNDExQTkyMDA0NDdDNEMgLyogQ1NTUGFy
c2VyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU2FtcGxlTWFwLmNwcAppbmRleCA1YTY1MzU4MzAxNWQyODhkZWY0N2JjYjQ3OTJjMjRj
OGQyZjlhN2VmLi43MTIwNThhMzY4ODg3NzZiMTc3OGU0ZGNkOWQ4YTkwYzAyMDZhZWE4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcApAQCAt
NjQsOCArNjQsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNl
bnRhdGlvblRpbWU7CiAgICAgICAgIG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7CiAgICAgfTsK
LSAgICBib29sIGlzRGl2aXNhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2
aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQog
ICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBmaW5h
bCB7CiAgICAgICAgIHJldHVybiBjcmVhdGUobV9wcmVzZW50YXRpb25UaW1lLCBtX2RlY29kZVRp
bWUsIG1fZHVyYXRpb24sIHN0YXRpY19jYXN0PFNhbXBsZUZsYWdzPihtX2ZsYWdzIHwgSXNOb25E
aXNwbGF5aW5nKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvU2hhcmVkQnVmZmVyLmNwcAppbmRleCAzMTU1YzA5ZjI0NzNlYmVhNjkwMGIzOWMwZDli
ZWNhYWNhYTVhMDE1Li5iMDExMjhiMjZiMWNjMGEyMDVjNjU0MWE0ODU2YjdmMDJmNDhiYzc2IDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVy
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVy
LmNwcApAQCAtMjM5LDYgKzIzOSw0MSBAQCBURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRl
c3QsIGdldFNvbWVEYXRhKQogICAgIGNoZWNrQnVmZmVyKGwuZGF0YSgpLCBsLnNpemUoKSwgImwi
KTsKIH0KIAorVEVTVF9GKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXJUZXN0LCBnZXRDb250aWd1b3Vz
RGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gczEgPSB7ICdhJywgJ2InLCAnYycsICdkJyB9
OworICAgIFZlY3Rvcjx1aW50OF90PiBzMiA9IHsgJ2UnLCAnZicsICdnJywgJ2gnIH07CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHMzID0geyAnaScsICdqJywgJ2snLCAnbCcgfTsKKworICAgIFNoYXJl
ZEJ1ZmZlckJ1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZChXVEZNb3ZlKHMxKSk7
CisgICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMikpOworICAgIGJ1aWxkZXIuYXBwZW5kKFdU
Rk1vdmUoczMpKTsKKyAgICBhdXRvIGJ1ZmZlciA9IGJ1aWxkZXIudGFrZSgpOworCisgICAgYXV0
byBhYmNkID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSgwLCA0KTsKKyAgICBhdXRvIGJjZGVm
Z2hpID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSgxLCA4KTsKKyAgICBhdXRvIGdoID0gYnVm
ZmVyLT5nZXRDb250aWd1b3VzRGF0YSg2LCAyKTsKKyAgICBhdXRvIGdoaWogPSBidWZmZXItPmdl
dENvbnRpZ3VvdXNEYXRhKDYsIDQpOworICAgIGF1dG8gaCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91
c0RhdGEoNywgMSk7CisgICAgYXV0byBpamsgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDgs
IDMpOworICAgIGF1dG8ga2wgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDEwLCAyKTsKKyAg
ICBhdXRvIGwgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDExLCAxKTsKKyAgICBjaGVja0J1
ZmZlcihhYmNkLT5kYXRhKCksIGFiY2QtPnNpemUoKSwgImFiY2QiKTsKKyAgICBjaGVja0J1ZmZl
cihiY2RlZmdoaS0+ZGF0YSgpLCBiY2RlZmdoaS0+c2l6ZSgpLCAiYmNkZWZnaGkiKTsKKyAgICBj
aGVja0J1ZmZlcihnaC0+ZGF0YSgpLCBnaC0+c2l6ZSgpLCAiZ2giKTsKKyAgICBjaGVja0J1ZmZl
cihnaGlqLT5kYXRhKCksIGdoaWotPnNpemUoKSwgImdoaWoiKTsKKyAgICBjaGVja0J1ZmZlciho
LT5kYXRhKCksIGgtPnNpemUoKSwgImgiKTsKKyAgICBjaGVja0J1ZmZlcihpamstPmRhdGEoKSwg
aWprLT5zaXplKCksICJpamsiKTsKKyAgICBjaGVja0J1ZmZlcihrbC0+ZGF0YSgpLCBrbC0+c2l6
ZSgpLCAia2wiKTsKKyAgICBjaGVja0J1ZmZlcihsLT5kYXRhKCksIGwtPnNpemUoKSwgImwiKTsK
KyAgICBhdXRvIGZnaGlqa2wgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDUsIDIwKTsKKyAg
ICBFWFBFQ1RfRVEoZmdoaWprbC0+c2l6ZSgpLCBidWZmZXItPnNpemUoKSAtIDUpOworICAgIGNo
ZWNrQnVmZmVyKGZnaGlqa2wtPmRhdGEoKSwgZmdoaWprbC0+c2l6ZSgpLCAiZmdoaWprbCIpOwor
ICAgIGF1dG8gb3V0Qm91bmQgPSBidWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKDMwLCAyMCk7Cisg
ICAgRVhQRUNUX0VRKG91dEJvdW5kLT5zaXplKCksIDB1KTsKK30KKwogVEVTVF9GKEZyYWdtZW50
ZWRTaGFyZWRCdWZmZXJUZXN0LCBpc0VxdWFsVG8pCiB7CiAgICAgYXV0byBtYWtlQnVmZmVyID0g
W10gKFZlY3RvcjxWZWN0b3I8dWludDhfdD4+JiYgY29udGVudHMpIHsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlu
a1Rlc3QubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQVZGb3Vu
ZGF0aW9uU29mdExpbmtUZXN0Lm1tCmluZGV4IGJhZmE3NWY0NmU2MDJkY2NmMTdmNTdmN2MwMjUz
ZmYwYjE5NWIxNGYuLjk4NmUwOGVkOTA0ZTBhYjNmMDdiMTExOGIxZjgzNjhiNDI0MDJlMDggMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9BVkZvdW5k
YXRpb25Tb2Z0TGlua1Rlc3QubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbQpAQCAtMTkzLDExICsxOTMsMTQg
QEAgVEVTVChBVkZvdW5kYXRpb25Tb2Z0TGluaywgQ29uc3RhbnRzKQogI2VuZGlmCiAKICNlbmRp
ZgotICAgIAorCisjaWYgIVBMQVRGT1JNKFdBVENIT1MpCisgICAgRVhQRUNUX1RSVUUoW1BBTDo6
QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlv
biBpc0VxdWFsVG9TdHJpbmc6QCJBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVk
RGlkQ2hhbmdlTm90aWZpY2F0aW9uIl0pOworI2VuZGlmCisKICNpZiBIQVZFKEFWUk9VVEVQSUNL
RVJWSUVXKQotICAgIEVYUEVDVF9UUlVFKFtBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0Rl
dGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uIGlzRXF1YWxUb1N0cmluZzpAIkFWUm91dGVEZXRl
Y3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24iXSk7Ci0gICAg
RVhQRUNUX1RSVUUoW0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmlj
YXRpb24gaXNFcXVhbFRvU3RyaW5nOkAiQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENo
YW5nZU5vdGlmaWNhdGlvbiJdKTsKLSNlbmRpZiAvLyBQTEFURk9STShXQVRDSE9TKQorICAgIEVY
UEVDVF9UUlVFKFtQQUw6OkFWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3Rp
ZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOkAiQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbiJdKTsKKyNlbmRpZiAvLyBIQVZFKEFWUk9VVEVQSUNLRVJWSUVX
KQogCiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
b2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY29jb2EvQ29yZU1lZGlhVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4M2EzODA1NTc1
MmVhMzFjOTFkNGQ0OWNlM2NmMDQ0ZGJhNmRkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQ29yZU1lZGlhVXRpbGl0aWVzLm1tCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKworI2lmIFVT
RShBVkZPVU5EQVRJT04pCisKKyNpbmNsdWRlIDxwYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1QoUEFMLCBN
ZWRpYVRpbWUpCit7CisgICAgRVhQRUNUX0VRKFBBTDo6dG9NZWRpYVRpbWUoUEFMOjp0b0NNVGlt
ZShNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpKSwgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453927</attachid>
            <date>2022-03-05 19:45:25 -0800</date>
            <delta_ts>2022-03-07 02:27:54 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237472-20220306144523.patch</filename>
            <type>text/plain</type>
            <size>143409</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY4Yzk4NzMyNzRiODNm
MTEzZmNkNmFjOWJmMGVhMWEzMWIyNzQwOC4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggOTkxOTdlMjQ1YjBhYzg4MDU1Y2Y0OWI3N2U5YTBkYTU4NDdk
NDZlZC4uNzM4M2ZlZTAxYTMxODc5ZmZiNDYxMWRiOTQ5OTY2MTNhNDc4OWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJk
ICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
IGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJv
YmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcDoKKyAgICAgICAgKiBwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaDogTWV0aG9kIENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgd2Fz
bid0IHNvZnQtbGlua2VkLgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzQ3MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZWM1Y2MyOTA0YWY0N2YzODc3NmZjMTJhYTE3YWYxOWI5
NzM0Zjk2Li4zODVhZmY2NjYyYjBkYmJiMjI5MDBiNzQ5NzA4ZTA0OWYyZDQwNWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2
ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4
MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2UpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuaDogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorICAgICAgICBkaWRuJ3QgbmVlZCB0
byBpbmhlcml0IGZyb20gTWVkaWFTYW1wbGVBVkZPYmpDLiAKKwogMjAyMi0wMy0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTGliV2ViUlRDQ29kZWNzOjpz
ZXRFbmNvZGVSYXRlcyBzaG91bGQgc2VuZCBMaWJXZWJSVENDb2RlY3NQcm94eTo6U2V0RW5jb2Rl
UmF0ZXMgb25seSB3aGVuIHRoZSBlbmNvZGVyIGlzIGxpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5
OWIzNmY1NWYyZGY2ZjhjOTlkNTc2Yi4uZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2Rh
MmIyNjUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5jcHAKQEAgLTE2OSw2ICsxNjksNyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENN
VGltZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENN
VGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRp
bWUgZmlyZVRpbWUsIHVpbnQzMl90IGZsYWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmly
ZVRpbWUsIGZsYWdzKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNF
X1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNv
dXJjZVRvRmlyZUltbWVkaWF0ZWx5LCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2Us
IGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSks
IFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
LCBQQUxfRVhQT1JUKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQo
UEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBp
bnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMs
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxs
b2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2Ny
aXB0aW9uT3V0KSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJ
VEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1h
Z2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0
RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywg
KENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFM
X0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwg
Q29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNp
b25zLCBDR1NpemUsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29s
ZWFuIHVzZVBpeGVsQXNwZWN0UmF0aW8sIEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRl
b0Rlc2MsIHVzZVBpeGVsQXNwZWN0UmF0aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4
IDU3MGE2YTk4NTNjNDQ4MTY4Yjk5MDIyMDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdl
NTkyNWEyNWI2YWNmYmQxNThhNDMyZTdhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKQEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0
Y2hTb3VyY2VUbwogI2RlZmluZSBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmly
ZUltbWVkaWF0ZWx5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRj
aFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
KQogI2RlZmluZSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRp
bWVDb3B5QXNEaWN0aW9uYXJ5CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciwgQ01WaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qg
d2lkdGgsIGludDMyX3QgaGVpZ2h0LCBDRkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3Is
IGNvZGVjVHlwZSwgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25P
dXQpKQorI2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29y
ZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZUZvckltYWdlQnVmZmVyLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJ
bWFnZUJ1ZmZlclJlZiBpbWFnZUJ1ZmZlciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBv
dXREZXNjKSwgKGFsbG9jYXRvciwgaW1hZ2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVk
aWFfQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggOThiMDM1NzkxYTZlYmIwZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTMxMiw2ICszMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvQ01VdGlsaXRpZXMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9h
dFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3Bw
CkBAIC02NDksNiArNjUwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Nv
bG9yQ29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0
MjNmMjdiZmMyNGQ3MTdlYmFjZmEuLmY5ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdi
N2Y4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5p
ZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhYTIyN2Q1OThlNDI5ZDg1NWJiM2RlZWRhOWIxZDQ3Mjgw
ZDYyNDNiLi4xODE5NzQ0OWVlZDY0OTM3OWZmMWY0MjcxNjhkYWI1ZGY4N2Q5ZmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTc5LDYgKzE1NzksOCBAQAogCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NjYwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCAqLzsgfTsKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MTUwQjVERDI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYy
RTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxp
dGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYw
N0UyNjE1NDM1QTAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRC
MkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0
eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVy
LmggKi87IH07CiAJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThC
MUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3Nyw2ICs5Nzc5LDggQEAKIAkJNTE0
Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRD
NzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENNVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTUxRjA3QjI2MTUzNjNGMDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdD
NjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5Mjg5LDYgKzI5MjkzLDggQEAK
IAkJCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICov
LAogCQkJCUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
Y3BwICovLAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uaCAqLywKKwkJCQk1MTUwQjVEQzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
aCAqLywKKwkJCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8s
CiAJCQkJRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlG
NDhEMkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0
QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICsz
MzkwMyw3IEBACiAJCQkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1Q
YXN0ZWJvYXJkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEw
OUQ1MDA3NDU3QUUgLyogQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQy
N0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMw
NTRDQjExMThDOEU0MDBDRTI2MzYgLyogQ29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUVCNURGMEU4MUI5QUIwMEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25J
bmRleENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlD
REY0QjcxNTFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
QjcwNDVCMUY3NDY1QTEwMDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDREMyMjQyODFGNzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RG
NDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBG
QjFBQTUxRTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkM2OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NT
UHJvcGVydHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRp
YVNhbXBsZS5oCmluZGV4IDBhNmYyOGEyMDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMu
LmExMjgyNzNhNTc2ZjgzYmZhZTE3YjU3MjgwODE1MjRmNmRiYTUyMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMjYsNiArMjYsOSBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb3VyQ0MuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CkBAIC00MCw4ICs0MywxMCBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5
OworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVu
dW0gVHlwZSB7CkBAIC03MiwxMyArNzcsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRT
aXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNEaXZpc2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICBlbnVtIERpdmlkZUZs
YWdzIHsgQmVmb3JlUHJlc2VudGF0aW9uVGltZSwgQWZ0ZXJQcmVzZW50YXRpb25UaW1lIH07CiAg
ICAgZW51bSBjbGFzcyBVc2VFbmRUaW1lIDogYm9vbCB7CiAgICAgICAgIERvTm90VXNlLAogICAg
ICAgICBVc2UsCiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpID0gMDsKKyAgICB2
aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+
PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90
VXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB9CiAgICAgdmlydHVhbCBSZWY8TWVkaWFTYW1w
bGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KQEAgLTExOSw3ICsxMjgsMTEgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgSGFzQWxwaGE7IH0KICAgICBib29s
IGhhc1N5bmNJbmZvKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc1N5bmNJbmZvOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJ7UFRTKCIsIHByZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNvZGVUaW1l
KCksICIpLCBkdXJhdGlvbigiLCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClmbGFncygp
LCAiKSwgcHJlc2VudGF0aW9uU2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgIngi
LCBwcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksICIpfSIpOworICAgIH0KKwogICAgIFN0cmlu
ZyB0b0pTT05TdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byBvYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMTM0LDggKzE0NywxMjggQEAgcHVibGljOgogICAgIH0K
IH07CiAKK3N0cnVjdCBBdWRpb0luZm87CitzdHJ1Y3QgVmlkZW9JbmZvOworCitzdHJ1Y3QgVHJh
Y2tJbmZvIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYWNrSW5mbz4geworICAgIGVu
dW0gY2xhc3MgVHJhY2tUeXBlIHsgVW5rbm93biwgQXVkaW8sIFZpZGVvIH07CisKKyAgICBib29s
IGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpBdWRpbzsgfQor
ICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUcmFja1R5cGU6OlZp
ZGVvOyB9CisKKyAgICBUcmFja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSB8fCBjb2RlY05hbWUgIT0gb3Ro
ZXIuY29kZWNOYW1lIHx8IHRyYWNrSUQgIT0gb3RoZXIudHJhY2tJRCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGVxdWFsVG8ob3RoZXIpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVHJhY2tJbmZvJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIEZvdXJDQyBjb2RlY05hbWU7CisgICAgdWludDY0X3Qg
dHJhY2tJRCB7IDAgfTsKKworICAgIHZpcnR1YWwgflRyYWNrSW5mbygpID0gZGVmYXVsdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3Ro
ZXIpIGNvbnN0ID0gMDsKKyAgICBUcmFja0luZm8oVHJhY2tUeXBlIHR5cGUpCisgICAgICAgIDog
bV90eXBlKHR5cGUpIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRyYWNrVHlwZSBtX3R5cGUg
eyBUcmFja1R5cGU6OlVua25vd24gfTsKK307CisKK3N0cnVjdCBWaWRlb0luZm8gOiBwdWJsaWMg
VHJhY2tJbmZvIHsKKyAgICBzdGF0aWMgUmVmPFZpZGVvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb0luZm8oKSk7IH0KKworICAgIEZsb2F0U2l6ZSBzaXplOworICAg
IC8vIFNpemUgaW4gcGl4ZWxzIGF0IHdoaWNoIHRoZSB2aWRlbyBpcyByZW5kZXJlZC4gVGhpcyBp
cyBhZnRlciBpdCBoYXMKKyAgICAvLyBiZWVuIHNjYWxlZCBieSBpdHMgYXNwZWN0IHJhdGlvLgor
ICAgIEZsb2F0U2l6ZSBkaXNwbGF5U2l6ZTsKKyAgICB1aW50OF90IGJpdERlcHRoIHsgOCB9Owor
ICAgIFBsYXRmb3JtVmlkZW9Db2xvclNwYWNlIGNvbG9yU3BhY2U7CisgICAgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24gcm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZSB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXRvbURhdGE7CisKK3ByaXZhdGU6Cisg
ICAgVmlkZW9JbmZvKCkKKyAgICAgICAgOiBUcmFja0luZm8oVHJhY2tUeXBlOjpWaWRlbykgeyB9
CisgICAgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3RoZXJWaWRlb0luZm8pIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICBhdXRvJiBvdGhlciA9IGRvd25jYXN0PGNvbnN0IFZpZGVv
SW5mbz4ob3RoZXJWaWRlb0luZm8pOworICAgICAgICByZXR1cm4gc2l6ZSA9PSBvdGhlci5zaXpl
ICYmIGRpc3BsYXlTaXplID09IG90aGVyLmRpc3BsYXlTaXplICYmIGJpdERlcHRoID09IG90aGVy
LmJpdERlcHRoICYmIGNvbG9yU3BhY2UgPT0gb3RoZXIuY29sb3JTcGFjZSAmJiByb3RhdGlvbiA9
PSBvdGhlci5yb3RhdGlvbiAmJiAoKCFhdG9tRGF0YSAmJiAhb3RoZXIuYXRvbURhdGEpIHx8IChh
dG9tRGF0YSAmJiBvdGhlci5hdG9tRGF0YSAmJiAqYXRvbURhdGEgPT0gKm90aGVyLmF0b21EYXRh
KSk7CisgICAgfQorfTsKKworc3RydWN0IEF1ZGlvSW5mbyA6IHB1YmxpYyBUcmFja0luZm8gewor
ICAgIHN0YXRpYyBSZWY8QXVkaW9JbmZvPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IEF1ZGlvSW5mbygpKTsgfQorCisgICAgdWludDMyX3QgcmF0ZSB7IDAgfTsKKyAgICB1aW50MzJf
dCBjaGFubmVscyB7IDAgfTsKKyAgICB1aW50MzJfdCBmcmFtZXNQZXJQYWNrZXQgeyAwIH07Cisg
ICAgdWludDMyX3QgYml0RGVwdGggeyAxNiB9OworICAgIGludDhfdCBwcm9maWxlIHsgMCB9Owor
ICAgIGludDhfdCBleHRlbmRlZFByb2ZpbGUgeyAwIH07CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBjb29raWVEYXRhOworCitwcml2YXRlOgorICAgIEF1ZGlvSW5mbygpCisgICAgICAgIDog
VHJhY2tJbmZvKFRyYWNrVHlwZTo6QXVkaW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhjb25zdCBU
cmFja0luZm8mIG90aGVyQXVkaW9JbmZvKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0
byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KG90aGVyQXVkaW9JbmZvKTsKKyAg
ICAgICAgcmV0dXJuIHJhdGUgPT0gb3RoZXIucmF0ZSAmJiBjaGFubmVscyA9PSBvdGhlci5jaGFu
bmVscyAmJiBiaXREZXB0aCA9PSBvdGhlci5iaXREZXB0aCAmJiBmcmFtZXNQZXJQYWNrZXQgPT0g
b3RoZXIuZnJhbWVzUGVyUGFja2V0ICYmIHByb2ZpbGUgPT0gb3RoZXIucHJvZmlsZSAmJiBleHRl
bmRlZFByb2ZpbGUgPT0gb3RoZXIuZXh0ZW5kZWRQcm9maWxlICYmICgoIWNvb2tpZURhdGEgJiYg
IW90aGVyLmNvb2tpZURhdGEpIHx8IChjb29raWVEYXRhICYmIG90aGVyLmNvb2tpZURhdGEgJiYg
KmNvb2tpZURhdGEgPT0gKm90aGVyLmNvb2tpZURhdGEpKTsKKyAgICB9Cit9OworCitjbGFzcyBN
ZWRpYVNhbXBsZXNCbG9jayB7CitwdWJsaWM6CisgICAgc3RydWN0IE1lZGlhU2FtcGxlSXRlbSB7
CisgICAgICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lOworICAgICAgICBNZWRpYVRpbWUg
ZGVjb2RlVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGR1cmF0aW9uOworICAgICAgICBzdGQ6OnZh
cmlhbnQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSwgUmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+PiBkYXRhOworICAgICAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgZmxhZ3M7Cisg
ICAgfTsKKworICAgIHZvaWQgc2V0SW5mbyhSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiYmIGluZm8p
IHsgbV9pbmZvID0gV1RGTW92ZShpbmZvKTsgfQorICAgIGNvbnN0IFRyYWNrSW5mbyogaW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1faW5mby5nZXQoKTsgfQorICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0
IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzVmlkZW8oKTsgfQorICAgIGJvb2wgaXNBdWRp
bygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzQXVkaW8oKTsgfQorICAgIFRy
YWNrSW5mbzo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZm8gPyBtX2luZm8t
PnR5cGUoKSA6IFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duOyB9CisgICAgdm9pZCBhcHBl
bmQoTWVkaWFTYW1wbGVJdGVtJiYgaXRlbSkgeyBtX3NhbXBsZXMuYXBwZW5kKFdURk1vdmUoaXRl
bSkpOyB9CisgICAgdm9pZCBhcHBlbmQoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaykgeyBtX3Nh
bXBsZXMuYXBwZW5kVmVjdG9yKHN0ZDo6ZXhjaGFuZ2UoYmxvY2subV9zYW1wbGVzLCB7IH0pKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnNpemUoKTsgfTsK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuaXNFbXB0eSgpOyB9
CisgICAgdm9pZCBjbGVhcigpIHsgbV9zYW1wbGVzLmNsZWFyKCk7IH0KKyAgICB1c2luZyBTYW1w
bGVzVmVjdG9yID0gVmVjdG9yPE1lZGlhU2FtcGxlSXRlbT47CisgICAgU2FtcGxlc1ZlY3RvciB0
YWtlU2FtcGxlcygpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zYW1wbGVzLCB7IH0pOyB9CisK
KyAgICBjb25zdCBNZWRpYVNhbXBsZUl0ZW0mIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZXNbaW5kZXhdOyB9CisgICAgY29uc3QgTWVkaWFTYW1wbGVJdGVt
JiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5maXJzdCgpOyB9CisgICAgY29uc3Qg
TWVkaWFTYW1wbGVJdGVtJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmxhc3QoKTsg
fQorICAgIFNhbXBsZXNWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVzLmJlZ2luKCk7IH0KKyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX2luZm87CisgICAgU2FtcGxlc1ZlY3RvciBtX3Nh
bXBsZXM7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6VmlkZW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNWaWRlbygpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6QXVkaW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNBdWRpbygpOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCmluZGV4IGE1NDljMWE1YzQ4ZWIy
M2Q2NGJhM2ZkMzUzODQwOGJkMTU1MjM0ZjAuLmEyMjE4YzVkZDc0MWZmYzQ2ODg1NzcxZWRkNTE5
NGJjMzEyYTdmZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCkBAIC05
OCwxOCArOTgsNiBAQCB2b2lkIFZpZGVvRnJhbWU6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
Ym9vbCBWaWRlb0ZyYW1lOjppc0RpdmlzYWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8UmVmUHRyPFdlYkNv
cmU6Ok1lZGlhU2FtcGxlPiwgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPj4gVmlkZW9GcmFt
ZTo6ZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9OwotfQotCiBSZWY8
V2ViQ29yZTo6TWVkaWFTYW1wbGU+IFZpZGVvRnJhbWU6OmNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5
KCkgY29uc3QKIHsKICAgICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5o
CmluZGV4IDY0MTFkZjdkNjQwY2NkZWQxZDFlM2UxMWZkMWE0MjhhMjkxYjMxZWQuLjIyODVlOGFj
N2JmMDIxNDJmOTJhOTFmNzgwZTc1OTEwMjQyYWE2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9W
aWRlb0ZyYW1lLmgKQEAgLTcyLDggKzcyLDYgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVk
aWFUaW1lJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBm
bGFncygpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcApp
bmRleCBiNzAzY2ZlY2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4
ZjBkZmYwYjM0YzY4YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3Bw
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1E
YXRhPiBBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXIt
PmFwcGVuZERhdGEoV1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsK
KyAgICBwYXJzZXItPmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtl
VW5pcXVlPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7
IFdURk1vdmUoYnVmZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlv
biksIFdURk1vdmUoc2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgK
aW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBlMzM5NDQ1Yy4uYWZjMzEyNTRl
YjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBTbXB0ZTE3
MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGaWxtLAorICAgIEJ0MjAyMCwK
KyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAgIFNtcHRlRWc0MzIsCisgICAg
SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4gewogICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5MDczNWM4OGQ3ZmU1MWYzNzc1
NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkxMWViMDA4Yjc1NmM4ZGVhNzc0
ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKQEAgLTM0LDYgKzM0
LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyA6IHVpbnQ4
X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUxNzBtLAorICAgIFNtcHRl
MjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgVW5zcGVjaWZpZWQsCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1MiwxMyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM+
IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6Umdi
LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcw
OSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0
NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhD
b2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVu
c3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFlNjJhYjI0NDYyODhhODQwZDRl
Yi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2JjMmFiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAgLTMzLDYgKzMzLDIwIEBAIGVu
dW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIDogdWludDhfdCB7
CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYxOTY2MjEsCisgICAgR2FtbWEy
MmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0MG0sCisgICAgTGluZWFyLAor
ICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQsCisgICAgQnQxMzYxRXh0ZW5k
ZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAgQnQyMDIwXzEyYml0LAorICAg
IFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFyaWJTdGRCNjdIbGcsCisgICAg
VW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcgKzU4LDIx
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0sCi0gICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMQorICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2
MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0
LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQsCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIw
XzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGcsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQK
ICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMu
aAppbmRleCA2Y2NmZmIwZDZhOTJlZjA2YWU3NmY4OGEwYjI4NTY5NzVkYTNiMmY3Li4wMjVkMGQz
NDRmM2FlYTQyOGE2ZWQ4NzY4Njg4Y2NhYmZkMzdhMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAg
UGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0
Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9CiAgICAgc3RkOjpvcHRp
b25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KaW5kZXggZTgz
OGVjZTMxN2U5MDQ0YmJhYzllYzc3MGI4OTFmYzlhZDMxY2RmMC4uOWNhZDg5ZDFjNzZjOWNjMTE4
YjQ3MTIyYTU2Y2JkNTdhMTMxMmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQpAQCAtMjQ1LDExICsyNDUsNiBAQCBGbG9hdFNpemUgTWVkaWFTYW1w
bGVBVkZPYmpDOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRTaXpl
KFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucyhm
b3JtYXREZXNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSkpOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQVZG
T2JqQzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgie1BU
UygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVy
YXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNl
bnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0
aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKLX0KLQogdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6
Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKIHsKICAgICBDTUl0
ZW1Db3VudCBpdGVtQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIxYzM1MDY2NGViMGI1
YzYzNDhhYjcxNGQ3M2QyNmMzMTIyYWEwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNN
Rm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Cit0eXBlZGVmIHN0cnVj
dCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciogQ01TYW1wbGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTYW1wbGVzQmxvY2s7CitzdHJ1Y3QgVHJhY2tJbmZvOwor
CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYpOworLy8gQ29u
dmVydCBNZWRpYVNhbXBsZXNCbG9jayB0byB0aGUgZXF1aXZhbGVudCBDTVNhbXBsZUJ1ZmZlclJl
Zi4gSWYgQ01Gb3JtYXREZXNjcmlwdGlvblJlZgorLy8gaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCwg
b3RoZXJ3aXNlIGl0IHdpbGwgYmUgY3JlYXRlZCBmcm9tIHRoZSBNZWRpYVNhbXBsZXNCbG9jaydz
IFRyYWNrSW5mby4KK1dFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4g
dG9DTVNhbXBsZUJ1ZmZlcihNZWRpYVNhbXBsZXNCbG9jayYmLCBDTUZvcm1hdERlc2NyaXB0aW9u
UmVmKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWJkNGE3ZjIzN2NlYmU2
ZDQ1ODQxMDU2OWZkMDk4OWI4MmEyY2U2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsMjc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIkNNVXRp
bGl0aWVzLmgiCisKKyNpZiBQTEFURk9STShDT0NPQSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBs
ZS5oIgorI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5o
IgorI2ltcG9ydCAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKKyNpbXBvcnQgPENvcmVNZWRp
YS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0IDxwYWwvYXZmb3VuZGF0aW9uL01lZGlh
VGltZUFWRm91bmRhdGlvbi5oPgorI2ltcG9ydCA8d3RmL1Njb3BlLmg+CisjaW1wb3J0IDx3dGYv
Y2YvVHlwZUNhc3RzQ0YuaD4KKworI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKKyNpbXBv
cnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCisjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0
aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorI2lt
cG9ydCA8cGFsL2NmL0F1ZGlvVG9vbGJveFNvZnRMaW5rLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisjaWYgRU5BQkxFKE9QVVMpIHx8IEVOQUJMRShWT1JCSVMpCisKK3N0YXRpYyBSZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
bihjb25zdCBBdWRpb0luZm8mIGluZm8pCit7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uIGFzYmQgeyB9OworICAgIGFzYmQubUZvcm1hdElEID0gaW5mby5jb2RlY05hbWUudmFsdWU7
CisgICAgVUludDMyIHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAgYXV0byBlcnJvciA9IFBBTDo6
QXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eShrQXVkaW9Gb3JtYXRQcm9wZXJ0eV9Gb3JtYXRJbmZvLCBp
bmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCksICZzaXplLCAm
YXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlh
LCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbiBmYWlsZWQgd2l0aCBlcnJvciAlZCAoJS40
cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24oYXNiZCksIGluZm8uY29va2llRGF0YS0+c2l6ZSgpLCBpbmZvLmNvb2tp
ZURhdGEtPmRhdGEoKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVy
dFRvQ01Db2xvclByaW1hcmllcyhQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMgcHJpbWFyaWVz
KQoreworICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclBy
aW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmll
czo6SmVkZWNQMjJQaG9zcGhvcnM6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9y
UHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpTbXB0ZTE3MG06CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRl
MjQwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVScDQzMToKKyAg
ICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lf
UDM7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzI6Cisg
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfUDNf
RDY1OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDIwMjA6CisgICAg
ICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfSVRVX1Jf
MjAyMDsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisK
Kworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzKQoreworICAgIHN3
aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFu
c2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
clRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgUGxhdGZvcm1WaWRl
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJuIFBB
TDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzIwODRfUFE7
CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8x
MGJpdDoKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQy
MDIwXzEyYml0OgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5z
ZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6U21wdGVTdDQyODE6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2N0hsZzoKKyAgICAg
ICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9S
XzIxMDBfSExHOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpJZWM2MTk2NjIxOgorICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01G
b3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRfQ29yZU1l
ZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxscHRy
OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6
CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9MaW5lYXI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
fQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeChQbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzIGNvZWZmaWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNvZWZm
aWNpZW50cykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQy
MDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERl
c2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OkJ0NDcwYmc6CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllD
YkNyTWF0cml4X0lUVV9SXzYwMV80OworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6QnQ3MDk6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4
X0lUVV9SXzcwOV8yOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBU
RV8yNDBNXzE5OTU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVz
Y3JpcHRpb25Gcm9tVHJhY2tJbmZvKGNvbnN0IFRyYWNrSW5mbyYgaW5mbykKK3sKKyAgICBBU1NF
UlQoaW5mby5pc1ZpZGVvKCkgfHwgaW5mby5pc0F1ZGlvKCkpOworCisgICAgaWYgKGluZm8uaXNB
dWRpbygpKSB7CisgICAgICAgIGF1dG8mIGF1ZGlvSW5mbyA9IGRvd25jYXN0PGNvbnN0IEF1ZGlv
SW5mbz4oaW5mbyk7CisgICAgICAgIGlmICghYXVkaW9JbmZvLmNvb2tpZURhdGEgfHwgIWF1ZGlv
SW5mby5jb29raWVEYXRhLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICBzd2l0Y2ggKGF1ZGlvSW5mby5jb2RlY05hbWUudmFsdWUpIHsKKyNpZiBFTkFCTEUo
T1BVUykKKyAgICAgICAgY2FzZSAnb3B1cyc6CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29k
ZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGF1ZGlvSW5mbyk7CisjZW5k
aWYKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBjYXNlICd2b3JiJzoKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
bihhdWRpb0luZm8pOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8mIHZpZGVvSW5mbyA9IGRv
d25jYXN0PGNvbnN0IFZpZGVvSW5mbz4oaW5mbyk7CisKKyAgICBhdXRvIGRhdGEgPSB2aWRlb0lu
Zm8uYXRvbURhdGEtPmNyZWF0ZUNGRGF0YSgpOworICAgIEFTU0VSVCh2aWRlb0luZm8uY29kZWNO
YW1lID09ICd2cDA5JyB8fCB2aWRlb0luZm8uY29kZWNOYW1lID09ICd2cDA4Jyk7CisgICAgQ0ZU
eXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKKyAgICBDRlR5
cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07CisgICAgYXV0byBj
b25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgVmVjdG9yPENG
VHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5z
aW9uX1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKKyAgICBWZWN0b3I8Q0ZUeXBl
UmVmPiBleHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9OworCisg
ICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxSYW5nZSAmJiAqdmlkZW9JbmZvLmNvbG9y
U3BhY2UuZnVsbFJhbmdlKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChQQUw6OmtD
TUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKKyAgICAgICAgZXh0
ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIGlmICh2
aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJpZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gY21Db2xv
clByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMoKnZpZGVvSW5mby5jb2xvclNw
YWNlLnByaW1hcmllcykpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJ
bWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1
ZXMuYXBwZW5kKGNtQ29sb3JQcmltYXJpZXMpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2
aWRlb0luZm8uY29sb3JTcGFjZS50cmFuc2ZlcikgeworICAgICAgICBpZiAoYXV0byBjbVRyYW5z
ZmVyRnVuY3Rpb24gPSBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oKnZpZGVvSW5mby5jb2xv
clNwYWNlLnRyYW5zZmVyKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtD
VkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAgICAgICBleHRlbnNpb25z
VmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVuY3Rpb24pOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHZpZGVvSW5mby5jb2xvclNwYWNlLm1hdHJpeCkgeworICAgICAgICBpZiAoYXV0byBj
bU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoKnZpZGVvSW5mby5jb2xvclNwYWNlLm1h
dHJpeCkpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNt
TWF0cml4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlz
LmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2Ny
aXB0aW9uID0gbnVsbHB0cjsKKyAgICBDTVZpZGVvQ29kZWNUeXBlIGNvZGVjID0gdmlkZW9JbmZv
LmNvZGVjTmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgOiAndnAwOCc7Cisg
ICAgaWYgKG5vRXJyICE9IFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvZGVjLCB2aWRlb0luZm8uc2l6ZS53aWR0aCgpLCB2aWRlb0luZm8u
c2l6ZS5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRDRihmb3JtYXREZXNjcmlw
dGlvbik7Cit9CisKK1JldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gdG9DTVNhbXBsZUJ1ZmZl
cihNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXMsIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9y
bWF0RGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFzYW1wbGVzLmluZm8oKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsK
KyAgICAgICAgc2FtcGxlcy5jbGVhcigpOworICAgIH0pOworCisgICAgYXV0byBmb3JtYXQgPSBm
b3JtYXREZXNjcmlwdGlvbiA/IHJldGFpblB0cihmb3JtYXREZXNjcmlwdGlvbikgOiBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8oKnNhbXBsZXMuaW5mbygpKTsKKyAgICBpZiAo
IWZvcm1hdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q01CbG9j
a0J1ZmZlclJlZj4gY29tcGxldGVCbG9ja0J1ZmZlcnM7CisgICAgaWYgKHNhbXBsZXMuc2l6ZSgp
ID4gMSkgeworICAgICAgICAvLyBPcHRpbWlzYXRpb24gc28gdGhhdCB3ZSBhbGxvY2F0ZSB0aGUg
ZW50aXJlIENNQmxvY2tCdWZmZXIgYXQgb25jZSBpZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgdG8g
cmV0dXJuLgorICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0
cjsKKyAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVFbXB0eShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBzYW1wbGVzLnNpemUoKSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKKyAg
ICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyIHx8ICFyYXdCbG9ja0J1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBjb21wbGV0ZUJsb2NrQnVmZmVy
cyA9IHJhd0Jsb2NrQnVmZmVyOworICAgIH0KKworICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0lu
Zm8+IHBhY2tldFRpbWluZ3M7CisgICAgcGFja2V0VGltaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHNhbXBsZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8c2l6ZV90PiBwYWNrZXRTaXplczsKKyAg
ICBwYWNrZXRTaXplcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNhbXBsZXMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIHNhbXBsZSA6IHNhbXBsZXMpIHsKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxjb25zdCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj4oc2FtcGxlLmRh
dGEpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIGRhdGEgPSBz
dGQ6OmdldDxSZWY8Y29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+KHNhbXBsZS5kYXRhKTsK
KyAgICAgICAgYXV0byBibG9ja0J1ZmZlciA9IGRhdGEtPmNyZWF0ZUNNQmxvY2tCdWZmZXIoKTsK
KyAgICAgICAgaWYgKCFibG9ja0J1ZmZlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGlmICghY29tcGxldGVCbG9ja0J1ZmZlcnMpCisgICAgICAgICAgICBjb21wbGV0
ZUJsb2NrQnVmZmVycyA9IFdURk1vdmUoYmxvY2tCdWZmZXIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQXBwZW5kQnVmZmVyUmVmZXJl
bmNlKGNvbXBsZXRlQmxvY2tCdWZmZXJzLmdldCgpLCBibG9ja0J1ZmZlci5nZXQoKSwgMCwgMCwg
MCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgcGFja2V0VGltaW5n
cy5hcHBlbmQoeyBQQUw6OnRvQ01UaW1lKHNhbXBsZS5kdXJhdGlvbiksIFBBTDo6dG9DTVRpbWUo
c2FtcGxlLnByZXNlbnRhdGlvblRpbWUpLCBQQUw6OnRvQ01UaW1lKHNhbXBsZS5kZWNvZGVUaW1l
KSB9KTsKKyAgICAgICAgcGFja2V0U2l6ZXMuYXBwZW5kKGRhdGEtPnNpemUoKSk7CisgICAgfQor
CisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBp
ZiAoYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1hdC5nZXQoKSwgcGFja2V0
U2l6ZXMuc2l6ZSgpLCBwYWNrZXRUaW1pbmdzLnNpemUoKSwgcGFja2V0VGltaW5ncy5kYXRhKCks
IHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVy
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoc2FtcGxlcy5pc1ZpZGVvKCkg
JiYgc2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gUEFM
OjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkocmF3U2FtcGxlQnVmZmVy
LCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOworICAgICAgICBpZiAo
IWF0dGFjaG1lbnRzQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
QVNTRVJUKHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSkpID09IHNhbXBs
ZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAg
IENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZN
dXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0Fy
cmF5LCBpKSk7CisgICAgICAgICAgICBpZiAoIShzYW1wbGVzW2ldLmZsYWdzICYgTWVkaWFTYW1w
bGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMpKQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywg
a0NGQm9vbGVhblRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0Q0Yo
cmF3U2FtcGxlQnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4
IGExNWY3MWE0Yzg2ZGRiZWYyNzI3MjcwNzM5ZmU2MmVkNDk5MjdjMzcuLjUxMzc5MTJkYTkzNThi
Mzg3MDYyY2I4NjJiZmM0ZTQ3Y2VlODU1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAogI2lu
Y2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlV2ViTS5oIgorI2luY2x1ZGUgIkNNVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMzksMjEgKzQwLDE1IEBACiAjaW5jbHVk
ZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZVdlYk0u
aCIKICNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0RhdGFWaWV3Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oPgogI2luY2x1ZGUgPHdlYm0vd2VibV9wYXJzZXIuaD4KICNp
bmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4K
LSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNh
c3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CiAjaW5jbHVkZSA8
d3RmL3NwaS9kYXJ3aW4vT1NWYXJpYW50U1BJLmg+CiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0
TGluay5oIgotI2luY2x1ZGUgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCi0jaW5jbHVkZSA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CiAKIFdURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKHdl
Ym06OnN3YXApOwogCkBAIC0yMzQsMjUgKzIyOSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IExvZ0Fy
Z3VtZW50PHdlYm06OklkPiB7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJn
dW1lbnQ8V2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKLSAgICBzdGF0
aWMgQVNDSUlMaXRlcmFsIHRvU3RyaW5nKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OlN0YXRlIHN0YXRlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBj
YXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpOb25lOiByZXR1cm4g
Ik5vbmUiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
U3RhdGU6OlJlYWRpbmdFYm1sOiByZXR1cm4gIlJlYWRpbmdFYm1sIl9zOwotICAgICAgICBjYXNl
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkRWJtbDogcmV0dXJu
ICJSZWFkRWJtbCJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpTdGF0ZTo6UmVhZGluZ1NlZ21lbnQ6IHJldHVybiAiUmVhZGluZ1NlZ21lbnQiX3M7Ci0g
ICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRp
bmdJbmZvOiByZXR1cm4gIlJlYWRpbmdJbmZvIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkSW5mbzogcmV0dXJuICJSZWFkSW5mbyJf
czsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6
UmVhZGluZ1RyYWNrczogcmV0dXJuICJSZWFkaW5nVHJhY2tzIl9zOwotICAgICAgICBjYXNlIFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nVHJhY2s6IHJldHVy
biAiUmVhZGluZ1RyYWNrIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlN0YXRlOjpSZWFkVHJhY2s6IHJldHVybiAiUmVhZFRyYWNrIl9zOwotICAgICAg
ICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nQ2x1
c3RlcjogcmV0dXJuICJSZWFkaW5nQ2x1c3RlciJfczsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gIlVua25vd24iX3M7Ci0gICAgfQotfTsKLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTI3NiwxNCArMjUyLDE0IEBAIHN0YXRpYyBTdGF0dXMgc2VnbWVu
dFJlYWRFcnJvclRvV2VibVN0YXR1cyhTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRF
cnJvCiB7CiAgICAgc3dpdGNoIChlcnJvcikgewogICAgIGNhc2UgU291cmNlQnVmZmVyUGFyc2Vy
OjpTZWdtZW50OjpSZWFkRXJyb3I6OkVuZE9mRmlsZTogcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtF
bmRPZkZpbGUpOwotICAgIGNhc2UgU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJy
b3I6OkZhdGFsRXJyb3I6IHJldHVybiBTdGF0dXMoU3RhdHVzOjpDb2RlKFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVkKSk7CisgICAgY2FzZSBTb3VyY2VCdWZm
ZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0dXJuIFN0YXR1cyhT
dGF0dXM6OkNvZGUoV2ViTVBhcnNlcjo6RXJyb3JDb2RlOjpSZWFkZXJGYWlsZWQpKTsKICAgICB9
CiB9CiAKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFkZXIgZmluYWwg
OiBwdWJsaWMgd2VibTo6UmVhZGVyIHsKK2NsYXNzIFdlYk1QYXJzZXI6OlNlZ21lbnRSZWFkZXIg
ZmluYWwgOiBwdWJsaWMgd2VibTo6UmVhZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICB2b2lkIGFwcGVuZFNlZ21lbnQoU2VnbWVudCYmIHNlZ21lbnQpCisg
ICAgdm9pZCBhcHBlbmRTZWdtZW50KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21l
bnQpCiAgICAgewogICAgICAgICBtX2RhdGEucHVzaF9iYWNrKFdURk1vdmUoc2VnbWVudCkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50U2VnbWVudCA9PSBtX2RhdGEuZW5kKCkpCkBAIC00NjAsOCAr
NDM2LDggQEAgcHJpdmF0ZToKICAgICAgICAgbV9wb3NpdGlvbldpdGhpblNlZ21lbnQgPSAwOwog
ICAgIH0KIAotICAgIFN0ZExpc3Q8U2VnbWVudD4gbV9kYXRhOwotICAgIFN0ZExpc3Q8U2VnbWVu
dD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQgeyBtX2RhdGEuZW5kKCkgfTsKKyAgICBTdGRM
aXN0PFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD4gbV9kYXRhOworICAgIFN0ZExpc3Q8U291
cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50Pjo6aXRlcmF0b3IgbV9jdXJyZW50U2VnbWVudCB7IG1f
ZGF0YS5lbmQoKSB9OwogICAgIHNpemVfdCBtX3Bvc2l0aW9uIHsgMCB9OwogICAgIHNpemVfdCBt
X3Bvc2l0aW9uV2l0aGluU2VnbWVudCB7IDAgfTsKIH07CkBAIC01NTMsMTM5ICs1MjksNDggQEAg
c3RhdGljIGJvb2wgY2FuTG9hZEZvcm1hdFJlYWRlcigpCiAjZW5kaWYgLy8gIVVTRShBUFBMRV9J
TlRFUk5BTF9TREspCiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNXZWJNRm9y
bWF0UmVhZGVyQXZhaWxhYmxlKCkKK1dlYk1QYXJzZXI6OldlYk1QYXJzZXIoQ2FsbGJhY2smIGNh
bGxiYWNrKQorICAgIDogbV9wYXJzZXIobWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8
V2VibVBhcnNlcj4oKSkKKyAgICAsIG1fcmVhZGVyKG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRl
cj4oKSkKKyAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCiB7Ci0gICAgcmV0dXJuIFBsYXRmb3Jt
TWVkaWFTZXNzaW9uTWFuYWdlcjo6d2ViTUZvcm1hdFJlYWRlckVuYWJsZWQoKSAmJiBjYW5Mb2Fk
Rm9ybWF0UmVhZGVyKCkgJiYgaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCk7Ci19Ci0KLU1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRU
eXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQotewotI2lmIEVOQUJMRShWUDkp
IHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQotICAgIGlmICghaXNXZWJtUGFyc2Vy
QXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgYXV0byBjb250YWluZXJUeXBlID0gdHlwZS5jb250
YWluZXJUeXBlKCk7Ci0gICAgYm9vbCBpc0F1ZGlvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgImF1ZGlvL3dlYm0iKTsKLSAgICBib29sIGlzVmlk
ZW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBlLCAi
dmlkZW8vd2VibSIpOwotICAgIGlmICghaXNBdWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzVmlkZW9D
b250YWluZXJUeXBlKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNU
eXBlOjpJc05vdFN1cHBvcnRlZDsKLSAgICAKLSAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWls
YWJsZSA9IGZhbHNlOwotI2lmIEVOQUJMRShWT1JCSVMpCi0gICAgaXNBbnlBdWRpb0NvZGVjQXZh
aWxhYmxlIHw9IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOwotI2VuZGlmCi0jaWYgRU5BQkxF
KE9QVVMpCi0gICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFp
bGFibGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0Fu
eUF1ZGlvQ29kZWNBdmFpbGFibGUpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpT
dXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgYm9vbCBpc0FueUNvZGVjQXZhaWxh
YmxlID0gaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlOwotI2lmIEVOQUJMRShWUDkpCi0gICAgaXNB
bnlDb2RlY0F2YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKLSNlbmRpZgotCi0g
ICAgaWYgKCFpc0FueUNvZGVjQXZhaWxhYmxlKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGF1dG8gY29kZWNzID0g
dHlwZS5jb2RlY3MoKTsKLSAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7Ci0KLSAgICBm
b3IgKGF1dG8mIGNvZGVjIDogY29kZWNzKSB7Ci0jaWYgRU5BQkxFKFZQOSkKLSAgICAgICAgaWYg
KGNvZGVjLnN0YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwg
ZXF1YWwoY29kZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywgInZwOSIpKSB7Ci0KLSAgICAgICAg
ICAgIGlmICghaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAg
ICAgICAgIGF1dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2Rl
Yyk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVycykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQot
ICAgICAgICAgICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpj
b2RlY1BhcmFtZXRlcnMpKQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJMRShWUDkpCi0KLSNpZiBFTkFCTEUoVk9SQklTKQot
ICAgICAgICBpZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKLSAgICAgICAgICAgIGlmICghaXNWb3Ji
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
RW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKLQotI2lmIEVOQUJMRShP
UFVTKQotICAgICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7Ci0gICAgICAgICAgICBpZiAoIWlz
T3B1c0RlY29kZXJBdmFpbGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5
ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoT1BVUykKLQotICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSAgICB9
Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRl
ZDsKLQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0KLSAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLSNlbmRpZiAvLyBFTkFC
TEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKIH0KIAotUmVmUHRyPFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25z
dCBDb250ZW50VHlwZSYgdHlwZSkKK1dlYk1QYXJzZXI6On5XZWJNUGFyc2VyKCkKIHsKLSAgICBp
ZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBw
b3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQotICAgIDogbV9yZWFk
ZXIobWFrZVVuaXF1ZVJlZjxTZWdtZW50UmVhZGVyPigpKQordm9pZCBXZWJNUGFyc2VyOjpyZXNl
dFN0YXRlKCkKIHsKLSAgICBpZiAoaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCi0gICAgICAgIG1f
cGFyc2VyID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8V2VibVBhcnNlcj4oKTsK
KyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKKyAgICBpZiAobV9wYXJz
ZXIpCisgICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CisgICAgbV9yZWFkZXItPnJlc2V0KCk7
CisgICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdtZW50UHJvY2Vzc2VkID8gU3RhdGU6
OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnQgPSBudWxscHRyOworICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSBm
YWxzZTsKKyAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOworICAgIGZvciAoYXV0byYgdHJhY2sg
OiBtX3RyYWNrcykKKyAgICAgICAgdHJhY2stPnJlc2V0KCk7CiB9CiAKLVNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06On5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKK3ZvaWQgV2ViTVBhcnNlcjo6cmVz
ZXQoKQogeworICAgIG1fcmVhZGVyLT5yZXNldCgpOworICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7
CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYg
c2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBB
cHBlbmRGbGFncyBhcHBlbmRGbGFncykKK2ludCBXZWJNUGFyc2VyOjpwYXJzZShTb3VyY2VCdWZm
ZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdtZW50KQogewotICAgIGlmICghbV9wYXJzZXIpIHsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJmbGFncygiLCBhcHBlbmRGbGFn
cyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSA/ICJEaXNjb250aW51aXR5IiA6ICIiLCAi
KSwgc2l6ZSgiLCBzZWdtZW50LnNpemUoKSwgIikiKTsKLQotICAgIGlmIChhcHBlbmRGbGFncyA9
PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSkgewotICAgICAgICBtX3JlYWRlci0+cmVzZXQo
KTsKLSAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKLSAgICB9CisgICAgaWYgKCFtX3BhcnNl
cikKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIG1fcmVhZGVyLT5hcHBlbmRTZWdtZW50KFdURk1v
dmUoc2VnbWVudCkpOwogCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgbV9zdGF0dXMgPSBt
X3BhcnNlci0+RmVlZCh0aGlzLCAmbV9yZWFkZXIpOwogICAgICAgICBpZiAobV9zdGF0dXMub2so
KSB8fCBtX3N0YXR1cy5jb2RlID09IFN0YXR1czo6a0VuZE9mRmlsZSB8fCBtX3N0YXR1cy5jb2Rl
ID09IFN0YXR1czo6a1dvdWxkQmxvY2spIHsKICAgICAgICAgICAgIG1fcmVhZGVyLT5yZWNsYWlt
U2VnbWVudHMoKTsKLQotICAgICAgICAgICAgLy8gQXVkaW8gdHJhY2tzIGFyZSBncm91cGVkIGlu
dG8gbWV0YS1zYW1wbGVzIG9mIGEgZHVyYXRpb24gbm8gbW9yZSB0aGFuIG1fbWluaW11bVNhbXBs
ZUR1cmF0aW9uLgotICAgICAgICAgICAgLy8gQnV0IGF0IHRoZSBlbmQgb2YgYSBmaWxlLCBubyBt
b3JlIGF1ZGlvIGRhdGEgbWF5IGJlIGluY29taW5nLCBzbyBmbHVzaCBhbmQgZW1pdCBhbnkgcGVu
ZGluZwotICAgICAgICAgICAgLy8gYXVkaW8gYnVmZmVycy4KLSAgICAgICAgICAgIGZsdXNoUGVu
ZGluZ0F1ZGlvQnVmZmVycygpOwotCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobV9zdGF0dXMuY29kZSAhPSBzdGF0aWNfY2FzdDxpbnQzMl90PihFcnJvckNv
ZGU6OlJlY2VpdmVkRWJtbEluc2lkZVNlZ21lbnQpKQpAQCAtNzEwLDYxICs1OTUsMjQgQEAgdm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKFNlZ21lbnQmJiBzZWdtZW50LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2kKICAgICAgICAgY29udGludWU7CiAgICAgfQogCi0gICAgRVJS
T1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJzdGF0dXMuY29kZSgiLCBtX3N0YXR1
cy5jb2RlLCAiKSIpOwotICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0gbV9zdGF0dXMuY29kZV0gewotICAg
ICAgICBpZiAobV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjaykKLSAgICAg
ICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soY29kZSk7Ci0g
ICAgfSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgIHJldHVybiBtX3N0YXR1cy5j
b2RlOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlh
RGF0YSgpCit2b2lkIFdlYk1QYXJzZXI6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwg
Y29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKIHsKKyAgICBtX2xvZ2dlciA9ICZsb2dnZXI7Cisg
ICAgbV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKIH0KIAotdm9pZCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29sLCB1
aW50NjRfdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUoKQordm9pZCBXZWJNUGFyc2Vy
OjppbnZhbGlkYXRlKCkKIHsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
KTsKLSAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0gICAg
bV9yZWFkZXItPnJlc2V0KCk7Ci0gICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdtZW50
UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7Ci0gICAgbV9p
bml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwotICAgIG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwotICAg
IGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKLSAgICAgICAgdHJhY2stPnJlc2V0KCk7Ci19
Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aW52YWxpZGF0ZSgpCi17Ci0gICAgSU5G
T19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0KICAgICBtX3BhcnNlciA9IG51bGxw
dHI7CiAgICAgbV90cmFja3MuY2xlYXIoKTsKICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9
IG51bGxwdHI7CiAgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKIH0KIAotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIpCi17Ci0gICAgbV9sb2dnZXIgPSAmbG9nZ2VyOwotICAgIG1fbG9n
SWRlbnRpZmllciA9IGxvZ0lkZW50aWZpZXI7Ci19Ci0KLWF1dG8gU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRy
YWNrRGF0YSoKK2F1dG8gV2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0
X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpIHsKICAgICAgICAgaWYgKHRyYWNrLT50cmFjaygpLnRyYWNrX251bWJlci5pc19w
cmVzZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJhY2tO
dW1iZXIpCkBAIC03NzMsNyArNjIxLDcgQEAgYXV0byBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp0
cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHIKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxl
bWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIEFjdGlvbiogYWN0aW9u
KQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYgbWV0YWRhdGEsIEFjdGlvbiogYWN0aW9uKQogewogICAgIEFTU0VSVChhY3Rpb24pOwogICAg
IGlmICghYWN0aW9uKQpAQCAtODQ1LDcgKzY5Myw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBB
CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiBtZXRhZGF0YSkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVu
dE1ldGFkYXRhJiBtZXRhZGF0YSkKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSKTsKIApAQCAtODYxLDI0ICs3MDksMjAgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJzdGF0ZSgiLCBvbGRTdGF0ZSwg
Ii0+IiwgbV9zdGF0ZSwgIiksIGlkKCIsIG1ldGFkYXRhLmlkLCAiKSwgc2l6ZSgiLCBtZXRhZGF0
YS5zaXplLCAiKSIpOwogCiAgICAgaWYgKG1ldGFkYXRhLmlkID09IElkOjprVHJhY2tzKSB7Ci0g
ICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFtX2RpZFByb3ZpZGVDb250ZW50S2V5
UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjaykgeworICAgICAgICBp
ZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSAmJiAhbV9jYWxsYmFjay5jYW5EZWNyeXB0KCkpIHsKICAg
ICAgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiRW5jb3VudGVy
ZWQgZW5jcnlwdGVkIGNvbnRlbnQgd2l0aG91dCBhbiBrZXkgcmVxdWVzdCBjYWxsYmFjayIpOwog
ICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoRXJyb3JDb2RlOjpDb250ZW50
RW5jcnlwdGVkKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9pbml0aWFsaXphdGlvblNl
Z21lbnRFbmNvdW50ZXJlZCkgewotICAgICAgICAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxs
YmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGluaXRpYWxpemF0aW9u
U2VnbWVudCA9IFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25TZWdtZW50KV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNr
KQotICAgICAgICAgICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJh
Y2soV1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9CisgICAgICAgIGlmIChtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkKQor
ICAgICAgICAgICAgbV9jYWxsYmFjay5wYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoV1RGTW92ZSgq
bV9pbml0aWFsaXphdGlvblNlZ21lbnQpKTsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnRFbmNvdW50ZXJlZCA9IGZhbHNlOwogICAgICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9
IG51bGxwdHI7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50UHJvY2Vzc2VkID0gdHJ1
ZTsKIAogICAgICAgICBpZiAoIW1fa2V5SWRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZm9y
IChhdXRvJiBrZXlJZFBhaXIgOiBtX2tleUlkcykKLSAgICAgICAgICAgICAgICBtX2RpZFByb3Zp
ZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSURDYWxsYmFjayhX
VEZNb3ZlKGtleUlkUGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3QpOworICAgICAgICAgICAg
ICAgIG1fY2FsbGJhY2suY29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFj
a0lEKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlkUGFpci5maXJzdCk7CiAgICAgICAg
IH0KICAgICAgICAgbV9rZXlJZHMuY2xlYXIoKTsKICAgICB9CkBAIC04ODYsNyArNzMwLDcgQEAg
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50
TWV0YWRhdGEmIG1ldGFkYXRhKQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0
ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCitTdGF0dXMgV2ViTVBhcnNlcjo6T25F
Ym1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVibWwpCiB7CiAgICAgSU5G
T19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTg5NCw3ICs3MzgsNyBAQCBT
dGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IEVibWwmIGVibWwpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpDb2Rl
KEVycm9yQ29kZTo6SW52YWxpZERvY1R5cGUpKTsKIAogICAgIG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50RW5jb3VudGVyZWQgPSB0cnVlOwotICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbWFr
ZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s8SW5pdGlhbGl6YXRpb25TZWdtZW50PigpOwor
ICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9j
Q2hlY2s8U291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQ+KCk7CiAgICAg
Ly8gVE9ETzogU2V0dGluZyB0aGlzIHRvIGZhbHNlIGhlcmUsIHdpbGwgcHJldmVudCBhZGRpbmcg
YSBuZXcgbWVkaWEgc2VnbWVudCBzaG91bGQgYQogICAgIC8vIHBhcnRpYWwgaW5pdCBzZWdtZW50
IGJlIGVuY291bnRlcmVkIGFmdGVyIGEgY2FsbCB0byBzb3VyY2VCdWZmZXIuYWJvcnQoKS4KICAg
ICAvLyBJdCdzIHByb2JhYmx5IGZpbmUgYXMgbm8tb25lIGluIHRoZWlyIHJpZ2h0IG1pbmQgc2hv
dWxkIHNlbmQgcGFydGlhbCBpbml0IHNlZ21lbnQgb25seQpAQCAtOTA1LDcgKzc0OSw3IEBAIFN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2VnbWVudEJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWN0aW9uKQorU3RhdHVzIFdlYk1QYXJz
ZXI6Ok9uU2VnbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWN0aW9u
KQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05MjIs
NyArNzY2LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2VnbWVudEJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIEFjdGlvbiogYWMKICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZvJiBpbmZvKQorU3RhdHVz
IFdlYk1QYXJzZXI6Ok9uSW5mbyhjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZvJiBp
bmZvKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05
MzgsNyArNzgyLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uSW5mbyhjb25z
dCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBJbmZvJiBpbmZvKQogICAgIHJldHVybiBTdGF0dXMo
U3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1c3RlciYg
Y2x1c3RlciwgQWN0aW9uKiBhY3Rpb24pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25DbHVzdGVyQmVn
aW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1c3RlciYgY2x1c3RlciwgQWN0aW9u
KiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAK
QEAgLTk1NCw3ICs3OTgsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25DbHVz
dGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQ2x1cwogICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNr
RW50cnkmIHRyYWNrRW50cnkpCitTdGF0dXMgV2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KGNvbnN0
IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRyYWNrRW50cnkmIHRyYWNrRW50cnkpCiB7CiAgICAg
aWYgKCF0cmFja0VudHJ5LnRyYWNrX3R5cGUuaXNfcHJlc2VudCgpIHx8ICF0cmFja0VudHJ5LmNv
ZGVjX2lkLmlzX3ByZXNlbnQoKSkKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CkBAIC0xMDE5LDE0ICs4NjMsMTQgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0UK
IAogI2lmIEVOQUJMRShWT1JCSVMpCiAgICAgaWYgKGNvZGVjU3RyaW5nID09ICJBX1ZPUkJJUyIg
JiYgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFja3MuYXBwZW5k
KEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNrRW50cnksICp0
aGlzLCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKSk7CisgICAgICAgIG1fdHJhY2tzLmFw
cGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5
LCAqdGhpcykpOwogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsK
ICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUFVTKQogICAgIGlmIChjb2RlY1N0cmluZyA9
PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgbV90cmFj
a3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0Vu
dHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICBtX3Ry
YWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMsIHRyYWNr
RW50cnksICp0aGlzKSk7CiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0
ZWQpOwogICAgIH0KICNlbmRpZgpAQCAtMTAzNSw3ICs4NzksNyBAQCBTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0
IFRyYWNrRQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0JlZ2luKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3ZWJt
OjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYs
IGNvbnN0IEJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZf
UE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwNTAsNyArODk0LDcgQEAgd2VibTo6U3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdAogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwog
fQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0VuZChjb25z
dCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNl
cjo6T25CbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYpCiB7CiAg
ICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwNTksNyArOTAz
LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tFbmQoY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmwKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVC
bG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9u
U2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9j
ayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIpOwogCkBAIC0xMDc0LDcgKzkxOCw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6
U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smKQord2VibTo6U3RhdHVzIFdlYk1QYXJz
ZXI6Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxl
QmxvY2smKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBA
IC0xMDgzLDcgKzkyNyw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
blNpbXBsZUJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvCiAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRh
dGEmLCB3ZWJtOjpBY3Rpb24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJs
b2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24q
IGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApA
QCAtMTA5NSw3ICs5MzksNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25CbG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYQogICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IHdlYm06OkJsb2NrR3JvdXAmIGJsb2NrR3JvdXApCit3ZWJtOjpTdGF0dXMgV2Vi
TVBhcnNlcjo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IHdlYm06OkJsb2NrR3JvdXAmIGJsb2NrR3JvdXApCiB7CiAgICAgSU5GT19MT0dfSUZfUE9T
U0lCTEUoTE9HSURFTlRJRklFUik7CiAgICAgaWYgKGJsb2NrR3JvdXAuYmxvY2suaXNfcHJlc2Vu
dCgpICYmIGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5nLmlzX3ByZXNlbnQoKSkgewpAQCAtMTEw
NSwxNyArOTQ5LDEzIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJs
b2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhCiAgICAgICAgICAgICBFUlJP
Ul9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIklnbm9yaW5nIHVua25vd24gdHJhY2sg
bnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKICAgICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprT2tDb21wbGV0ZWQpOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0cmFja0RhdGEtPnRyYWNr
KCkudHJhY2tfdWlkLmlzX3ByZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52
YWx1ZSgpID4gMCkgewotICAgICAgICAgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSB0cmFja0RhdGEt
PnRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCksIHBhZGRpbmcgPSBNZWRpYVRpbWUoYmxvY2tHcm91
cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSwga191c19pbl9zZWNvbmRzKV0oKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjaykKLSAgICAgICAgICAg
ICAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKHRyYWNrSUQsIHBhZGRpbmcp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHRyYWNrRGF0YS0+dHJh
Y2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5n
LnZhbHVlKCkgPiAwKQorICAgICAgICAgICAgbV9jYWxsYmFjay5wYXJzZWRUcmltbWluZ0RhdGEo
dHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpLCBNZWRpYVRpbWUoYmxvY2tHcm91
cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSwga191c19pbl9zZWNvbmRzKSk7CiAgICAgfQogICAg
IHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRh
ZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKK3dlYm06OlN0
YXR1cyBXZWJNUGFyc2VyOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBS
ZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIEFTU0VSVChy
ZWFkZXIpOwogICAgIGlmICghcmVhZGVyKQpAQCAtMTE1MiwzMiArOTkyLDIwIEBAIHdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEm
IG1ldGFkYXRhLCBSZWFkCiAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwogICAgIH0KIAotICAgIHJldHVybiB0cmFja0RhdGEtPmNvbnN1bWVGcmFtZURhdGEoKnJl
YWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWluaW5nLCBQQUw6OkNNVGltZU1ha2UoYmxvY2stPnRp
bWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFt
ZXMpOworICAgIHJldHVybiB0cmFja0RhdGEtPmNvbnN1bWVGcmFtZURhdGEoKnJlYWRlciwgbWV0
YWRhdGEsIGJ5dGVzUmVtYWluaW5nLCBNZWRpYVRpbWUoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJy
ZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOwogfQogCi12b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2Ft
cGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90IHRyYWNrSUQsIHN0ZDo6b3B0aW9u
YWw8c2l6ZV90PiBieXRlUmFuZ2VPZmZzZXQpCi17Ci0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRD
YWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHNhbXBsZUJ1ZmZl
ciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRCwgYnl0ZVJhbmdlT2Zmc2V0XSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1w
bGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKLSAgICAgICAg
aWYgKGJ5dGVSYW5nZU9mZnNldCkKLSAgICAgICAgICAgIG1lZGlhU2FtcGxlLT5zZXRCeXRlUmFu
Z2VPZmZzZXQoKmJ5dGVSYW5nZU9mZnNldCk7Ci0gICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0
YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsK
LSAgICB9KTsKLX0KIAogI2RlZmluZSBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKC4uLikg
aWYgKHBhcnNlcigpLmxvZ2dlclB0cigpKSBwYXJzZXIoKS5sb2dnZXJQdHIoKS0+ZXJyb3IobG9n
Q2hhbm5lbCgpLCBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFtZSgpLCBfX2Z1
bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCiAKLVJlZlB0cjxT
aGFyZWRCdWZmZXI+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6Y29udGlndW91
c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QK
K1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYk1QYXJzZXI6OlRyYWNrRGF0YTo6Y29udGlndW91c0Nv
bXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsK
LSAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5zaXplKCkp
CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVm
ZmVycy5nZXQoKS0+Z2V0Q29udGlndW91c0RhdGEob2Zmc2V0LCBsZW5ndGgpOworICAgIHJldHVy
biBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPmdldENvbnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3Ro
KTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6
cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3Qgd2VibTo6RnJhbWVNZXRh
ZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBX
ZWJNUGFyc2VyOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIs
IGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1h
aW5pbmcpCiB7CiAgICAgaWYgKG1fY29tcGxldGVQYWNrZXRTaXplICYmICptX2NvbXBsZXRlUGFj
a2V0U2l6ZSAhPSBtZXRhZGF0YS5zaXplKSB7CiAgICAgICAgIC8vIFRoZSBwYWNrZXQncyBtZXRh
ZGF0YSBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50bHkgcGVuZGluZyBjb21wbGV0ZSBwYWNrZXQ7
IHJlc3RhcnQuCkBAIC0xMTkwLDcgKzEwMTgsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZAog
CiAgICAgd2hpbGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAgICB1aW50NjRfdCBieXRlc1Jl
YWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBt
X2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1dG8gc3RhdHVzID0g
c3RhdGljX2Nhc3Q8V2ViTVBhcnNlcjo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8o
KmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVzUmVhZCk7CiAgICAg
ICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1fcGFydGlhbEJ5dGVz
UmVhZCArPSBieXRlc1JlYWQ7CiAKQEAgLTEyMDIsOTggKzEwMzAsNjYgQEAgd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpS
ZWFkZXImIHJlYWQKICAgICBpZiAobV9wYXJ0aWFsQnl0ZXNSZWFkIDwgKm1fY29tcGxldGVQYWNr
ZXRTaXplKQogICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a09rUGFy
dGlhbCk7CiAKLSAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLmFwcGVuZChtX2N1cnJlbnRCbG9j
a0J1ZmZlci50YWtlKCkpOworICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IG1fY3VycmVudEJs
b2NrQnVmZmVyLnRha2UoKTsKKyAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9w
dDsKICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwogCiAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXpl
X3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCkKLXsKLSAgICBpZiAobV9wYWNrZXRTaXplcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29tcGxldGVDTUJsb2NrQnVmZmVy
cyA9IG1fY29tcGxldGVCbG9ja0J1ZmZlcnMudGFrZSgpLT5jcmVhdGVDTUJsb2NrQnVmZmVyKCk7
Ci0gICAgaWYgKCFjb21wbGV0ZUNNQmxvY2tCdWZmZXJzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwotICAgIGF1dG8g
ZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQs
IGNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCks
IG1fcGFja2V0U2l6ZXMuc2l6ZSgpLCBtX3BhY2tldFRpbWluZ3Muc2l6ZSgpLCBtX3BhY2tldFRp
bWluZ3MuZGF0YSgpLCBtX3BhY2tldFNpemVzLnNpemUoKSwgbV9wYWNrZXRTaXplcy5kYXRhKCks
ICZyYXdTYW1wbGVCdWZmZXIpOwotICAgIGlmIChlcnIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSBmYWlsZWQgd2l0aCAl
ZCIsIGVycik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwb3N0UHJvY2VzcyhyYXdT
YW1wbGVCdWZmZXIpOwotCi0gICAgYXV0byB0cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFs
dWUoKTsKLSAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKGFkb3B0Q0YocmF3U2FtcGxlQnVm
ZmVyKSwgdHJhY2tJRCwgbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKLX0KLQotdm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0
ZSgpCit2b2lkIFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1l
c1N0YXRlKCkKIHsKICAgICBtX2tleUZyYW1lcy5jbGVhcigpOwogICAgIFRyYWNrRGF0YTo6cmVz
ZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVy
JiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNS
ZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50KQord2VibTo6U3Rh
dHVzIFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJl
YWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5
dGVzUmVtYWluaW5nLCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsK
ICNpZiBFTkFCTEUoVlA5KQogICAgIGF1dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIs
IG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29r
KCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAKKyAgICBtX2xhc3RQb3NpdGlvbiA9IG1ldGFk
YXRhLnBvc2l0aW9uOworCiAgICAgY29uc3RleHByIHNpemVfdCBtYXhIZWFkZXJTaXplID0gMzI7
IC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIFZQOSB1bmNvbXByZXNzZWQgaGVhZGVyIGlzIDE0
NCBiaXRzIGFuZCAxMSBieXRlcyBmb3IgVlA4LiBSb3VuZCBoaWdoLgotICAgIHNpemVfdCBzZWdt
ZW50SGVhZGVyTGVuZ3RoID0gc3RkOjptaW4obWF4SGVhZGVyU2l6ZSwgKm1fY29tcGxldGVQYWNr
ZXRTaXplKTsKLSAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVC
bG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCBzZWdtZW50SGVhZGVyTGVuZ3Ro
KTsKKyAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9IHN0ZDo6bWluKG1heEhlYWRlclNp
emUsIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+c2l6ZSgpKTsKKyAgICBhdXRvIGNvbnRpZ3VvdXNC
dWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBzZWdtZW50SGVhZGVyTGVu
Z3RoKTsKICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiVmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlciBmYWls
ZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOworICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSBmYWls
ZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9jayIpOwogICAgICAgICByZXR1cm4gU2tp
cCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogICAgIGNvbnN0IHVpbnQ4X3QqIGJs
b2NrQnVmZmVyRGF0YSA9IGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKTsKIAogICAgIGJvb2wgaXNL
ZXkgPSBmYWxzZTsKLSAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0
RGVzY3JpcHRpb247CiAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWUDkpIHsKICAgICAg
ICAgaWYgKCFtX2hlYWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9ja0J1ZmZl
ckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5ndGgpKQogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJl
YWRlciwgYnl0ZXNSZW1haW5pbmcpOwogCiAgICAgICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXko
KSkgewogICAgICAgICAgICAgaXNLZXkgPSB0cnVlOwotICAgICAgICAgICAgYXV0byBmb3JtYXRE
ZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlciht
X2hlYWRlclBhcnNlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cik7Ci0gICAgICAgICAg
ICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJv
bSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3Jp
cHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICAgICAgc2V0Rm9ybWF0
RGVzY3JpcHRpb24oY3JlYXRlVmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBh
cnNlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6VlA4KSB7CiAgICAgICAgIGF1dG8gaGVhZGVy
ID0gcGFyc2VWUDhGcmFtZUhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRIZWFkZXJMZW5n
dGgpOwogICAgICAgICBpZiAoaGVhZGVyICYmIGhlYWRlci0+a2V5ZnJhbWUpIHsKICAgICAgICAg
ICAgIGlzS2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBj
cmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoKmhlYWRlciwgdHJhY2soKS52aWRl
by52YWx1ZSgpLmNvbG91cik7Ci0gICAgICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiZmFpbGVkIHRv
IGNyZWF0ZSBmb3JtYXQgZGVzY3JpcHRpb24gZnJvbSBWUFggaGVhZGVyIik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlw
dGlvbikpOworICAgICAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oY3JlYXRlVmlkZW9JbmZv
RnJvbVZQOEhlYWRlcigqaGVhZGVyLCB0cmFjaygpLnZpZGVvLnZhbHVlKCkuY29sb3VyKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIW1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygp
KQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNldEluZm8oZm9ybWF0RGVzY3JpcHRp
b24oKSk7CisgICAgZWxzZSBpZiAoZm9ybWF0RGVzY3JpcHRpb24oKSAmJiAqZm9ybWF0RGVzY3Jp
cHRpb24oKSAhPSAqbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5pbmZvKCkpCisgICAgICAgIGRyYWlu
UGVuZGluZ1NhbXBsZXMoKTsKKwogICAgIGF1dG8gdHJhY2sgPSB0aGlzLT50cmFjaygpOwotICAg
IC8vIEZJWE1FOiBBIGJsb2NrIG1pZ2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0
IG9ubHkgdGhpcyBmcmFtZSBoYXMgYmVlbiByZWFkIGludG8gYGNvbXBsZXRlQmxvY2tCdWZmZXJg
LgotICAgIC8vIEJlbG93IHdlIGNyZWF0ZSBzYW1wbGUgYnVmZmVycyBmb3IgZWFjaCBmcmFtZSwg
ZWFjaCB3aXRoIHRoZSBibG9jaydzIHRpbWVjb2RlIGFuZCBgbnVtX2ZyYW1lc2AgdmFsdWUuCi0g
ICAgLy8gU2hvdWxkbid0IHdlIGNyZWF0ZSBqdXN0IG9uZSBzYW1wbGUgYnVmZmVyIG9uY2UgYWxs
IHRoZSBibG9jaydzIGZyYW1lcyBoYXZlIGJlZW4gcmVhZCBpbnRvIGBjdXJyZW50QmxvY2tCdWZm
ZXJgPwogCiAgICAgdWludDY0X3QgZHVyYXRpb24gPSAwOwogICAgIGlmICh0cmFjay5kZWZhdWx0
X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0
X2R1cmF0aW9uLnZhbHVlKCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSAvIGtfdXNfaW5f
c2Vjb25kczsKKyAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVl
KCkgKiBwcmVzZW50YXRpb25UaW1lLnRpbWVTY2FsZSgpIC8ga191c19pbl9zZWNvbmRzOwogCi0g
ICAgbV9rZXlGcmFtZXMuYXBwZW5kKGlzS2V5KTsKLSAgICBtX3BhY2tldFNpemVzLmFwcGVuZCgq
bV9jb21wbGV0ZVBhY2tldFNpemUpOwotICAgIG1fcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6
OkNNVGltZU1ha2UoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2Vu
dGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSB9KTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRl
T2Zmc2V0ICs9ICptX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICBtX2NvbXBsZXRlUGFja2V0U2l6
ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHBy
ZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZShkdXJhdGlvbiwgcHJl
c2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpLCBpc0tleSA/IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIDogTWVk
aWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lIH0pOwogCiAgICAgZHJhaW5QZW5kaW5nU2FtcGxl
cygpOwogCkBAIC0xMzA3LDQ1ICsxMTAzLDE5IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAj
ZW5kaWYKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6
cG9zdFByb2Nlc3MoQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyKQotewotICAgIGF1
dG8gYXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2ht
ZW50c0FycmF5KHJhd1NhbXBsZUJ1ZmZlciwgdHJ1ZSk7Ci0gICAgQVNTRVJUKGF0dGFjaG1lbnRz
QXJyYXkpOwotICAgIGlmICghYXR0YWNobWVudHNBcnJheSkgewotICAgICAgICBQQVJTRVJfTE9H
X0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJy
YXkgcmV0dXJuZWQgTlVMTCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KHNpemVfdChDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSkpID09IG1fa2V5RnJhbWVz
LnNpemUoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZNdXRhYmxl
RGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0
aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsK
LSAgICAgICAgaWYgKCFtX2tleUZyYW1lc1tpXSkKLSAgICAgICAgICAgIENGRGljdGlvbmFyeVNl
dFZhbHVlKGF0dGFjaG1lbnRzLCBQQUw6OmtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywg
a0NGQm9vbGVhblRydWUpOwotICAgIH0KLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCit2b2lkIFdlYk1Q
YXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKIHsKICAg
ICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrID0gMDsKICAgICBUcmFja0RhdGE6OnJlc2V0Q29t
cGxldGVkRnJhbWVzU3RhdGUoKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVh
ZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3dl
Ym06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBp
bnQpCiB7Ci0gICAgaWYgKG1fcGFja2V0VGltaW5ncy5zaXplKCkpIHsKLSAgICAgICAgYXV0byYg
bGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7Ci0gICAgICAgIGlmIChQQUw6OkNN
VGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWluZy5kdXJhdGlvbiwgbGFzdFRpbWlu
Zy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRpb25UaW1lKSkgewotICAgICAgICAg
ICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1pdCB0aGUgcHJldmlvdXNseSBkZW11
eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRh
ZGF0YSwgYnl0ZXNSZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQog
ICAgICAgICByZXR1cm4gc3RhdHVzOwogCi0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgp
KQotICAgICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOwor
ICAgIG1fbGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247CiAKICAgICBpZiAoIWZvcm1h
dERlc2NyaXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3ByaXZhdGUuaXNf
cHJlc2VudCgpKSB7CkBAIC0xMzUzLDE5ICsxMTIzLDE4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpS
ZWFkCiAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9y
bWF0RGVzY3JpcHRpb247CisgICAgICAgIFJlZlB0cjxBdWRpb0luZm8+IGZvcm1hdERlc2NyaXB0
aW9uOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0ZS52
YWx1ZSgpOwogICAgICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZvcmJpcykKLSAgICAg
ICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbihwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSk7CisgICAgICAgICAg
ICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyhwcml2YXRlRGF0YS5z
aXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNvZGVjKCkgPT0g
Q29kZWNUeXBlOjpPcHVzKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBj
b250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCAq
bV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVy
ID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwga09wdXNNaW5pbXVtRnJhbWVEYXRh
U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsKICAgICAgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3Vt
ZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBj
b250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAgICAgICAgICAgICBPcHVzQ29va2llQ29udGVudHMg
Y29va2llQ29udGVudHM7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlT3B1c1ByaXZhdGVEYXRhKHBy
aXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCAqbV9jb21wbGV0ZVBhY2tldFNp
emUsIGJsb2NrQnVmZmVyRGF0YSwgY29va2llQ29udGVudHMpKSB7CisgICAgICAgICAgICBpZiAo
IXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0
YSgpLCBjb250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKSwg
Y29va2llQ29udGVudHMpKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSgiRmFpbGVkIHRvIHBhcnNlIE9wdXMgcHJpdmF0ZSBkYXRhIik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICAgICAg
fQpAQCAtMTM3NSwzNSArMTE0NCwyOSBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgbV9mcmFtZXNQZXJQYWNrZXQgPSBjb29raWVDb250ZW50cy5m
cmFtZXNQZXJQYWNrZXQ7CiAgICAgICAgICAgICBtX2ZyYW1lRHVyYXRpb24gPSBjb29raWVDb250
ZW50cy5mcmFtZUR1cmF0aW9uOwotICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVh
dGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb29raWVDb250ZW50cyk7CisgICAgICAgICAg
ICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29va2llQ29udGVudHMp
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewotICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIGNyZWF0ZSBmb3Jt
YXQgZGVzY3JpcHRpb24gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIiKTsKKyAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgQXVkaW9JbmZvIGZy
b20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CiAgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVy
LCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHN0cmVhbURlc2Ny
aXB0aW9uID0gUEFMOjpDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLmdldCgpKTsKLSAgICAgICAgaWYgKCFzdHJlYW1EZXNj
cmlwdGlvbikgewotICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmYWlsZWQiKTsK
LSAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAg
ICAgfQotICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gUEFMOjpDTVRpbWVNYWtlKHN0cmVhbURl
c2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0LCBzdHJlYW1EZXNjcmlwdGlvbi0+bVNhbXBsZVJh
dGUpOworICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gTWVkaWFUaW1lKGZvcm1hdERlc2NyaXB0
aW9uLT5mcmFtZXNQZXJQYWNrZXQsIGZvcm1hdERlc2NyaXB0aW9uLT5yYXRlKTsKIAotICAgICAg
ICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7CisgICAg
ICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6Ok9wdXMpIHsKICAgICAg
ICAgLy8gT3B1cyB0ZWNobmljYWxseSBhbGxvd3MgdGhlIGZyYW1lIGR1cmF0aW9uIGFuZCBmcmFt
ZXMtcGVyLXBhY2tldCB2YWx1ZXMgdG8gY2hhbmdlIGZyb20gcGFja2V0IHRvIHBhY2tldC4KICAg
ICAgICAgLy8gQ29yZUF1ZGlvIGRvZXNuJ3Qgc3VwcG9ydCBBU0JEIHZhbHVlcyBsaWtlIHRoZXNl
IHRvIGNoYW5nZSBvbiBhIHBlci1wYWNrZXQgYmFzaXMsIHNvIHRocm93IGFuIGVycm9yIHdoZW4K
ICAgICAgICAgLy8gdGhhdCBraW5kIG9mIHZhcmlhYmlsaXR5IGlzIGVuY291bnRlcmVkLgogICAg
ICAgICBPcHVzQ29va2llQ29udGVudHMgY29va2llQ29udGVudHM7CiAgICAgICAgIGF1dG8mIHBy
aXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRlLnZhbHVlKCk7Ci0gICAgICAgIGF1dG8g
Y29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKG1fY3VycmVu
dFBhY2tldEJ5dGVPZmZzZXQsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7CisgICAgICAgIGF1dG8g
Y29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKDAsIGtPcHVz
TWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsK
ICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhOiB1bmFibGUgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0YSBibG9j
ayIpOwogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwog
ICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IGNvbnRp
Z3VvdXNCdWZmZXItPmRhdGEoKTsKLSAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShw
cml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRT
aXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKQorICAgICAgICBpZiAoIXBhcnNl
T3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpLCBj
b250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKSwgY29va2ll
Q29udGVudHMpCiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZXNQZXJQYWNrZXQg
IT0gbV9mcmFtZXNQZXJQYWNrZXQKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRzLmZyYW1l
RHVyYXRpb24gIT0gbV9mcmFtZUR1cmF0aW9uKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJPcHVzIGZyYW1lcy1wZXItcGFja2V0IGNoYW5nZWQgd2l0aGluIGEg
dHJhY2s7IGVycm9yIik7CkBAIC0xNDExLDQxICsxMTc0LDI4NSBAQCB3ZWJtOjpTdGF0dXMgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wYWNrZXRTaXplcy5hcHBlbmQoKm1f
Y29tcGxldGVQYWNrZXRTaXplKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsgbV9wYWNr
ZXREdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZSwgUEFMOjprQ01UaW1lSW52YWxpZCB9KTsKLSAg
ICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ICs9ICptX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAg
ICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIW1fY29tcGxl
dGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNl
dEluZm8oZm9ybWF0RGVzY3JpcHRpb24oKSk7CisgICAgZWxzZSBpZiAoZm9ybWF0RGVzY3JpcHRp
b24oKSAmJiAqZm9ybWF0RGVzY3JpcHRpb24oKSAhPSAqbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5p
bmZvKCkpCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAotICAgIGF1dG8gc2FtcGxl
RHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29uZHMoUEFMOjpDTVRpbWVTdWJ0cmFjdChwcmVz
ZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIFBBTDo6Q01UaW1lR2V0
U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNhbXBsZUNvdW50OworICAgIG1fY29tcGxldGVN
ZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lOjppbnZhbGlk
VGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5v
bk51bGwoKSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgfSk7CiAKLSAgICBpZiAo
c2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24pCi0gICAgICAgIGRyYWlu
UGVuZGluZ1NhbXBsZXMoKTsKKyAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKICAgICBBU1NF
UlQoISpieXRlc1JlbWFpbmluZyk7CiAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0
dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1
c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKKworYm9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRlZFZp
ZGVvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQogewotICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3Ry
YWNrcykgewotICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pCi0gICAgICAgICAgICB0cmFjay0+ZHJh
aW5QZW5kaW5nU2FtcGxlcygpOworICAgIHJldHVybiBuYW1lID09ICJWX1ZQOCIgfHwgbmFtZSA9
PSAiVl9WUDkiOworfQorCitib29sIFdlYk1QYXJzZXI6OmlzU3VwcG9ydGVkQXVkaW9Db2RlYyhT
dHJpbmdWaWV3IG5hbWUpCit7CisgICAgcmV0dXJuIG5hbWUgPT0gIkFfVk9SQklTIiB8fCBuYW1l
ID09ICJBX09QVVMiOworfQorCitTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNKCkKKyAgICA6IG1fcGFyc2VyKCp0aGlzKQoreworfQorCitib29sIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpCit7CisgICAgcmV0
dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6d2ViTUZvcm1hdFJlYWRlckVuYWJsZWQo
KSAmJiBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkgJiYgaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCk7Cit9
CisKK01lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
Ojppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQoreworI2lm
IEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQorICAgIGlmICgh
aXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1z
OjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYXV0byBjb250YWluZXJUeXBl
ID0gdHlwZS5jb250YWluZXJUeXBlKCk7CisgICAgYm9vbCBpc0F1ZGlvQ29udGFpbmVyVHlwZSA9
IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgImF1ZGlvL3dlYm0iKTsKKyAg
ICBib29sIGlzVmlkZW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250
YWluZXJUeXBlLCAidmlkZW8vd2VibSIpOworICAgIGlmICghaXNBdWRpb0NvbnRhaW5lclR5cGUg
JiYgIWlzVmlkZW9Db250YWluZXJUeXBlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGJvb2wgaXNBbnlBdWRpb0Nv
ZGVjQXZhaWxhYmxlID0gZmFsc2U7CisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICBpc0FueUF1ZGlv
Q29kZWNBdmFpbGFibGUgfD0gaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoT1BVUykKKyAgICBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNPcHVzRGVj
b2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisKKyAgICBpZiAoaXNBdWRpb0NvbnRhaW5lclR5cGUg
JiYgIWlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVy
RW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBib29sIGlzQW55Q29k
ZWNBdmFpbGFibGUgPSBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGU7CisjaWYgRU5BQkxFKFZQOSkK
KyAgICBpc0FueUNvZGVjQXZhaWxhYmxlIHw9IGlzVlA5RGVjb2RlckF2YWlsYWJsZSgpOworI2Vu
ZGlmCisKKyAgICBpZiAoIWlzQW55Q29kZWNBdmFpbGFibGUpCisgICAgICAgIHJldHVybiBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYXV0byBj
b2RlY3MgPSB0eXBlLmNvZGVjcygpOworICAgIGlmIChjb2RlY3MuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpNYXlCZVN1cHBvcnRlZDsK
KworICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKKyNpZiBFTkFCTEUoVlA5KQorICAg
ICAgICBpZiAoY29kZWMuc3RhcnRzV2l0aCgidnAwOSIpIHx8IGNvZGVjLnN0YXJ0c1dpdGgoInZw
MDgiKSB8fCBlcXVhbChjb2RlYywgInZwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA5IikpIHsKKwor
ICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
KworICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0
ZXJzKGNvZGVjKTsKKyAgICAgICAgICAgIGlmICghY29kZWNQYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOworCisgICAgICAgICAgICBpZiAoIWlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBw
b3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZQOSkKKworI2lmIEVOQUJMRShW
T1JCSVMpCisgICAgICAgIGlmIChjb2RlYyA9PSAidm9yYmlzIikgeworICAgICAgICAgICAgaWYg
KCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKQorCisjaWYg
RU5BQkxFKE9QVVMpCisgICAgICAgIGlmIChjb2RlYyA9PSAib3B1cyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShPUFVTKQorCisgICAg
ICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVk
OwogICAgIH0KKworICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
U3VwcG9ydGVkOworCisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKworICAgIHJldHVy
biBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworI2VuZGlm
IC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVTKQogfQogCi12
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0IGR1cmF0aW9uKQorUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKIHsKLSAgICBt
X21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uID0gZHVyYXRpb247CisgICAgaWYgKGlzQ29udGVu
dFR5cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJ
c05vdFN1cHBvcnRlZCkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNKCkpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit2b2lk
IFdlYk1QYXJzZXI6OnByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVz
LCB1aW50NjRfdCBwb3NpdGlvbikKIHsKLSAgICByZXR1cm4gbmFtZSA9PSAiVl9WUDgiIHx8IG5h
bWUgPT0gIlZfVlA5IjsKKyAgICBtX2NhbGxiYWNrLnBhcnNlZE1lZGlhRGF0YShXVEZNb3ZlKHNh
bXBsZXMpLCBwb3NpdGlvbik7CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNT
dXBwb3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK3ZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6cGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKEluaXRpYWxpemF0aW9uU2VnbWVudCYm
IGluaXRpYWxpemF0aW9uU2VnbWVudCkKIHsKLSAgICByZXR1cm4gbmFtZSA9PSAiQV9WT1JCSVMi
IHx8IG5hbWUgPT0gIkFfT1BVUyI7CisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhb
dGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGluaXRpYWxpemF0aW9uU2VnbWVu
dCA9IFdURk1vdmUoaW5pdGlhbGl6YXRpb25TZWdtZW50KV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjaykKKyAgICAgICAgICAgIG1f
ZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjayhXVEZNb3ZlKGluaXRpYWxpemF0aW9u
U2VnbWVudCkpOworICAgIH0pOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBh
cnNlZE1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmIHNhbXBsZXNCbG9jaywgdWludDY0X3Qg
cG9zaXRpb24pCit7CisgICAgaWYgKCFzYW1wbGVzQmxvY2suaW5mbygpKSB7CisgICAgICAgIEVS
Uk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiTm8gVHJhY2tJbmZvIHNldCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOworICAgIGlmIChzYW1wbGVzQmxvY2suaXNWaWRlbygp
KSB7CisgICAgICAgIGlmIChtX3ZpZGVvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygpKSB7Cisg
ICAgICAgICAgICBtX3ZpZGVvSW5mbyA9IHNhbXBsZXNCbG9jay5pbmZvKCk7CisgICAgICAgICAg
ICBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21U
cmFja0luZm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICB9CisgICAgICAgIGZvcm1h
dERlc2NyaXB0aW9uID0gbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChtX2F1ZGlvSW5mbyAhPSBzYW1wbGVzQmxvY2suaW5mbygpKSB7CisgICAgICAg
ICAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKKyAgICAgICAgICAgIG1fYXVkaW9Gb3Jt
YXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbygqc2Ft
cGxlc0Jsb2NrLmluZm8oKSk7CisgICAgICAgICAgICBtX2F1ZGlvSW5mbyA9IHNhbXBsZXNCbG9j
ay5pbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBtX2F1ZGlv
Rm9ybWF0RGVzY3JpcHRpb247CisgICAgfQorCisgICAgaWYgKHNhbXBsZXNCbG9jay5pc1ZpZGVv
KCkpIHsKKyAgICAgICAgcmV0dXJuU2FtcGxlcyhXVEZNb3ZlKHNhbXBsZXNCbG9jayksIG1fdmlk
ZW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgcG9zaXRpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gUGFjayBhdWRpbyBpZiBuZWVkZWQuCisgICAgaWYgKG1fcXVldWVkQXVk
aW9TYW1wbGVzLnNpemUoKSkgeworICAgICAgICBhdXRvJiBsYXN0U2FtcGxlID0gbV9xdWV1ZWRB
dWRpb1NhbXBsZXMubGFzdCgpOworICAgICAgICBpZiAobGFzdFNhbXBsZS5kdXJhdGlvbiArIGxh
c3RTYW1wbGUucHJlc2VudGF0aW9uVGltZSAhPSBzYW1wbGVzQmxvY2suZmlyc3QoKS5wcmVzZW50
YXRpb25UaW1lKQorICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHBvc2l0aW9u
KTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBzYW1wbGUgOiBzYW1wbGVzQmxvY2spCisgICAgICAg
IG1fcXVldWVkQXVkaW9EdXJhdGlvbiArPSBzYW1wbGUuZHVyYXRpb247CisgICAgbV9xdWV1ZWRB
dWRpb1NhbXBsZXMuYXBwZW5kKFdURk1vdmUoc2FtcGxlc0Jsb2NrKSk7CisgICAgaWYgKG1fcXVl
dWVkQXVkaW9EdXJhdGlvbiA8IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pCisgICAgICAg
IHJldHVybjsKKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMocG9zaXRpb24pOworfQorCit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxv
Y2smJiBibG9jaywgQ01Gb3JtYXREZXNjcmlwdGlvblJlZiBkZXNjcmlwdGlvbiwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gcG9zaXRpb24pCit7CisgICAgaWYgKGJsb2NrLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBzYW1wbGVCdWZmZXIgPSB0b0NNU2FtcGxlQnVmZmVy
KFdURk1vdmUoYmxvY2spLCBkZXNjcmlwdGlvbik7CisgICAgaWYgKCFzYW1wbGVCdWZmZXIpIHsK
KyAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJDb3VsZG4ndCBj
cmVhdGUgQ01TYW1wbGVCdWZmZXIgZnJvbSBNZWRpYVNhbXBsZXNCbG9jayIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQgPSBibG9jay5pbmZvKCktPnRy
YWNrSUQsIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgcG9zaXRpb25dICgp
IG11dGFibGUgeworICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNh
bXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOworICAgICAg
ICBpZiAocG9zaXRpb24pCisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zm
c2V0KCpwb3NpdGlvbik7CisKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2so
V1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0pOwor
fQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZFRyaW1taW5nRGF0YSh1aW50
NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIHBhZGRpbmcpCit7CisgICAgbV9jYWxsT25D
bGllbnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0s
IHRyYWNrSUQsIHBhZGRpbmddICgpIHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0Rh
dGFDYWxsYmFjaykKKyAgICAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0
cmFja0lELCBwYWRkaW5nKTsKKyAgICB9KTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVmPFNo
YXJlZEJ1ZmZlcj4mJiBrZXlJRCwgdWludDY0X3QgdHJhY2tJRCkKK3sKKyAgICBpZiAobV9kaWRQ
cm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJh
Y2spCisgICAgICAgIG1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRENhbGxiYWNrKFdURk1vdmUoa2V5SUQpLCB0cmFja0lEKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4gcG9zaXRpb24pCit7CisgICAgaWYgKCFtX2F1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9hdWRpb0luZm8pOworICAg
IG1fcXVldWVkQXVkaW9TYW1wbGVzLnNldEluZm8obV9hdWRpb0luZm8uY29weVJlZigpKTsKKyAg
ICByZXR1cm5TYW1wbGVzKFdURk1vdmUobV9xdWV1ZWRBdWRpb1NhbXBsZXMpLCBtX2F1ZGlvRm9y
bWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9uKTsKKworICAgIG1fcXVldWVkQXVkaW9TYW1w
bGVzID0geyB9OworICAgIG1fcXVldWVkQXVkaW9EdXJhdGlvbiA9IHsgfTsKK30KKwordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKFNlZ21lbnQmJiBzZWdtZW50LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIsIEFwcGVuZEZsYWdzIGFw
cGVuZEZsYWdzKQoreworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJm
bGFncygiLCBhcHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSA/ICJEaXNj
b250aW51aXR5IiA6ICIiLCAiKSwgc2l6ZSgiLCBzZWdtZW50LnNpemUoKSwgIikiKTsKKworICAg
IGlmIChhcHBlbmRGbGFncyA9PSBBcHBlbmRGbGFnczo6RGlzY29udGludWl0eSkKKyAgICAgICAg
bV9wYXJzZXIucmVzZXQoKTsKKworICAgIGlmIChpbnQgY29kZSA9IG1fcGFyc2VyLnBhcnNlKFdU
Rk1vdmUoc2VnbWVudCkpKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSLCAic3RhdHVzLmNvZGUoIiwgY29kZSwgIikiKTsKKyAgICAgICAgbV9jYWxsT25DbGll
bnRUaHJlYWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNv
ZGVdIHsKKyAgICAgICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0Nh
bGxiYWNrKQorICAgICAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5n
Q2FsbGJhY2soY29kZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICAvLyBBdWRpbyB0cmFja3Mg
YXJlIGdyb3VwZWQgaW50byBtZXRhLXNhbXBsZXMgb2YgYSBkdXJhdGlvbiBubyBtb3JlIHRoYW4g
bV9taW5pbXVtU2FtcGxlRHVyYXRpb24uCisgICAgLy8gQnV0IGF0IHRoZSBlbmQgb2YgYSBmaWxl
LCBubyBtb3JlIGF1ZGlvIGRhdGEgbWF5IGJlIGluY29taW5nLCBzbyBmbHVzaCBhbmQgZW1pdCBh
bnkgcGVuZGluZworICAgIC8vIGF1ZGlvIGJ1ZmZlcnMuCisgICAgZmx1c2hQZW5kaW5nQXVkaW9T
YW1wbGVzKCk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ01lZGlhRGF0YSgpCit7Cit9CisKK3ZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQo
Ym9vbCwgdWludDY0X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50
NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppbnZhbGlkYXRlKCkKK3sKKyAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKKyAgICBtX3BhcnNlci5pbnZhbGlkYXRlKCk7
Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TG9nZ2VyKGNvbnN0IExvZ2dl
ciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKQoreworICAgIG1fcGFyc2VyLnNl
dExvZ2dlcihsb2dnZXIsIGxvZ0lkZW50aWZpZXIpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0IGR1cmF0aW9uKQor
eworICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBNZWRpYVRpbWU6OmNyZWF0ZVdp
dGhGbG9hdChkdXJhdGlvbik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApp
bmRleCBhZmRiZjQ5YjJmNDY5MjE2ZTFiOWRmN2VkMTgyMWIzYWEyMjc3ZjlhLi45ODgyMzQzMzdi
NjQwNjljMDZjYzgxMjZjOWM0ZWJmNmYzZjVkNGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5oCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNp
bmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKICNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1
ZGlvVHlwZXMuaD4KLSNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CiAjaW5jbHVkZSA8cGFs
L3NwaS9jZi9Db3JlTWVkaWFTUEkuaD4KICNpbmNsdWRlIDx2YXJpYW50PgogI2luY2x1ZGUgPHdl
Ym0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJtL3N0YXR1cy5oPgogI2luY2x1ZGUgPHdlYm0v
dnA5X2hlYWRlcl9wYXJzZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CiAjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDcsNDIg
KzQ3LDM2IEBAIGNsYXNzIFdlYm1QYXJzZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJzZXIsIHBy
aXZhdGUgd2VibTo6Q2FsbGJhY2sgeworY2xhc3MgV2ViTVBhcnNlciA6IHByaXZhdGUgd2VibTo6
Q2FsbGJhY2sgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGNs
YXNzIFNlZ21lbnRSZWFkZXI7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1dlYk1Gb3JtYXRSZWFkZXJB
dmFpbGFibGUoKTsKLSAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlz
Q29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKLSAgICBzdGF0aWMgU3Bh
bjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1JTUVUeXBlcygpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0
IENvbnRlbnRUeXBlJik7CisgICAgY2xhc3MgQ2FsbGJhY2sgeworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRU
cmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYpIHsgfQorICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5p
dGlhbGl6YXRpb25TZWdtZW50JiYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlZE1l
ZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCkgPSAwOworICAgICAgICB2aXJ0
dWFsIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZp
cnR1YWwgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQo
UmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIHsgfQorICAgICAgICB2aXJ0dWFsIH5DYWxs
YmFjaygpID0gZGVmYXVsdDsKKyAgICB9OwogCi0gICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgp
OwotICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CisgICAgV2ViTVBhcnNlcihDYWxsYmFj
ayYpOworICAgIH5XZWJNUGFyc2VyKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgp
OworICAgIGNsYXNzIFNlZ21lbnRSZWFkZXI7CiAKKyAgICBpbnQgcGFyc2UoU291cmNlQnVmZmVy
UGFyc2VyOjpTZWdtZW50JiYpOworICAgIHZvaWQgcmVzZXRTdGF0ZSgpOworICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICBjb25zdCB3ZWJtOjpTdGF0dXMmIHN0
YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAKLSAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBUeXBlOjpXZWJNOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmRE
YXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBl
bmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKLSAgICB2b2lkIGZsdXNoUGVuZGlu
Z01lZGlhRGF0YSgpIGZpbmFsOwotICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZv
clRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOwotICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1l
ZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFsOwotICAgIHZvaWQgcmVzZXRQYXJzZXJT
dGF0ZSgpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZpbmFsOworICAgIHZvaWQgcHJv
dmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9jayYmLCB1aW50NjRfdCk7CiAKLSAgICB2b2lk
IGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwotICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2Ft
cGxlRHVyYXRpb24oZmxvYXQpOwotICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9n
Z2VyKGNvbnN0IExvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOwotCi0gICAg
dm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIHVpbnQ2
NF90LCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJhbmdlT2Zmc2V0KTsKLSAgICB1c2luZyBE
aWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVuY3Rpb248dm9pZCh1aW50NjRfdCB0cmFj
a0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRkaW5nKT47Ci0gICAgdm9pZCBzZXREaWRQ
YXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2smJiBj
YWxsYmFjaykKLSAgICB7Ci0gICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOwotICAgIH0KKyAgICB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dn
ZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKTsKKyAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0
cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qgdm9pZCogbG9n
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQogCiAgICAgZW51
bSBjbGFzcyBFcnJvckNvZGUgOiBpbnQzMl90IHsKICAgICAgICAgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTUVycm9yQ29kZVN0YXJ0ID0gMjAwMCwKQEAgLTEyMCwxOCArMTE0LDEyIEBAIHB1YmxpYzoK
ICAgICBjbGFzcyBUcmFja0RhdGEgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNU
eXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBh
dXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4oY29k
ZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJzZXIpOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRy
YWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duLCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgICAgIFVua25vd24sCi0gICAgICAgICAgICBB
dWRpbywKLSAgICAgICAgICAgIFZpZGVvLAotICAgICAgICB9OwotCi0gICAgICAgIFRyYWNrRGF0
YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQorICAgICAg
ICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tUeXBlLCBXZWJNUGFyc2VyJiBw
YXJzZXIpCiAgICAgICAgICAgICA6IG1fY29kZWMgeyBjb2RlY1R5cGUgfQogICAgICAgICAgICAg
LCBtX3RyYWNrIHsgd2VibTo6VHJhY2tFbnRyeSB7IHRyYWNrRW50cnkgfSB9CiAgICAgICAgICAg
ICAsIG1fdHJhY2tUeXBlIHsgdHJhY2tUeXBlIH0KQEAgLTE0MiwxNCArMTMwLDE4IEBAIHB1Ymxp
YzoKIAogICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVjOyB9
CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQot
ICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBlOyB9Cisg
ICAgICAgIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhY2tUeXBlOyB9CiAKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGZvcm1hdERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbjsgfQotICAg
ICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiYmIGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRl
c2NyaXB0aW9uKTsgfQorICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBmb3JtYXREZXNjcmlwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb24uY29weVJlZigpOyB9CisgICAg
ICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRyYWNrSW5mbz4mJiBkZXNjcmlwdGlv
bikKKyAgICAgICAgeworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdURk1vdmUo
ZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbi0+dHJhY2tJRCA9
IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgICAgIH0KIAotICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlcjsgfQorICAg
ICAgICBXZWJNUGFyc2VyJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlcjsgfQogCi0g
ICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVy
JiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwg
aW50KQorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06
OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IE1l
ZGlhVGltZSYsIGludCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a0ludmFs
aWRFbGVtZW50SWQpOwpAQCAtMTU3LDExICsxNDksMTAgQEAgcHVibGljOgogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkKICAgICAgICAgewotICAgICAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVycy5yZXNldCgpOwotICAgICAgICAgICAgbV9wYWNr
ZXRTaXplcy5jbGVhcigpOwotICAgICAgICAgICAgbV9wYWNrZXRUaW1pbmdzLmNsZWFyKCk7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIG1f
Y29tcGxldGVCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgICAgICBtX2NvbXBsZXRlTWVk
aWFTYW1wbGVzID0geyB9OwogICAgICAgICB9CisKICAgICAgICAgdm9pZCByZXNldCgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKQEAgLTE3MCw1
MSArMTYxLDUwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyLnJl
c2V0KCk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhaW5QZW5kaW5nU2Ft
cGxlcyhzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0ID0gc3RkOjpu
dWxsb3B0KQorICAgICAgICB2b2lkIGRyYWluUGVuZGluZ1NhbXBsZXMoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobGF0ZXN0Qnl0ZVJhbmdlT2Zmc2V0KTsKKyAg
ICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlkZU1lZGlhRGF0YShXVEZN
b3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpLCBtX2xhc3RQb3NpdGlvbik7CiAgICAgICAgICAg
ICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSB7
IH07CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNvbnRpZ3VvdXNDb21wbGV0ZUJsb2Nr
QnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0OwogICAgICAgICB3ZWJt
OjpTdGF0dXMgcmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgU2hhcmVkQnVmZmVy
QnVpbGRlciBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPHNp
emVfdD4gbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgICAgIHNpemVfdCBtX2N1cnJlbnRQYWNr
ZXRCeXRlT2Zmc2V0IHsgMCB9OwotICAgICAgICBWZWN0b3I8c2l6ZV90PiBtX3BhY2tldFNpemVz
OwotICAgICAgICBWZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBtX3BhY2tldFRpbWluZ3M7Cisg
ICAgICAgIFJlZlB0cjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiBtX2NvbXBsZXRlQmxvY2tCdWZm
ZXI7CisgICAgICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fY29tcGxldGVNZWRpYVNhbXBsZXM7Cisg
ICAgICAgIHVpbnQ2NF90IG1fbGFzdFBvc2l0aW9uIHsgMCB9OwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFj
azsKLSAgICAgICAgVHlwZSBtX3RyYWNrVHlwZTsKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIGNvbnN0IFRyYWNr
SW5mbzo6VHJhY2tUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBt
X2Zvcm1hdERlc2NyaXB0aW9uOwogICAgICAgICBTaGFyZWRCdWZmZXJCdWlsZGVyIG1fY3VycmVu
dEJsb2NrQnVmZmVyOwotICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsK
KyAgICAgICAgV2ViTVBhcnNlciYgbV9wYXJzZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgY3VycmVu
dGx5IGluY29tcGxldGUgcGFyc2VkIHBhY2tldC4KICAgICAgICAgc2l6ZV90IG1fcGFydGlhbEJ5
dGVzUmVhZCB7IDAgfTsKICAgICB9OwogCiAgICAgY2xhc3MgVmlkZW9UcmFja0RhdGEgOiBwdWJs
aWMgVHJhY2tEYXRhIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShD
b2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0
YT4KKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0
IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5p
cXVlUmVmPFZpZGVvVHJhY2tEYXRhPgogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIp
OwogICAgICAgICB9CiAKLSAgICAgICAgVmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlw
ZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTSYgcGFyc2VyKQotICAgICAgICAgICAgOiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0Vu
dHJ5LCBUeXBlOjpWaWRlbywgcGFyc2VyKQorICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5
cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFy
c2VyJiBwYXJzZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50
cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpWaWRlbywgcGFyc2VyKQogICAgICAgICB7CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KLSAgICAgICAgd2VibTo6U3RhdHVz
IGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0
YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKLSAgICAgICAgdm9pZCBw
b3N0UHJvY2VzcyhDTVNhbXBsZUJ1ZmZlclJlZikgZmluYWw7CisgICAgICAgIHdlYm06OlN0YXR1
cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRh
dGEmLCB1aW50NjRfdCosIGNvbnN0IE1lZGlhVGltZSYsIGludCkgZmluYWw7CiAgICAgICAgIHZv
aWQgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpIGZpbmFsOworCiAjaWYgRU5BQkxFKFZQOSkK
ICAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFyc2VyOwogICAg
ICAgICBWZWN0b3I8Ym9vbD4gbV9rZXlGcmFtZXM7CkBAIC0yMjMsMzkgKzIxMywyOSBAQCBwdWJs
aWM6CiAKICAgICBjbGFzcyBBdWRpb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEgewogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUs
IGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKSAtPiBVbmlxdWVSZWY8QXVk
aW9UcmFja0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNU
eXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJz
ZXIpIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRy
eSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2Vy
KTsKICAgICAgICAgfQogCi0gICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5
cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAgICAgICAg
OiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OkF1ZGlvLCBwYXJzZXIg
fQotICAgICAgICAgICAgLCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IG1pbmltdW1TYW1wbGVE
dXJhdGlvbiB9CisgICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNv
bnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikKKyAg
ICAgICAgICAgIDogVHJhY2tEYXRhIHsgY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUcmFja0luZm86
OlRyYWNrVHlwZTo6QXVkaW8sIHBhcnNlciB9CiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVh
ZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1l
JiwgaW50KSBmaW5hbDsKKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3Qg
TWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKICAgICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1l
c1N0YXRlKCkgZmluYWw7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KIAotICAgICAgICBDTVRpbWUgbV9zYW1wbGVQ
cmVzZW50YXRpb25UaW1lOwotICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKKyAgICAg
ICAgTWVkaWFUaW1lIG1fcGFja2V0RHVyYXRpb247CiAgICAgICAgIHVpbnQ4X3QgbV9mcmFtZXNQ
ZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFtZUR1cmF0aW9uIHsgMF9zIH07
CiAgICAgICAgIHNpemVfdCBtTnVtRnJhbWVzSW5Db21wbGV0ZUJsb2NrIHsgMCB9OwotICAgICAg
ICAvLyBGSVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBiZXR0ZXIgZHVyYXRpb24gcGVyIHNh
bXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0IGxlYXN0IHRoZSBmaXJzdAotICAg
ICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRpbCB3ZSBmaXggTWVkaWFTYW1wbGVD
dXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBkZWFsIHdpdGggYGVuZEN1cnNvcmAuCi0gICAg
ICAgIGZsb2F0IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgMiB9OwogICAgIH07CiAKLSAgICBj
b25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9
Ci0gICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRl
bnRpZmllcjsgfQotCiBwcml2YXRlOgotCiAgICAgVHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFj
a051bWJlcih1aW50NjRfdCk7Ci0KICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZFZpZGVvQ29k
ZWMoU3RyaW5nVmlldyk7CiAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRBdWRpb0NvZGVjKFN0
cmluZ1ZpZXcpOwogCkBAIC0yNzUsNyArMjU1LDcgQEAgcHJpdmF0ZToKICAgICB3ZWJtOjpTdGF0
dXMgT25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IHdl
Ym06OkJsb2NrR3JvdXAmKTsKICAgICB3ZWJtOjpTdGF0dXMgT25GcmFtZShjb25zdCB3ZWJtOjpG
cmFtZU1ldGFkYXRhJiwgd2VibTo6UmVhZGVyKiwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKSBm
aW5hbDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbml0aWFsaXphdGlvblNlZ21lbnQ+IG1faW5p
dGlhbGl6YXRpb25TZWdtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VCdWZmZXJQYXJz
ZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudD4gbV9pbml0aWFsaXphdGlvblNlZ21lbnQ7CiAgICAg
VmVjdG9yPHN0ZDo6cGFpcjx1aW50NjRfdCwgUmVmPFNoYXJlZEJ1ZmZlcj4+PiBtX2tleUlkczsK
ICAgICB3ZWJtOjpTdGF0dXMgbV9zdGF0dXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPHdlYm06Oldl
Ym1QYXJzZXI+IG1fcGFyc2VyOwpAQCAtMjkyLDEyICsyNzIsNjggQEAgcHJpdmF0ZToKICAgICB1
c2luZyBCbG9ja1ZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8d2VibTo6QmxvY2ssIHdlYm06OlNpbXBs
ZUJsb2NrPjsKICAgICBzdGQ6Om9wdGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7
CiAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gbV9yZXdpbmRUb1Bvc2l0aW9uOwotICAgIGZs
b2F0IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyAyIH07CiAKICAgICBSZWZQdHI8Y29u
c3QgTG9nZ2VyPiBtX2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBu
dWxscHRyIH07CiAgICAgdWludDY0X3QgbV9uZXh0Q2hpbGRJZGVudGlmaWVyIHsgMCB9OworICAg
IENhbGxiYWNrJiBtX2NhbGxiYWNrOworfTsKKworY2xhc3MgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TSA6IHB1YmxpYyBTb3VyY2VCdWZmZXJQYXJzZXIsIFdlYk1QYXJzZXI6OkNhbGxiYWNrIHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpc1dl
Yk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlIGlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsK
KyAgICBzdGF0aWMgU3Bhbjxjb25zdCBBU0NJSUxpdGVyYWw+IHN1cHBvcnRlZE1JTUVUeXBlcygp
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2Vi
TT4gY3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJik7CisKKyAgICBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNKCk7CisgICAgflNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSA9IGRlZmF1bHQ7CisKKyAgICBz
dGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gVHlwZTo6V2ViTTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwZW5kRGF0YShTZWdt
ZW50JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSwgQXBwZW5kRmxhZ3Mg
PSBBcHBlbmRGbGFnczo6Tm9uZSkgZmluYWw7CisgICAgdm9pZCBmbHVzaFBlbmRpbmdNZWRpYURh
dGEoKSBmaW5hbDsKKyAgICB2b2lkIHNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lE
KGJvb2wsIHVpbnQ2NF90KSBmaW5hbDsKKyAgICBib29sIHNob3VsZFByb3ZpZGVNZWRpYWRhdGFG
b3JUcmFja0lEKHVpbnQ2NF90KSBmaW5hbDsKKyAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKSBm
aW5hbCB7IG1fcGFyc2VyLnJlc2V0U3RhdGUoKTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZp
bmFsOworCisgICAgdXNpbmcgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IEZ1bmN0aW9u
PHZvaWQodWludDY0X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBkaXNjYXJkUGFkZGluZyk+
OworICAgIHZvaWQgc2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayhEaWRQYXJzZVRyaW1t
aW5nRGF0YUNhbGxiYWNrJiYgY2FsbGJhY2spCisgICAgeworICAgICAgICBtX2RpZFBhcnNlVHJp
bW1pbmdEYXRhQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICB2b2lk
IGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiA9IHN0ZDo6
bnVsbG9wdCk7CisgICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCk7
CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiwg
Y29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7CisgICAgY29uc3QgTG9nZ2VyKiBsb2dnZXJQ
dHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZvaWQqIGxv
Z0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KKworcHJpdmF0
ZToKKyAgICAvLyBXZWJNUGFyc2VyOjpDYWxsYmFjaworICAgIHZvaWQgcGFyc2VkSW5pdGlhbGl6
YXRpb25EYXRhKFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50JiYpIGZp
bmFsOworICAgIHZvaWQgcGFyc2VkTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2
NF90KSBmaW5hbDsKKyAgICBib29sIGNhbkRlY3J5cHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAh
IW1fZGlkUHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJ
RENhbGxiYWNrOyB9CisgICAgdm9pZCBjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0
YUZvclRyYWNrSUQoUmVmPFNoYXJlZEJ1ZmZlcj4mJiwgdWludDY0X3QpIGZpbmFsOworICAgIHZv
aWQgcGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsK
KyAgICAKKyAgICB2b2lkIHJldHVyblNhbXBsZXMoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3Jt
YXREZXNjcmlwdGlvblJlZiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4pOworCiAgICAgRGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjayBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2s7Cisg
ICAgV2ViTVBhcnNlciBtX3BhcnNlcjsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOworICAgIFJlZlB0cjxjb25zdCBUcmFja0lu
Zm8+IG1fYXVkaW9JbmZvOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBt
X3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV92
aWRlb0luZm87CisgICAgTWVkaWFUaW1lIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyA5
NjAwMCwgNDgwMDAgfTsKKyAgICBNZWRpYVNhbXBsZXNCbG9jayBtX3F1ZXVlZEF1ZGlvU2FtcGxl
czsKKyAgICBNZWRpYVRpbWUgbV9xdWV1ZWRBdWRpb0R1cmF0aW9uOworICAgIFJlZlB0cjxjb25z
dCBMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51
bGxwdHIgfTsKIH07CiAKIH0KQEAgLTMwNiwxMiArMzQyLDEyIEBAIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSkKICAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyJiBwYXJzZXIpIHsg
cmV0dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpUeXBl
OjpXZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGEpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJh
Y2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpU
eXBlOjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXZWJN
UGFyc2VyOjpWaWRlb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0
YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrVHlwZTo6VmlkZW87IH0K
IFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9
PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlv
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1
ZGlvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXZWJN
UGFyc2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlw
ZSgpID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbzsgfQogU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19FTkQoKQogCiAjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NPVVJDRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxp
dGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlV
dGlsaXRpZXNDb2NvYS5oCmluZGV4IDk1NDRkOWMyNTdmZTBiZDU1ODI4MDNhZTFhODA4NDUwMTcz
YzUwYjUuLmQwMDQxYmY4OWIzMGMyY2M2MTg3OTA4ZjRiZTc2YTNhYmZmNDI2NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EuaApAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgIlZQOVV0aWxpdGllcy5o
IgogI2luY2x1ZGUgPHdlYm0vZG9tX3R5cGVzLmg+CiAKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9w
YXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7Ci0KIG5hbWVz
cGFjZSB2cDlfcGFyc2VyIHsKIGNsYXNzIFZwOUhlYWRlclBhcnNlcjsKIH0KQEAgLTQwLDYgKzM4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgTWVkaWFDYXBhYmlsaXRpZXNJbmZv
Owogc3RydWN0IFZpZGVvQ29uZmlndXJhdGlvbjsKK3N0cnVjdCBWaWRlb0luZm87CiAKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDlEZWNvZGVyKCk7CiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlZ2lzdGVyV2ViS2l0VlA4RGVjb2RlcigpOwpAQCAtNTAsNyArNDksNyBAQCBib29s
IGlzVlA4RGVjb2RlckF2YWlsYWJsZSgpOwogYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkU3VwcG9ydGVkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJik7CiBzdGQ6Om9w
dGlvbmFsPE1lZGlhQ2FwYWJpbGl0aWVzSW5mbz4gdmFsaWRhdGVWUFBhcmFtZXRlcnMoY29uc3Qg
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKTsK
IAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0
aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIm
LCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKK1JlZjxWaWRlb0luZm8+IGNy
ZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVh
ZGVyUGFyc2VyJiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKIHN0cnVj
dCBWUDhGcmFtZUhlYWRlciB7CiAgICAgYm9vbCBrZXlmcmFtZSB7IGZhbHNlIH07CkBAIC02Niw3
ICs2NSw3IEBAIHN0cnVjdCBWUDhGcmFtZUhlYWRlciB7CiB9OwogCiBzdGQ6Om9wdGlvbmFsPFZQ
OEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZyYW1lRGF0
YSwgc2l6ZV90IGZyYW1lU2l6ZSk7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVy
JiwgY29uc3Qgd2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CitSZWY8VmlkZW9JbmZvPiBj
cmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiwgY29uc3Qg
d2VibTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CiAKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFZQ
OVRlc3RpbmdPdmVycmlkZXMgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBk
ZDE3NzlmMjYzODkyNjk1OTQ0ZjQyMzc2ZmNkYWU1YjZkMzBiMjZjLi5jZjhjOWIyMTI4YzAxNDhk
NWE5MGQ5ZDUxNTZkZjY5ZjRhMGZiZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAtMzEs
MTEgKzMxLDEyIEBACiAjaW1wb3J0ICJGb3VyQ0MuaCIKICNpbXBvcnQgIkxpYldlYlJUQ1Byb3Zp
ZGVyLmgiCiAjaW1wb3J0ICJNZWRpYUNhcGFiaWxpdGllc0luZm8uaCIKKyNpbXBvcnQgIk1lZGlh
U2FtcGxlLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAiU2NyZWVuUHJv
cGVydGllcy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJTeXN0ZW1CYXR0
ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRpb24uaCIKLSNpbXBvcnQgPENvcmVNZWRp
YS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmll
dy5oPgogI2ltcG9ydCA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgpAQCAtMzUwLDI1ICszNTEsMzUgQEAgc3Rh
dGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2Vm
ZmljaWVudHMpCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xv
clByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvQ29sb3JQ
cmltYXJpZXMgY29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJp
bWFyaWVzKQogewogICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7CiAgICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1
ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQ
cmltYXJpZXM6OkJ0NDcwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmll
czo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82
MDFfNzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUx
NzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0
MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsK
KyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUyNDBtOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG06CisgICAgICAgIHJl
dHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkZpbG07CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0MjAyMDsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMToKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVTdDQyODE7CiAgICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI6Ci0gICAg
ICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1Az
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMx
OwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8x
OgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVz
X1AzX0Q2NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIw
X05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVz
Y3JpcHRpb25Db2xvclByaW1hcmllc19JVFVfUl8yMDIwOworICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnM7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CiAg
ICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNvbnZlcnRU
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBj
aGFyYWN0ZXJpc3RpY3MpCkBAIC00MTEsMjkgKzQyMiw0NSBAQCBzdGF0aWMgdWludDhfdCBjb252
ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyYgYwogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJG
dW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3MgY29udmVydFRvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQogewogICAgIHN3aXRjaCAoY2hhcmFj
dGVyaXN0aWNzKSB7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVu
Y3Rpb25fSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X006CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjJjdXJ2ZTsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyOGN1cnZlOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYwMV83
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpT
bXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1
bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgotICAgICAgICByZXR1cm4gUEFMOjprQ01G
b3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUyNDBt
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVh
cjoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
TGluZWFyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkxvZ3JpdGhtaWM6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkxvZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpMb2dyaXRobWljX1NxcnQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ1NxcnQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyNDsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYxXzA6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MTM2MUV4
dGVuZGVkQ29sb3VyR2FtdXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMTsKICAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ7CiAg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8x
MmJpdDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1
bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgorICAgICAgICByZXR1cm4gUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0MjA4NDsKICAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMToK
LSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X1NNUFRFX1NUXzQyOF8xOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExHOwotICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6
Ci0gICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0
aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3JlTWVkaWFfa0NNRm9ybWF0
RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxwdHI7Ci0gICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgotICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOwor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpBcmli
U3RkQjY3SGxnOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwogICAgIH0KLQotICAgIHJl
dHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmlj
aWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCkBAIC00NjIsMjEg
KzQ4OSwzMSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29u
c3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudAogICAgIH0KIH0KIAotc3RhdGljIENG
U3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCitz
dGF0aWMgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyBjb252ZXJ0VG9QbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzKHVpbnQ4X3QgY29lZmZpY2llbnRzKQogewogICAgIHN3aXRj
aCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmlj
aWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4gUEFM
OjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OklkZW50aXR5OgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6UmdiOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5OworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpGQ0M6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvTWF0cml4Q29lZmZpY2llbnRzOjpGY2M7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRl
b01hdHJpeENvZWZmaWNpZW50czo6QnQ0NzBiZzsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1h
dHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
cllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4
Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNi
Q3JNYXRyaXhfSVRVX1JfNzA5XzI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRl
b01hdHJpeENvZWZmaWNpZW50czo6U21wdGUyNDBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
TWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4
Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0
dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50THVt
aW5hbmNlOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8y
MDIwX0NvbnN0YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5hbmNlOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZp
ZWQ7CiAgICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNv
bnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRf
dCB5KQpAQCAtNDkxLDcgKzUyOCw3IEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGlu
Z1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQogICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9j
YXRlZDsKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChjb25zdCBW
UENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90
IGhlaWdodCkKK3N0YXRpYyBSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIHJl
Y29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQpCiB7CiAgICAgLy8gUmVmOiAiVlAg
Q29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRpbmcsIHYxLjAsIDIwMTctMDMtMzEiCiAg
ICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbXA0Lz4KQEAgLTUyMCwxMiAr
NTU3LDE0IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAgICAgLy8gRklYTUU6IENvbnZlcnQg
ZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3JpdGluZyBjb2Rl
IGJlbG93CiAgICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCiAKKyAgICBhdXRv
IHZpZGVvSW5mbyA9IFZpZGVvSW5mbzo6Y3JlYXRlKCk7CisgICAgdmlkZW9JbmZvLT5zaXplID0g
dmlkZW9JbmZvLT5kaXNwbGF5U2l6ZSA9IHsgZmxvYXQod2lkdGgpLCBmbG9hdChoZWlnaHQpIH07
CisKICAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXpl
ID0gMTI7CiAKICAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OwogICAgIHVp
bnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgpIDw8
IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJlY29y
ZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwogICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlvbkRh
dGFTaXplID0gMDsKLQogICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAxKSwgMCwg
VlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwogICAgIHZpZXctPnNldCgwLCB2ZXJz
aW9uQW5kRmxhZ3MsIGZhbHNlKTsKICAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2ZpbGUsIGZh
bHNlKTsKQEAgLTUzNSw0NiArNTc0LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpCiAgICAg
dmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOwogICAg
IHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CiAgICAgdmll
dy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOwotCi0gICAgYXV0
byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0
IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKLQotICAgIENGVHlw
ZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0gICAgQ0ZUeXBl
UmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1dG8gY29u
ZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZ
X0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIFZlY3RvcjxDRlR5
cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlwZVJl
Zj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKLQotICAg
IGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdlOjpG
dWxsUmFuZ2UpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKFBBTDo6a0NNRm9ybWF0
RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOwotICAgICAgICBleHRlbnNpb25z
VmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY21D
b2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJp
bWFyaWVzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJD
b2xvclByaW1hcmllc0tleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtQ29s
b3JQcmltYXJpZXMpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9
IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3MpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5z
ZmVyRnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5z
ZmVyRnVuY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVydFRv
Q01ZQ2JDUk1hdHJpeChyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKSkgewotICAgICAgICBleHRl
bnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7Ci0gICAgICAg
IGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKLSAgICB9Ci0KLSAgICBhdXRvIGV4
dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRlbnNp
b25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLQotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgQ01WaWRlb0NvZGVjVHlwZSBj
b2RlYyA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDkiID8ga0NNVmlkZW9Db2RlY1R5cGVfVlA5
IDogJ3ZwMDgnOwotICAgIGlmIChub0VyciAhPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29kZWMsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMu
Z2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICB2aWRlb0luZm8tPmF0b21E
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dWludDhfdCo+KHZpZXctPmRh
dGEoKSksIHZpZXctPmJ5dGVMZW5ndGgoKSk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLmZ1
bGxSYW5nZSA9IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9uUmFu
Z2U6OkZ1bGxSYW5nZTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UucHJpbWFyaWVzID0gY29u
dmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcyk7
CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnRyYW5zZmVyID0gY29udmVydFRvUGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyk7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLm1hdHJpeCA9IGNvbnZlcnRUb1BsYXRmb3Jt
VmlkZW9NYXRyaXhDb2VmZmljaWVudHMocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyk7CisgICAg
dmlkZW9JbmZvLT5jb2RlY05hbWUgPSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5IiA/ICd2cDA5
JyA6ICd2cDA4JzsKKyAgICByZXR1cm4gdmlkZW9JbmZvOwogfQogCi1SZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFy
c2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3ZWJt
OjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZv
RnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBh
cnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKIHsKICAgICBWUENvZGVj
Q29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAKQEAgLTYwNiw3ICs2MTUsNyBAQCBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5
SGVhZGVyUGFyc2VyKGNvbgogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChy
ZWNvcmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOwogfQogCiBzdGQ6Om9wdGlv
bmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZy
YW1lRGF0YSwgc2l6ZV90IGZyYW1lU2l6ZSkKQEAgLTY3MSw3ICs2ODAsNyBAQCBzdGQ6Om9wdGlv
bmFsPFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKGNvbnN0IHVpbnQ4X3QqIGZy
YW1lRGF0YSwgc2l6ZQogICAgIHJldHVybiBoZWFkZXI7CiB9CiAKLVJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29u
c3QgVlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBj
b2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoY29uc3Qg
VlA4RnJhbWVIZWFkZXImIGhlYWRlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xv
cikKIHsKICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CiAgICAgcmVjb3Jk
LmNvZGVjTmFtZSA9ICJ2cDA4IjsKQEAgLTcwMSw3ICs3MTAsNyBAQCBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKGNv
bnN0IFZQOAogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ29s
b3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkKHJlY29yZCwgaGVhZGVyLndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKKyAgICByZXR1cm4gY3Jl
YXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKHJlY29yZCwgaGVhZGVy
LndpZHRoLCBoZWFkZXIuaGVpZ2h0KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0Nv
Y29hLmgKaW5kZXggODcxMDRkOGI3YjM1N2MxNjBiNmRjY2M0MWJmZTFmODllMGE2YzI3MS4uYTk4
MDk4YzVhMzlmY2I0NTBiMmZmOWM3NjEwZDk3NGU4MjQ2ZDRkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9V
dGlsaXRpZXNDb2NvYS5oCkBAIC0yNywxNiArMjcsMTcgQEAKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQogCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IG9w
YXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorc3RydWN0IEF1ZGlvSW5mbzsKKwogV0VCQ09SRV9FWFBPUlQgYm9v
bCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVnaXN0
ZXJWb3JiaXNEZWNvZGVySWZOZWVkZWQoKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9u
UmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCwgY29uc3Qgdm9p
ZCopOworUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVkaW9JbmZvKHNpemVfdCwgY29u
c3Qgdm9pZCopOwogCiBzdHJ1Y3QgT3B1c0Nvb2tpZUNvbnRlbnRzIHsKICAgICB1aW50OF90IHZl
cnNpb24geyAwIH07CkBAIC01NSw4ICs1NiwxMCBAQCBzdHJ1Y3QgT3B1c0Nvb2tpZUNvbnRlbnRz
IHsKIAogV0VCQ09SRV9FWFBPUlQgYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7CiBXRUJD
T1JFX0VYUE9SVCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5lZWRlZCgpOworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3Qga09wdXNIZWFkZXJTaXplID0gMTk7CitzdGF0aWMgY29uc3RleHByIHNp
emVfdCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplID0gMjsKIGJvb2wgcGFyc2VPcHVzUHJpdmF0
ZURhdGEoc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEsIHNp
emVfdCBmcmFtZURhdGFTaXplLCBjb25zdCB2b2lkKiBmcmFtZURhdGEsIE9wdXNDb29raWVDb250
ZW50cyYpOwotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYpOworUmVmUHRyPEF1
ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25zdCBPcHVzQ29va2llQ29udGVudHMmKTsK
IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCmluZGV4IDdlMGFmYjI5MGRk
ODVhNzdmOWJlZmZmNDk0N2E0N2I3NTM1ZWIyZjQuLjY2MDlmNGFlYjY3YTJkZjY0MWYwNzJlNTgx
NjBmOWFmNWQzNmRmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCkBAIC0z
MCwxMiArMzAsMTMgQEAKIAogI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAj
aW1wb3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBsZS5oIgogI2ltcG9ydCAiTWVk
aWFVdGlsaXRpZXMuaCIKICNpbXBvcnQgIlBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgor
I2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Db2Rl
Yy5oPgogI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvQ29tcG9uZW50Lmg+CiAjaW1wb3J0IDxB
dWRpb1Rvb2xib3gvQXVkaW9Gb3JtYXQuaD4KLSNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERl
c2NyaXB0aW9uLmg+CiAjaW1wb3J0IDxkbGZjbi5oPgogI2ltcG9ydCA8d3RmL0ZsaXBCeXRlcy5o
PgogI2ltcG9ydCA8d3RmL1NlY29uZHMuaD4KQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIGJvb2wg
cmVnaXN0ZXJEZWNvZGVyRmFjdG9yeShjb25zdCBjaGFyKiBkZWNvZGVyTmFtZSwgT1NUeXBlIGRl
Y29kZXJUeXBlKQogI2VuZGlmCiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPU1R5cGUgZm9y
bWF0SUQsIFZlY3Rvcjx1aW50OF90PiYmIG1hZ2ljQ29va2llKQorc3RhdGljIFJlZlB0cjxBdWRp
b0luZm8+IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1
aW50OF90PiYmIG1hZ2ljQ29va2llKQogewogICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biBhc2JkIHsgfTsKICAgICBhc2JkLm1Gb3JtYXRJRCA9IGZvcm1hdElEOwpAQCAtODcsOCArODgs
MTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE8KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRh
dGEoKSk7CisgICAgYXV0byBhdWRpb0luZm8gPSBBdWRpb0luZm86OmNyZWF0ZSgpOworICAgIGF1
ZGlvSW5mby0+Y29kZWNOYW1lID0gZm9ybWF0SUQ7CisgICAgYXVkaW9JbmZvLT5yYXRlID0gYXNi
ZC5tU2FtcGxlUmF0ZTsKKyAgICBhdWRpb0luZm8tPmNoYW5uZWxzID0gYXNiZC5tQ2hhbm5lbHNQ
ZXJGcmFtZTsKKyAgICBhdWRpb0luZm8tPmZyYW1lc1BlclBhY2tldCA9IGFzYmQubUZyYW1lc1Bl
clBhY2tldDsKKyAgICBhdWRpb0luZm8tPmJpdERlcHRoID0gMTY7CisgICAgYXVkaW9JbmZvLT5j
b29raWVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShtYWdpY0Nvb2tpZSkpOwor
ICAgIHJldHVybiBhdWRpb0luZm87CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKSB8fCBF
TkFCTEUoT1BVUykKIAogI2lmIEVOQUJMRShPUFVTKQpAQCAtMjAwLDcgKzIwOSw3IEBAIGJvb2wg
cGFyc2VPcHVzUHJpdmF0ZURhdGEoc2l6ZV90IGNvZGVjUHJpdmF0ZVNpemUsIGNvbnN0IHZvaWQq
IGNvZGVjUHJpdmF0ZURhdGEsCiAKICAgICBhdXRvKiBwcml2YXRlRGF0YVB0ciA9IHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihjb2RlY1ByaXZhdGVEYXRhKTsKIAotICAgIGlmIChjb2RlY1By
aXZhdGVTaXplIDwgMTkpCisgICAgaWYgKGNvZGVjUHJpdmF0ZVNpemUgPCBrT3B1c0hlYWRlclNp
emUpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyAxLiBNYWdpYyBTaWduYXR1cmU6CkBA
IC0zNjIsNyArMzcxLDcgQEAgYm9vbCByZWdpc3Rlck9wdXNEZWNvZGVySWZOZWVkZWQoKQogI2Vu
ZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29udGVudHMmIGNvb2tpZUNvbnRl
bnRzKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlT3B1c0F1ZGlvSW5mbyhjb25zdCBPcHVzQ29v
a2llQ29udGVudHMmIGNvb2tpZUNvbnRlbnRzKQogewogI2lmIEVOQUJMRShPUFVTKQogICAgIGlm
ICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQpAQCAtMzcyLDcgKzM4MSw3IEBAIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlv
bihjb25zdCBPcHVzQ29vCiAgICAgaWYgKCFjb29raWVEYXRhLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZv
ckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOworICAgIHJldHVybiBjcmVhdGVB
dWRpb0luZm9Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGNvb2tpZUNvbnRlbnRzKTsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTQ2NSw3ICs0NzQsNyBAQCBib29sIHJlZ2lzdGVyVm9yYmlzRGVjb2RlcklmTmVlZGVkKCkKICNl
bmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlz
QXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lk
KiBwcml2YXRlRGF0YSkKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyhz
aXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkKIHsKICNpZiBF
TkFCTEUoVk9SQklTKQogICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCkBAIC00
NzUsNyArNDg0LDcgQEAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZVZv
cmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXYKICAgICBpZiAoIWNvb2tpZURh
dGEuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVB
dWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3JiJywgV1RGTW92ZShjb29raWVEYXRh
KSk7CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCgndm9yYicsIFdURk1vdmUo
Y29va2llRGF0YSkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGFTaXplKTsK
ICAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3Ry
ZWFtZXIuaAppbmRleCBmZjhjMWE4YjQ4MWQ3ZjMzY2MyNDdiNjRkZjFiOGZhYzcwY2JkZGQyLi4y
YjdkZDQ0NGM1M2QyZDZiZDA3YTliODM4ZDY3OWI2NGIzNzQ5YWY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFTYW1wbGVHU3RyZWFtZXIuaApAQCAtNTcsOCArNTcsNiBAQCBwdWJsaWM6CiAgICAgRmxvYXRT
aXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3ByZXNlbnRh
dGlvblNpemU7IH0KICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29u
c3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBs
ZT4sIFJlZlB0cjxNZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRU
aW1lKSBvdmVycmlkZSAgeyByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07IH0KICAgICBSZWY8
TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZsYWdzOyB9
CiAgICAgUGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1Nv
dXJjZUJ1ZmZlclByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggMGE5NGFjZjFhMWUxMzY2
ZjZhNTcyNTg4Yjc3MDQxZTRjM2M2NDczMi4uM2NmN2VlNjUzZWM4MTNkZmJhZTMzZWY5M2EwYzMz
ZmUyYzYzOTRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAg
LTY3LDggKzY3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
IG9mZnNldCkgb3ZlcnJpZGUgeyBtX2JveC5vZmZzZXRUaW1lc3RhbXBzQnkob2Zmc2V0KTsgfQog
ICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWVz
dGFtcCwgY29uc3QgTWVkaWFUaW1lJiBkZWNvZGVUaW1lc3RhbXApIG92ZXJyaWRlIHsgbV9ib3gu
c2V0VGltZXN0YW1wcyhwcmVzZW50YXRpb25UaW1lc3RhbXAsIGRlY29kZVRpbWVzdGFtcCk7IH0K
LSAgICBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
LSAgICBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4g
ZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpIG92ZXJyaWRlIHsgcmV0dXJuIHtu
dWxscHRyLCBudWxscHRyfTsgfQogICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHVuc2lnbmVkIGdlbmVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2JveC5nZW5lcmF0aW9uKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1w
bGVCeXRlUmFuZ2UuY3BwCmluZGV4IDc4ZjczMTM0Y2U2YTdhMjE0Y2RjOWRlMDVjNDc1MzcyZTE3
YzlhM2QuLjg5Yzc5MmZlNWQ0NWU0NTk4ODQxNDNmNTQ0MjkwMTZkNjcyYzRlNzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBs
ZUJ5dGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcApAQCAtMzQsOCArMzQsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBNZWRpYVNhbXBsZUJ5dGVS
YW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5C
eXRlU291cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCi0gICAgOiBNZWRpYVNh
bXBsZUFWRk9iakMobnVsbHB0cikKLSAgICAsIG1fcHJlc2VudGF0aW9uVGltZShzYW1wbGUucHJl
c2VudGF0aW9uVGltZSgpKQorICAgIDogbV9wcmVzZW50YXRpb25UaW1lKHNhbXBsZS5wcmVzZW50
YXRpb25UaW1lKCkpCiAgICAgLCBtX2RlY29kZVRpbWUoc2FtcGxlLmRlY29kZVRpbWUoKSkKICAg
ICAsIG1fZHVyYXRpb24oc2FtcGxlLmR1cmF0aW9uKCkpCiAgICAgLCBtX2J5dGVSYW5nZSgqc2Ft
cGxlLmJ5dGVSYW5nZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmggYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAppbmRleCBi
NjZmM2EzNWE5NmY3YjVkNWY5N2FiZDZlZGEwMDI2MTU4MjZlMWUyLi41ZGEyODg1ZDQ1ZDE3ODg4
MzYyMjkxN2U1ZTRhY2I5N2Y4ZWNhZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFu
Z2UuaApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgTWVk
aWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZP
YmpDIHsKK2NsYXNzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
Ok1lZGlhU2FtcGxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE1lZGlhU2FtcGxlQnl0ZVJh
bmdlPiBjcmVhdGUoV2ViQ29yZTo6TWVkaWFTYW1wbGUmIHNhbXBsZSwgTVRQbHVnaW5CeXRlU291
cmNlUmVmIGJ5dGVTb3VyY2UsIHVpbnQ2NF90IHRyYWNrSUQpCiAgICAgewpAQCAtNTQsNiArNTQs
NyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1T
YW1wbGVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gV2ViQ29yZTo6UGxhdGZvcm1TYW1wbGU6
OkJ5dGVSYW5nZVNhbXBsZVR5cGU7IH0KICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25z
dCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CisgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVh
dGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IHsgcmV0dXJuICpjb25zdF9jYXN0PE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlKj4odGhpcyk7IH0KIAogcHJpdmF0ZToKICAgICBNZWRpYVNhbXBsZUJ5dGVS
YW5nZShNZWRpYVNhbXBsZSYsIE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiwgdWludDY0X3QgdHJhY2tJ
RCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
NTAwNzMzNTkwZWY4NmIzNjYzYzQ4YjFmZGYyOTZkZjY1ZDliMzc5MS4uNThkNGE3NTA3N2FmYmFm
ZjIxODZmZDAxZjIwNzI2ODBjNGY4M2ZiMCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAzLTA1ICBKZWFuLVl2
ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSBhbmQgaGF2ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vODk4MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAu
Y3BwOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpIGNvbnZlcnNpb24gdG8gQ01UaW1lIGlu
Y29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgpAQCAtMTMsNiArMjMsNyBAQAogICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CiAgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NvY29hL0NvcmVNZWRpYVV0aWxpdGllcy5tbTogQWRkZWQuCiAgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U2FtcGxlTWFwLmNwcDogVXBkYXRlIGZvbGxvd2luZyBiYXNlIGNsYXNzIGRlZmluaXRpb24gY2hh
bmdlLgogCiAyMDIyLTAyLTIzICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKaW5k
ZXggNWE2NTM1ODMwMTVkMjg4ZGVmNDdiY2I0NzkyYzI0YzhkMmY5YTdlZi4uNzEyMDU4YTM2ODg4
Nzc2YjE3NzhlNGRjZDlkOGE5MGMwMjA2YWVhOCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKQEAgLTY0LDggKzY0LDYgQEAgcHVibGljOgog
ICAgICAgICBtX3ByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOwogICAgICAgICBt
X2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOwogICAgIH07Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRp
YVNhbXBsZT4sIFJlZlB0cjxNZWRpYVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBV
c2VFbmRUaW1lKSBmaW5hbCB7IHJldHVybiB7IH07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+IGNy
ZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgZmluYWwgewogICAgICAgICByZXR1cm4gY3Jl
YXRlKG1fcHJlc2VudGF0aW9uVGltZSwgbV9kZWNvZGVUaW1lLCBtX2R1cmF0aW9uLCBzdGF0aWNf
Y2FzdDxTYW1wbGVGbGFncz4obV9mbGFncyB8IElzTm9uRGlzcGxheWluZykpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453928</attachid>
            <date>2022-03-05 19:46:17 -0800</date>
            <delta_ts>2022-03-05 19:46:17 -0800</delta_ts>
            <desc>Combined Patch for EWS</desc>
            <filename>bug-237472-20220306144615.patch</filename>
            <type>text/plain</type>
            <size>182427</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODQ5NjA5NzYyYjgwNTJk
ODdiMWUzNjBiNjVhNzhmMzYyZjk1YjM5YS4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDczCisg
ICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODE0OTIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRmx5LWJ5IGZpeDogdXBkYXRlIGNhbGwgdG8gQVZPdXRw
dXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbgorICAgICAgICBub3cg
dGhhdCB0aGUgYWNjZXNzIG1hY3JvIGdvdCBmaXhlZC4KKworICAgICAgICBBUEkgVGVzdCBhZGRl
ZC4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1Mu
bW06CisgICAgICAgICgtW1dlYk1lZGlhU2Vzc2lvbkhlbHBlciBzdGFydE1vbml0b3JpbmdBaXJQ
bGF5Um91dGVzXSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW06CisgICAgICAgIChXZWJDb3JlOjpB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpyb3V0ZURldGVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFWUm91dGVQaWNrZXJWaWV3VGFyZ2V0UGlja2VyOjpp
bnZhbGlkYXRlUGxheWJhY2tUYXJnZXRzKToKKyAgICAgICAgKC1bV2ViQVZSb3V0ZVBpY2tlclZp
ZXdIZWxwZXIgbm90aWZpY2F0aW9uSGFuZGxlcjpdKToKKworMjAyMi0wMi0yMyAgSmVhbi1ZdmVz
IEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEhhdmUgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSB1c2UgU2hhcmVkQnVmZmVyIGludGVybmFsbHkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3OAorICAgICAgICByZGFyOi8vODkzNDg3
NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IGlzIGEgcmVmYWN0b3IgdG8gYWxsb3cgU291cmNlQnVmZmVyUGFyc2VyIHRvIHJldHVybiBTaGFy
ZWRCdWZmZXIKKyAgICAgICAgcmF0aGVyIHRoYW4gQ01CbG9ja0J1ZmZlci4KKworICAgICAgICBO
byBjaGFuZ2UgaW4gb2JzZXJ2YWJsZSBiZWhhdmlvdXJzLgorICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVy
UHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjpyZWVu
cXVldWVNZWRpYUZvclRpbWUpOiBGbHktYnkgZml4OiB0eXBvLgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUHJpdmF0ZTo6ZGlkUmVjZWl2ZVNhbXBsZSk6IEZseS1ieSBmaXgsICBleGl0
IGVhcmx5CisgICAgICAgIGlmIGVuZCB0aW1lIGlzIGxvd2VyIHRoYW4gc3RhcnQgdGltZSB3aGlj
aCBjYW4gaGFwcGVuIGlmIHRoZSBkdXJhdGlvbiBpcworICAgICAgICBzbWFsbGVyIHRoYW4gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OnJlYWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlZpZGVvVHJhY2tEYXRhOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChXZWJDb3JlOjpT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpkcmFp
blBlbmRpbmdTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlRyYWNrRGF0YTo6cG9zdFByb2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVZQOEZy
YW1lSGVhZGVyKTogTWFrZSBtZXRob2RzIGNvbnN0LgorCisyMDIyLTAyLTIzICBKZWFuLVl2ZXMg
QXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29udmVy
dCBGcmFnbWVudGVkU2hhcmVkQnVmZmVyIHRvIENNQmxvY2tCdWZmZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA3NQorICAgICAgICByZGFyOi8v
ODkzMzg0NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0Q29udGlndW91c0RhdGEgYW5kCisgICAg
ICAgIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxvY2tCdWZmZXIgbWV0aG9kcy4K
KworICAgICAgICBBUEkgdGVzdHMgYWRkZWQgZm9yIGdldENvbnRpZ3VvdXNEYXRhLgorICAgICAg
ICBjcmVhdGVDTUJsb2NrQnVmZmVyIHdpbGwgYmUgdXNlZCBpbiBhIGZvbGxvdy11cCBwYXRjaC4K
KworICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpnZXRDb250aWd1b3VzRGF0YSBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vY29jb2Ev
U2hhcmVkQnVmZmVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpGcmVlU2hhcmVkQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZUNNQmxv
Y2tCdWZmZXIgY29uc3QpOgorCiAyMDIyLTAzLTA0ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5j
b20+CiAKICAgICAgICAgVG9wIGxheWVycyBzaG91bGQgbm90IGJlIG1vdmVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5n
ZUxvZwppbmRleCA1ZjhlYTk4YWQzMjZlNDQ4MWY1YjE0ZDMwZDMzOGQxZmQ1MDNjYTRmLi43Mzgz
ZmVlMDFhMzE4NzlmZmI0NjExZGI5NDk5NjYxM2E0Nzg5ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0NCBAQAorMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUg
cGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEw
OTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwOgorICAgICAgICAqIHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oOiBNZXRob2QgQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeSB3YXNuJ3Qgc29mdC1s
aW5rZWQuCisKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcz
CisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjM3NDczCisgICAgICAgIENNVGltZTogY29udmVyc2lvbiBkb2Vzbid0IHdv
cmsgd2l0aCBpbnZhbGlkIG51bWJlcgorCisgICAgICAgICogcGFsL2F2Zm91bmRhdGlvbi9NZWRp
YVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NNVGltZSk6CisgICAgICAg
ICogcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg6CisKKzIwMjItMDMtMDQgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkgY29udmVyc2lvbiB0byBDTVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlk
IHRpbWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mzc0NzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4MTQ5MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGbHktYnkgZml4OiBtYWNybyBkZWZpbml0
aW9uIHRvIGFjY2VzcyBtZXRob2QKKyAgICAgICAgQVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNl
c0RpZENoYW5nZU5vdGlmaWNhdGlvbiB3YXMgaW5jb3JyZWN0LgorCisgICAgICAgICogcGFsL2F2
Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uY3BwOgorICAgICAgICAoUEFMOjp0b0NN
VGltZSk6IEVuc3VyZSB0aGF0IGlmIHRoZSBjb252ZXJ0ZWQgdGltZSB3YXMgaW52YWxpZC4gVGhl
CisgICAgICAgIGZsYWcgaXMgY2FycmllZCBhY2Nyb3NzLgorICAgICAgICAqIHBhbC9jb2NvYS9B
VkZvdW5kYXRpb25Tb2Z0TGluay5oOgorCiAyMDIyLTAzLTAyICBEYW4gR2xhc3RvbmJ1cnkgIDxk
amdAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHUFVdIEltcGxlbWVudCBHUFVEZXZpY2VEZXNj
cmlwdG9yLnJlcXVpcmVkTGltaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBlYzVjYzI5MDRhZjQ3ZjM4Nzc2ZmMx
MmFhMTdhZjE5Yjk3MzRmOTYuLjM4NWFmZjY2NjJiMGRiYmIyMjkwMGI3NDk3MDhlMDQ5ZjJkNDA1
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVu
YXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8v
cHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVS
YW5nZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlOjpNZWRpYVNh
bXBsZUJ5dGVSYW5nZSk6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5oOiBNZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisgICAgICAgIGRp
ZG4ndCBuZWVkIHRvIGluaGVyaXQgZnJvbSBNZWRpYVNhbXBsZUFWRk9iakMuIAorCiAyMDIyLTAz
LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBMaWJXZWJS
VENDb2RlY3M6OnNldEVuY29kZVJhdGVzIHNob3VsZCBzZW5kIExpYldlYlJUQ0NvZGVjc1Byb3h5
OjpTZXRFbmNvZGVSYXRlcyBvbmx5IHdoZW4gdGhlIGVuY29kZXIgaXMgbGl2ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvYXZmb3VuZGF0aW9uL01lZGlhVGltZUFW
Rm91bmRhdGlvbi5jcHAKaW5kZXggMDY1OTg0MDY4OWU0YWJiNTIyMGU1YmRkODA1MjNkNzQwMmY0
YWNlMi4uNjVjYWMzNDE5NTE0MDRmY2JkOGYyOWYwZjAyMWM3ZmM0ZDc5NjNlMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRp
bWVBVkZvdW5kYXRpb24uY3BwCkBAIC02NSw2ICs2NSw4IEBAIENNVGltZSB0b0NNVGltZShjb25z
dCBNZWRpYVRpbWUmIG1lZGlhVGltZSkKIAogICAgIGlmIChtZWRpYVRpbWUuaXNWYWxpZCgpKQog
ICAgICAgICB0aW1lLmZsYWdzIHw9IGtDTVRpbWVGbGFnc19WYWxpZDsKKyAgICBlbHNlCisgICAg
ICAgIHRpbWUuZmxhZ3MgJj0gfmtDTVRpbWVGbGFnc19WYWxpZDsKICAgICBpZiAobWVkaWFUaW1l
Lmhhc0JlZW5Sb3VuZGVkKCkpCiAgICAgICAgIHRpbWUuZmxhZ3MgfD0ga0NNVGltZUZsYWdzX0hh
c0JlZW5Sb3VuZGVkOwogICAgIGlmIChtZWRpYVRpbWUuaXNQb3NpdGl2ZUluZmluaXRlKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCmluZGV4
IDg3YjU2MjA3ZTg0ZGYzZjQ5OTliMzZmNTVmMmRmNmY4Yzk5ZDU3NmIuLmQ3NGI4ZDViNmMzMzg1
ZjNkODNjOTNkZjIzMTBmN2NkYTJiMjY1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgU09GVF9MSU5L
X0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZWJh
c2VSZW1vdmVUaW1lckQKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JU
KFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZU5leHRGaXJl
VGltZSwgT1NTdGF0dXMsIChDTVRpbWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2Vf
dCB0aW1lclNvdXJjZSwgQ01UaW1lIGZpcmVUaW1lLCB1aW50MzJfdCBmbGFncyksICh0aW1lYmFz
ZSwgdGltZXJTb3VyY2UsIGZpcmVUaW1lLCBmbGFncyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktf
RlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFz
ZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSwgT1NTdGF0dXMsIChDTVRp
bWViYXNlUmVmIHRpbWViYXNlLCBkaXNwYXRjaF9zb3VyY2VfdCB0aW1lclNvdXJjZSksICh0aW1l
YmFzZSwgdGltZXJTb3VyY2UpLCBQQUxfRVhQT1JUKQogU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9T
T1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSwgUEFMX0VYUE9SVCkKK1NPRlRfTElOS19GVU5DVElPTl9GT1Jf
U09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRp
b25DcmVhdGUsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjVHlwZSwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIENGRGljdGlv
bmFyeVJlZiBleHRlbnNpb25zLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYqIGZvcm1hdERl
c2NyaXB0aW9uT3V0KSwgKGFsbG9jYXRvciwgY29kZWNUeXBlLCB3aWR0aCwgaGVpZ2h0LCBleHRl
bnNpb25zLCBmb3JtYXREZXNjcmlwdGlvbk91dCksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIsIE9TU3RhdHVzLCAoQ0ZBbGxvY2F0b3JS
ZWYgYWxsb2NhdG9yLCBDVkltYWdlQnVmZmVyUmVmIGltYWdlQnVmZmVyLCBDTVZpZGVvRm9ybWF0
RGVzY3JpcHRpb25SZWYqIG91dERlc2MpLCAoYWxsb2NhdG9yLCBpbWFnZUJ1ZmZlciwgb3V0RGVz
YyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9S
VChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywg
Q01WaWRlb0RpbWVuc2lvbnMsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNj
KSwgKHZpZGVvRGVzYyksIFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0
UHJlc2VudGF0aW9uRGltZW5zaW9ucywgQ0dTaXplLCAoQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIHZpZGVvRGVzYywgQm9vbGVhbiB1c2VQaXhlbEFzcGVjdFJhdGlvLCBCb29sZWFuIHVzZUNs
ZWFuQXBlcnR1cmUpLCAodmlkZW9EZXNjLCB1c2VQaXhlbEFzcGVjdFJhdGlvLCB1c2VDbGVhbkFw
ZXJ0dXJlKSwgUEFMX0VYUE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1l
ZGlhU29mdExpbmsuaAppbmRleCA1NzBhNmE5ODUzYzQ0ODE2OGI5OTAyMjA0MjMwMDk2ZGZlOGZl
YjAxLi4zM2NhMWIyNmYzZDM3ZTU5MjVhMjViNmFjZmJkMTU4YTQzMmU3YWIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCkBAIC0yNjMsNiArMjYz
LDggQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGlt
ZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlVG8KICNkZWZpbmUgQ01UaW1lYmFzZVNldFRpbWVy
RGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseSBzb2Z0TGlua19Db3JlTWVkaWFfQ01UaW1l
YmFzZVNldFRpbWVyRGlzcGF0Y2hTb3VyY2VUb0ZpcmVJbW1lZGlhdGVseQogU09GVF9MSU5LX0ZV
TkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVGltZUNvcHlBc0RpY3Rpb25hcnks
IENGRGljdGlvbmFyeVJlZiwgKENNVGltZSB0aW1lLCBDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Ip
LCAodGltZSwgYWxsb2NhdG9yKSkKICNkZWZpbmUgQ01UaW1lQ29weUFzRGljdGlvbmFyeSBzb2Z0
TGlua19Db3JlTWVkaWFfQ01UaW1lQ29weUFzRGljdGlvbmFyeQorU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZSwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUg
Y29kZWNUeXBlLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVm
IGV4dGVuc2lvbnMsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRp
b25PdXQpLCAoYWxsb2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMs
IGZvcm1hdERlc2NyaXB0aW9uT3V0KSkKKyNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
Q3JlYXRlIHNvZnRMaW5rX0NvcmVNZWRpYV9DTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUK
IFNPRlRfTElOS19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIENWSW1hZ2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvblJlZiogb3V0RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXRE
ZXNjKSkKICNkZWZpbmUgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZm
ZXIgc29mdExpbmtfQ29yZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZUZvcklt
YWdlQnVmZmVyCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwg
Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0RGltZW5zaW9ucywgQ01WaWRlb0RpbWVuc2lvbnMs
IChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjKSwgKHZpZGVvRGVzYykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRM
aW5rLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
LmgKaW5kZXggNWJkNTEyZjE1YmY4MDUzNzdjZjkxM2FiZjY5ZDAwY2M5ODc1NzdkYy4uMjVkNzU1
ZjUxNTFjYThlNWNjOTBjMzU4M2MyZWRlNGMzZGEzMWQ4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaApAQCAtMzM4LDExICsz
MzgsMTIgQEAgU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24s
IEFWQ2FwdHVyZVNlc3Npb25TZXRBdXRob3JpemVkVG8KIAogI2lmICFQTEFURk9STShXQVRDSE9T
KQogU09GVF9MSU5LX0NPTlNUQU5UX0ZPUl9IRUFERVIoUEFMLCBBVkZvdW5kYXRpb24sIEFWUm91
dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24sIE5T
U3RyaW5nICopCi0jZGVmaW5lIEFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWRE
aWRDaGFuZ2VOb3RpZmljYXRpb24gUEFMOjpnZXRfQVZGb3VuZGF0aW9uX0FWUm91dGVEZXRlY3Rv
ck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24oKQorI2RlZmluZSBB
VlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9u
IGdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERp
ZENoYW5nZU5vdGlmaWNhdGlvbigpCiAjZW5kaWYgLy8gSEFWRShXQVRDSE9TKQogCiAjaWYgSEFW
RShBVlJPVVRFUElDS0VSVklFVykKIFNPRlRfTElOS19DT05TVEFOVF9GT1JfSEVBREVSKFBBTCwg
QVZGb3VuZGF0aW9uLCBBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZp
Y2F0aW9uLCBOU05vdGlmaWNhdGlvbk5hbWUpCisjZGVmaW5lIEFWT3V0cHV0Q29udGV4dE91dHB1
dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRpb24gZ2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENv
bnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uKCkKICNlbmRpZiAvLyBIQVZF
KEFWUk9VVEVQSUNLRVJWSUVXKQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDk4YjAzNTc5MWE2ZWJiMGQ5ZjE1NzFhNTdhNDJlY2Q1ZjE1NWNmYjku
LjVkZWU3NTQwNTM1NzlmNTViNTVmMmZlNGFkMGRkMGE2OWRlYmZkNGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zMTIsNiArMzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRmxvYXRSZWN0Q29jb2EubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fj
aGVDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLmNwcApAQCAtNjQ5LDYgKzY1MCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKIAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Db2xvckNvY29hLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBhYTQ0ZjVmNTMxNjdi
OWJjMGYxNDIzZjI3YmZjMjRkNzE3ZWJhY2ZhLi5mOWUwYWJhZjRiOTIyYjg5MzcyZjliYTk3MjU0
MDlmYmM3YjdmODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTM4MSw2ICszODEsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMubW0g
QG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Db2xvckNvY29hLm1tCiBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhY2hlQ29yZVRleHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWEyMjdkNTk4ZTQyOWQ4NTViYjNkZWVkYTli
MWQ0NzI4MGQ2MjQzYi4uMTgxOTc0NDllZWQ2NDkzNzlmZjFmNDI3MTY4ZGFiNWRmODdkOWZkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTU3OSw2ICsxNTc5LDggQEAKIAkJNTE0Qzc2N0IwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNEM3NjY2MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmggKi87IH07CiAJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdGMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTE1MEI1REQyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTUwQjVE
QzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTUwQjVERjI3Q0RGNDk5MDA0RkM4MUUgLyog
Q01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi87IH07CiAJ
CTUxNTFGMDdFMjYxNTQzNUEwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTFGMDdCMjYxNTM2
M0YwMEZEQjJCNCAvKiBNZWRpYVVuaXF1ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjgg
LyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg5MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQ
cm92aWRlci5oICovOyB9OwogCQk1MTVCRTE5MjFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3NzcsNiArOTc3OSw4IEBA
CiAJCTUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNTBCNURDMjdDREYyRTAwMDRGQzgxRSAvKiBD
TVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDTVV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE1MUYwN0IyNjE1MzYzRjAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVVuaXF1ZUlk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODgxRDU0RjVG
NjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTI4OSw2ICsyOTI5
Myw4IEBACiAJCQkJN0JDRDQyREMyNzA1Qzk0OTAwRUIyMTI3IC8qIEFOR0xFVXRpbGl0aWVzQ29j
b2EuaCAqLywKIAkJCQlDREY5OTUwMTI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFja1ByaXZh
dGVXZWJNLmNwcCAqLywKIAkJCQlDREY5OTUwMDI0QzI4MTQ5MDAyRUEwNjIgLyogQXVkaW9UcmFj
a1ByaXZhdGVXZWJNLmggKi8sCisJCQkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRp
bGl0aWVzLmggKi8sCisJCQkJNTE1MEI1REUyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVz
Lm1tICovLAogCQkJCUY0OEQyQUEzMjE1OTc0MEQwMEM2NzUyQiAvKiBDb2xvckNvY29hLmggKi8s
CiAJCQkJRjQ4RDJBQTQyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EubW0gKi8sCiAJCQkJ
QjI3NTM1NEMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENvY29hLm1tICovLApAQCAtMzM4
OTcsNiArMzM5MDMsNyBAQAogCQkJCUY0RDA3NTU5MjM0RDgyMzMwMDg4MUU3MyAvKiBDbGlwYm9h
cmRJdGVtUGFzdGVib2FyZERhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU4MDM3MTYy
MUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJE
MTMxNEZBMDlENTAwNzQ1N0FFIC8qIENsb3NlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NTBCNUREMjdDREYyRTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzBDMDU0Q0IxMTE4QzhFNDAwQ0UyNjM2IC8qIENvZGVHZW5lcmF0b3IucG0gaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVFQjVERjBFODFCOUFCMDBCMjU5NjUgLyogQ29sbGFwc2VkQm9yZGVyVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MjVBNDlBMTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xs
ZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zODgwNCw2ICszODgxMSw3IEBA
CiAJCQkJQ0RGNEI3MTUxRTAwQjdFNTAwRTIzNUEyIC8qIENETS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDREI3MDQ1QjFGNzQ2NUExMDAzOTIzREYgLyogQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDMjI0MjgxRjc1Njk2NjAwNUYwNzdCIC8qIENETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1MEI1
REYyN0NERjQ5OTAwNEZDODFFIC8qIENNVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTE0MDkwRkIxQUE1MUUxRDAwOTExOTFBIC8qIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlckNv
Y29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDZDNjk2Q0MxRTcyMDVGQzAwNTk3OTM3IC8qIENQ
VU1vbml0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCQTc2Q0ExMUQyMEU1MDAwNEMyMDFD
IC8qIENTU1Byb3BlcnR5TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTWVkaWFTYW1wbGUuaAppbmRleCAwYTZmMjhhMjAxMzEzNTUzNThiNmU3ZjljZGMxMjZhNGQ1
YzBlNmFjLi5hMTI4MjczYTU3NmY4M2JmYWUxN2I1NzI4MDgxNTI0ZjZkYmE1MjMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRpYVNhbXBsZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKQEAgLTI2LDYgKzI2LDkgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiRm91ckNDLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1WaWRlb0NvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgpAQCAtNDAsOCArNDMs
MTAgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGcmFn
bWVudGVkU2hhcmVkQnVmZmVyOwogY2xhc3MgTW9ja1NhbXBsZUJveDsKIGNsYXNzIFByb2Nlc3NJ
ZGVudGl0eTsKK2NsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogc3RydWN0IFBsYXRmb3JtU2FtcGxlIHsK
ICAgICBlbnVtIFR5cGUgewpAQCAtNzIsMTMgKzc3LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH07CiAgICAgZW51bSBE
aXZpZGVGbGFncyB7IEJlZm9yZVByZXNlbnRhdGlvblRpbWUsIEFmdGVyUHJlc2VudGF0aW9uVGlt
ZSB9OwogICAgIGVudW0gY2xhc3MgVXNlRW5kVGltZSA6IGJvb2wgewogICAgICAgICBEb05vdFVz
ZSwKICAgICAgICAgVXNlLAogICAgIH07Ci0gICAgdmlydHVhbCBzdGQ6OnBhaXI8UmVmUHRyPE1l
ZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYg
cHJlc2VudGF0aW9uVGltZSwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90VXNlKSA9IDA7
CisgICAgdmlydHVhbCBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlh
U2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUgPSBVc2VFbmRUaW1l
OjpEb05vdFVzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4geyBudWxscHRyLCBudWxscHRyIH07CisgICAgfQogICAgIHZpcnR1YWwgUmVmPE1l
ZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0ID0gMDsKIAogICAgIHZp
cnR1YWwgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IGdldFJHQkFJbWFnZURhdGEoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CkBAIC0xMTksNyArMTI4LDExIEBAIHB1YmxpYzoKICAg
ICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc0FscGhhOyB9CiAg
ICAgYm9vbCBoYXNTeW5jSW5mbygpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBIYXNTeW5jSW5m
bzsgfQogCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG91dC5wcmludCgie1BUUygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVj
b2RlVGltZSgpLCAiKSwgZHVyYXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQp
ZmxhZ3MoKSwgIiksIHByZXNlbnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRo
KCksICJ4IiwgcHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKKyAgICB9CisKICAg
ICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGF1dG8gb2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKQEAgLTEzNCw4ICsxNDcsMTI4IEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCitzdHJ1Y3QgQXVkaW9JbmZvOworc3RydWN0IFZpZGVvSW5mbzsKKworc3Ry
dWN0IFRyYWNrSW5mbyA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUcmFja0luZm8+IHsK
KyAgICBlbnVtIGNsYXNzIFRyYWNrVHlwZSB7IFVua25vd24sIEF1ZGlvLCBWaWRlbyB9OworCisg
ICAgYm9vbCBpc0F1ZGlvKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFRyYWNrVHlwZTo6QXVk
aW87IH0KKyAgICBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tU
eXBlOjpWaWRlbzsgfQorCisgICAgVHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFja0luZm8mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkgfHwgY29kZWNOYW1l
ICE9IG90aGVyLmNvZGVjTmFtZSB8fCB0cmFja0lEICE9IG90aGVyLnRyYWNrSUQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBlcXVhbFRvKG90aGVyKTsKKyAgICB9
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CisKKyAgICBGb3VyQ0MgY29kZWNOYW1lOworICAgIHVp
bnQ2NF90IHRyYWNrSUQgeyAwIH07CisKKyAgICB2aXJ0dWFsIH5UcmFja0luZm8oKSA9IGRlZmF1
bHQ7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0lu
Zm8mIG90aGVyKSBjb25zdCA9IDA7CisgICAgVHJhY2tJbmZvKFRyYWNrVHlwZSB0eXBlKQorICAg
ICAgICA6IG1fdHlwZSh0eXBlKSB7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUcmFja1R5cGUg
bV90eXBlIHsgVHJhY2tUeXBlOjpVbmtub3duIH07Cit9OworCitzdHJ1Y3QgVmlkZW9JbmZvIDog
cHVibGljIFRyYWNrSW5mbyB7CisgICAgc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgVmlkZW9JbmZvKCkpOyB9CisKKyAgICBGbG9hdFNpemUgc2l6
ZTsKKyAgICAvLyBTaXplIGluIHBpeGVscyBhdCB3aGljaCB0aGUgdmlkZW8gaXMgcmVuZGVyZWQu
IFRoaXMgaXMgYWZ0ZXIgaXQgaGFzCisgICAgLy8gYmVlbiBzY2FsZWQgYnkgaXRzIGFzcGVjdCBy
YXRpby4KKyAgICBGbG9hdFNpemUgZGlzcGxheVNpemU7CisgICAgdWludDhfdCBiaXREZXB0aCB7
IDggfTsKKyAgICBQbGF0Zm9ybVZpZGVvQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgIE1lZGlh
U2FtcGxlOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uIHsgTWVkaWFTYW1wbGU6OlZpZGVvUm90YXRp
b246Ok5vbmUgfTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGF0b21EYXRhOworCitwcml2
YXRlOgorICAgIFZpZGVvSW5mbygpCisgICAgICAgIDogVHJhY2tJbmZvKFRyYWNrVHlwZTo6Vmlk
ZW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhjb25zdCBUcmFja0luZm8mIG90aGVyVmlkZW9JbmZv
KSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0byYgb3RoZXIgPSBkb3duY2FzdDxjb25z
dCBWaWRlb0luZm8+KG90aGVyVmlkZW9JbmZvKTsKKyAgICAgICAgcmV0dXJuIHNpemUgPT0gb3Ro
ZXIuc2l6ZSAmJiBkaXNwbGF5U2l6ZSA9PSBvdGhlci5kaXNwbGF5U2l6ZSAmJiBiaXREZXB0aCA9
PSBvdGhlci5iaXREZXB0aCAmJiBjb2xvclNwYWNlID09IG90aGVyLmNvbG9yU3BhY2UgJiYgcm90
YXRpb24gPT0gb3RoZXIucm90YXRpb24gJiYgKCghYXRvbURhdGEgJiYgIW90aGVyLmF0b21EYXRh
KSB8fCAoYXRvbURhdGEgJiYgb3RoZXIuYXRvbURhdGEgJiYgKmF0b21EYXRhID09ICpvdGhlci5h
dG9tRGF0YSkpOworICAgIH0KK307CisKK3N0cnVjdCBBdWRpb0luZm8gOiBwdWJsaWMgVHJhY2tJ
bmZvIHsKKyAgICBzdGF0aWMgUmVmPEF1ZGlvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBBdWRpb0luZm8oKSk7IH0KKworICAgIHVpbnQzMl90IHJhdGUgeyAwIH07CisgICAg
dWludDMyX3QgY2hhbm5lbHMgeyAwIH07CisgICAgdWludDMyX3QgZnJhbWVzUGVyUGFja2V0IHsg
MCB9OworICAgIHVpbnQzMl90IGJpdERlcHRoIHsgMTYgfTsKKyAgICBpbnQ4X3QgcHJvZmlsZSB7
IDAgfTsKKyAgICBpbnQ4X3QgZXh0ZW5kZWRQcm9maWxlIHsgMCB9OworCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gY29va2llRGF0YTsKKworcHJpdmF0ZToKKyAgICBBdWRpb0luZm8oKQorICAg
ICAgICA6IFRyYWNrSW5mbyhUcmFja1R5cGU6OkF1ZGlvKSB7IH0KKyAgICBib29sIGVxdWFsVG8o
Y29uc3QgVHJhY2tJbmZvJiBvdGhlckF1ZGlvSW5mbykgY29uc3QgZmluYWwKKyAgICB7CisgICAg
ICAgIGF1dG8mIG90aGVyID0gZG93bmNhc3Q8Y29uc3QgQXVkaW9JbmZvPihvdGhlckF1ZGlvSW5m
byk7CisgICAgICAgIHJldHVybiByYXRlID09IG90aGVyLnJhdGUgJiYgY2hhbm5lbHMgPT0gb3Ro
ZXIuY2hhbm5lbHMgJiYgYml0RGVwdGggPT0gb3RoZXIuYml0RGVwdGggJiYgZnJhbWVzUGVyUGFj
a2V0ID09IG90aGVyLmZyYW1lc1BlclBhY2tldCAmJiBwcm9maWxlID09IG90aGVyLnByb2ZpbGUg
JiYgZXh0ZW5kZWRQcm9maWxlID09IG90aGVyLmV4dGVuZGVkUHJvZmlsZSAmJiAoKCFjb29raWVE
YXRhICYmICFvdGhlci5jb29raWVEYXRhKSB8fCAoY29va2llRGF0YSAmJiBvdGhlci5jb29raWVE
YXRhICYmICpjb29raWVEYXRhID09ICpvdGhlci5jb29raWVEYXRhKSk7CisgICAgfQorfTsKKwor
Y2xhc3MgTWVkaWFTYW1wbGVzQmxvY2sgeworcHVibGljOgorICAgIHN0cnVjdCBNZWRpYVNhbXBs
ZUl0ZW0geworICAgICAgICBNZWRpYVRpbWUgcHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgTWVk
aWFUaW1lIGRlY29kZVRpbWU7CisgICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbjsKKyAgICAgICAg
c3RkOjp2YXJpYW50PE1lZGlhU2FtcGxlOjpCeXRlUmFuZ2UsIFJlZjxjb25zdCBGcmFnbWVudGVk
U2hhcmVkQnVmZmVyPj4gZGF0YTsKKyAgICAgICAgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzIGZs
YWdzOworICAgIH07CisKKyAgICB2b2lkIHNldEluZm8oUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4m
JiBpbmZvKSB7IG1faW5mbyA9IFdURk1vdmUoaW5mbyk7IH0KKyAgICBjb25zdCBUcmFja0luZm8q
IGluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm8uZ2V0KCk7IH0KKyAgICBib29sIGlzVmlkZW8o
KSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc1ZpZGVvKCk7IH0KKyAgICBib29s
IGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiBtX2luZm8gJiYgbV9pbmZvLT5pc0F1ZGlvKCk7IH0K
KyAgICBUcmFja0luZm86OlRyYWNrVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvID8g
bV9pbmZvLT50eXBlKCkgOiBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93bjsgfQorICAgIHZv
aWQgYXBwZW5kKE1lZGlhU2FtcGxlSXRlbSYmIGl0ZW0pIHsgbV9zYW1wbGVzLmFwcGVuZChXVEZN
b3ZlKGl0ZW0pKTsgfQorICAgIHZvaWQgYXBwZW5kKE1lZGlhU2FtcGxlc0Jsb2NrJiYgYmxvY2sp
IHsgbV9zYW1wbGVzLmFwcGVuZFZlY3RvcihzdGQ6OmV4Y2hhbmdlKGJsb2NrLm1fc2FtcGxlcywg
eyB9KSk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5zaXpl
KCk7IH07CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmlzRW1w
dHkoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fc2FtcGxlcy5jbGVhcigpOyB9CisgICAgdXNp
bmcgU2FtcGxlc1ZlY3RvciA9IFZlY3RvcjxNZWRpYVNhbXBsZUl0ZW0+OworICAgIFNhbXBsZXNW
ZWN0b3IgdGFrZVNhbXBsZXMoKSB7IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fc2FtcGxlcywgeyB9
KTsgfQorCisgICAgY29uc3QgTWVkaWFTYW1wbGVJdGVtJiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzW2luZGV4XTsgfQorICAgIGNvbnN0IE1lZGlhU2Ft
cGxlSXRlbSYgZmlyc3QoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZmlyc3QoKTsgfQorICAg
IGNvbnN0IE1lZGlhU2FtcGxlSXRlbSYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5s
YXN0KCk7IH0KKyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fc2FtcGxlcy5iZWdpbigpOyB9CisgICAgU2FtcGxlc1ZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmVuZCgpOyB9CisKK3ByaXZh
dGU6CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV9pbmZvOworICAgIFNhbXBsZXNWZWN0
b3IgbV9zYW1wbGVzOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlZpZGVvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzVmlk
ZW8oKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OkF1ZGlvSW5mbykKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6VHJhY2tJbmZvJiBpbmZvKSB7IHJldHVybiBpbmZvLmlzQXVkaW8oKTsg
fQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpNZWRpYVNhbXBsZTo6VmlkZW9Sb3Rh
dGlvbj4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggZjg3
YjZhNGY2M2IyNmEyMTg4MjA2ZTkzOGFhNTg1Nzk3YWIzOTVlNC4uMWU2MWQwYjZmYWI3NTEwNGI3
ZmEwMDJhOGJkMDQ1NmNiNDZmOGU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCkBAIC0xNTIsNiArMTUyLDI1IEBAIFNoYXJlZEJ1ZmZlckRhdGFWaWV3IEZyYWdt
ZW50ZWRTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAg
ICByZXR1cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50
LT5iZWdpblBvc2l0aW9uIH07CiB9CiAKK1JlZjxTaGFyZWRCdWZmZXI+IEZyYWdtZW50ZWRTaGFy
ZWRCdWZmZXI6OmdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0
aCkgY29uc3QKK3sKKyAgICBpZiAocG9zaXRpb24gPj0gbV9zaXplKQorICAgICAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBsZW5ndGggPSBzdGQ6Om1pbihtX3NpemUgLSBw
b3NpdGlvbiwgbGVuZ3RoKTsKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBlbGVt
ZW50ID0gZ2V0U2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICBzaXplX3Qgb2Zmc2V0
SW5TZWdtZW50ID0gcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uOworICAgIGlmIChl
bGVtZW50LT5zZWdtZW50LT5zaXplKCkgLSBvZmZzZXRJblNlZ21lbnQgPj0gbGVuZ3RoKQorICAg
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyRGF0YVZpZXcgeyBlbGVtZW50LT5zZWdtZW50LmNvcHlS
ZWYoKSwgb2Zmc2V0SW5TZWdtZW50LCBsZW5ndGggfS5jcmVhdGVTaGFyZWRCdWZmZXIoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gY29tYmluZWREYXRhOworICAgIGNvbWJpbmVkRGF0YS5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7CisgICAgY29tYmluZWREYXRhLmFwcGVuZChlbGVtZW50
LT5zZWdtZW50LT5kYXRhKCkgKyBvZmZzZXRJblNlZ21lbnQsIGVsZW1lbnQtPnNlZ21lbnQtPnNp
emUoKSAtIG9mZnNldEluU2VnbWVudCk7CisgICAgZm9yICgrK2VsZW1lbnQ7IGNvbWJpbmVkRGF0
YS5zaXplKCkgPCBsZW5ndGggJiYgZWxlbWVudCAhPSBtX3NlZ21lbnRzLmVuZCgpOyBlbGVtZW50
KyspIHsKKyAgICAgICAgYXV0byBjYW5Db3B5ID0gc3RkOjptaW4obGVuZ3RoIC0gY29tYmluZWRE
YXRhLnNpemUoKSwgZWxlbWVudC0+c2VnbWVudC0+c2l6ZSgpKTsKKyAgICAgICAgY29tYmluZWRE
YXRhLmFwcGVuZChlbGVtZW50LT5zZWdtZW50LT5kYXRhKCksIGNhbkNvcHkpOworICAgIH0KKyAg
ICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShjb21iaW5lZERhdGEpKTsKK30K
KwogY29uc3QgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3JFbnRyeSog
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3Np
dGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCmluZGV4IGNhZWYzZjI2MjAwMzNkZDhj
ZmYxNTYyM2YyM2M2YjZjOWI1MzRiMzcuLjNiZjhhNmQxN2UyMmZhMmU3OTRiZjRmZjY4MTZhNTgy
ZTkwZjk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC01NCw2
ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9HQnl0ZXMgR0J5dGVzOwogI2lmIFVTRShGT1VOREFU
SU9OKQogT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19DTEFTUyBOU0RhdGE7Cit0eXBlZGVmIHN0
cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyKiBDTUJsb2NrQnVmZmVyUmVmOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewpAQCAtMTQ5LDYgKzE1MCw3IEBAIHB1YmxpYzoKICNpZiBVU0UoRk9VTkRB
VElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBcnJheT4gY3JlYXRlTlNEYXRh
QXJyYXkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI+IGNyZWF0ZShOU0RhdGEqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXRhaW5Q
dHI8Q01CbG9ja0J1ZmZlclJlZj4gY3JlYXRlQ01CbG9ja0J1ZmZlcigpIGNvbnN0OwogI2VuZGlm
CiAjaWYgVVNFKENGKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4gY3JlYXRlKENGRGF0YVJlZik7CkBAIC0xOTQsNiArMTk2LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gYmVnaW4gYW5kIGVuZCB0YWtlIE8oMSkgdGltZSwgdGhpcyB0YWtlcyBPKGxv
ZyhOKSkgdGltZS4KICAgICBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJEYXRhVmlldyBnZXRT
b21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxT
aGFyZWRCdWZmZXI+IGdldENvbnRpZ3VvdXNEYXRhKHNpemVfdCBwb3NpdGlvbiwgc2l6ZV90IGxl
bmd0aCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdG9IZXhTdHJpbmcoKSBj
b25zdDsKIApAQCAtMjQ2LDcgKzI0OSw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBDb21iaW5lcyBh
bGwgdGhlIHNlZ21lbnRzIGludG8gYSBWZWN0b3IgYW5kIHJldHVybnMgdGhhdCB2ZWN0b3IgYWZ0
ZXIgY2xlYXJpbmcgdGhlIEZyYWdtZW50ZWRTaGFyZWRCdWZmZXIuCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0
b3JFbnRyeSogZ2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGl0aW9uKSBjb25zdDsK
KyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24o
c2l6ZV90IHBvc2l0aW9uKSBjb25zdDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBp
bnRlcm5hbGx5Q29uc2lzdGVudCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVmlkZW9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0Zy
YW1lLmNwcAppbmRleCBhNTQ5YzFhNWM0OGViMjNkNjRiYTNmZDM1Mzg0MDhiZDE1NTIzNGYwLi5h
MjIxOGM1ZGQ3NDFmZmM0Njg4NTc3MWVkZDUxOTRiYzMxMmE3ZmRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcApAQCAtOTgsMTggKzk4LDYgQEAgdm9pZCBWaWRlb0ZyYW1l
OjpzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLWJvb2wgVmlkZW9GcmFtZTo6aXNEaXZpc2FibGUo
KSBjb25zdAotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RkOjpwYWlyPFJlZlB0cjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4sIFJlZlB0cjxXZWJD
b3JlOjpNZWRpYVNhbXBsZT4+IFZpZGVvRnJhbWU6OmRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBV
c2VFbmRUaW1lKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IG51
bGxwdHIsIG51bGxwdHIgfTsKLX0KLQogUmVmPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPiBWaWRlb0Zy
YW1lOjpjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0CiB7CiAgICAgQ1JBU0goKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAppbmRleCA2NDExZGY3ZDY0MGNjZGVkMWQxZTNl
MTFmZDFhNDI4YTI5MWIzMWVkLi4yMjg1ZThhYzdiZjAyMTQyZjkyYTkxZjc4MGU3NTkxMDI0MmFh
NmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5oCkBAIC03Miw4ICs3Miw2IEBA
IHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgc2l6ZV90IHNpemVJbkJ5dGVzKCkgY29uc3Qg
ZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3Qg
TWVkaWFUaW1lJikgZmluYWw7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUaW1lc3RhbXBz
KGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwotICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGQ6OnBhaXI8UmVmUHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2
aWRlKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgVXNlRW5kVGltZSA9IFVzZUVu
ZFRpbWU6OkRvTm90VXNlKSBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBSZWY8V2ViQ29yZTo6
TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgZmluYWw7CiAgICAg
V0VCQ09SRV9FWFBPUlQgU2FtcGxlRmxhZ3MgZmxhZ3MoKSBjb25zdCBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGQ6Om9wdGlvbmFsPEJ5dGVSYW5nZT4gYnl0ZVJhbmdlKCkgY29uc3QgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRp
b0ZpbGVSZWFkZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2Nv
YS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKaW5kZXggYjcwM2NmZWNkMzE2YzYyN2M2OTRlNjRi
OGU2OTc2MjA2ODY3ZjdhYi4uYmQ4N2U0NjhmOGYwZGZmMGIzNGM2OGE1ZjQ5YjQ2ZTNkYjAwYzU2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9G
aWxlUmVhZGVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YT4gQXVkaW9GaWxlUmVhZGVyOjpkZW11eFdl
Yk1EYXRhKGNvbnN0IHVpCiAgICAgcGFyc2VyLT5hcHBlbmREYXRhKFdURk1vdmUoc2VnbWVudCkp
OwogICAgIGlmICghdHJhY2spCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHBhcnNlci0+
Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7CisgICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRp
b1NhbXBsZXMoKTsKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0
YT4oQXVkaW9GaWxlUmVhZGVyV2ViTURhdGEgeyBXVEZNb3ZlKGJ1ZmZlciksIHRyYWNrLnJlbGVh
c2VOb25OdWxsKCksIFdURk1vdmUoZHVyYXRpb24pLCBXVEZNb3ZlKHNhbXBsZXMpIH0pOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNz
aW9uSGVscGVySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL01lZGlh
U2Vzc2lvbkhlbHBlcklPUy5tbQppbmRleCBhNDBlY2JiOGI4MmU4OWE0ZGRkYzQxMTI2NGFiN2Nj
ZmM5NjBmOWUyLi45YThlOTFmZWU5YjMzM2JhNTlhN2RmNzY5Y2QyNzAyYzhjMzc0YTg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uSGVs
cGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNl
c3Npb25IZWxwZXJJT1MubW0KQEAgLTQ2MCw3ICs0NjAsNyBAQCAtICh2b2lkKXN0YXJ0TW9uaXRv
cmluZ0FpclBsYXlSb3V0ZXMKICAgICAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UwogICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+X3JvdXRlRGV0ZWN0b3IgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jQVZSb3V0ZURldGVjdG9ySW5zdGFuY2UoKSBpbml0XSk7CiAgICAgICAgICAgICBw
cm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRlY3Rvci5nZXQoKS5yb3V0ZURldGVjdGlvbkVuYWJsZWQg
PSBwcm90ZWN0ZWRTZWxmLT5fbW9uaXRvcmluZ0FpclBsYXlSb3V0ZXM7Ci0gICAgICAgICAgICBb
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnByb3RlY3Rl
ZFNlbGYuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHdpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlk
Q2hhbmdlOikgbmFtZTpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDpwcm90ZWN0ZWRTZWxmLT5fcm91dGVEZXRlY3Rvci5nZXQo
KV07CisgICAgICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnByb3RlY3RlZFNlbGYuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKHdpcmVsZXNz
Um91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlOikgbmFtZTpQQUw6OkFWUm91dGVEZXRlY3Rvck11bHRp
cGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnByb3RlY3RlZFNl
bGYtPl9yb3V0ZURldGVjdG9yLmdldCgpXTsKIAogICAgICAgICAgICAgcHJvdGVjdGVkU2VsZi0+
X2NhbGxiYWNrLT5leHRlcm5hbE91dHB1dERldmljZUF2YWlsYWJsZURpZENoYW5nZSgpOwogICAg
ICAgICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2hhcmVkQnVmZmVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9TaGFyZWRCdWZmZXJDb2NvYS5tbQppbmRleCA2NjQyN2RmYmYwNWZk
NzI2YWZkOTlhMzI5YzZhYzExYWM5ZWQ3YTU1Li4xOTA4YjQ2YWZiNWQ2MTA0MTJmYWVjZGMxMjQy
MTY0ZWZhNjE5NDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
aGFyZWRCdWZmZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9T
aGFyZWRCdWZmZXJDb2NvYS5tbQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiV2ViQ29yZUpJ
VE9wZXJhdGlvbnMuaCIKICNpbXBvcnQgIldlYkNvcmVPYmpDRXh0cmFzLmgiCiAjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29y
ZU1lZGlhU29mdExpbmsuaD4KICNpbXBvcnQgPHN0cmluZy5oPgogI2ltcG9ydCA8d3RmL01haW5U
aHJlYWQuaD4KICNpbXBvcnQgPHd0Zi9jb2NvYS9UeXBlQ2FzdHNDb2NvYS5oPgpAQCAtOTksNiAr
MTAwLDU1IEBAIHZvaWQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6YXBwZW5kKE5TRGF0YSAqZGF0
YSkKICAgICByZXR1cm4gYXBwZW5kKGJyaWRnZV9jYXN0KGRhdGEpKTsKIH0KIAorc3RhdGljIHZv
aWQgRnJlZURhdGFTZWdtZW50KHZvaWQqIHJlZmNvbiwgdm9pZCosIHNpemVfdCkKK3sKKyAgICBh
dXRvKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IERhdGFTZWdtZW50Kj4ocmVmY29u
KTsKKyAgICBidWZmZXItPmRlcmVmKCk7Cit9CisKK1JldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVm
PiBGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGVDTUJsb2NrQnVmZmVyKCkgY29uc3QKK3sK
KyAgICBhdXRvIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIgPSBbXSAoY29uc3QgRGF0YVNlZ21lbnQm
IHNlZ21lbnQpIC0+IFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiB7CisgICAgICAgIC8vIEZy
b20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRvY3VtZW50YXRpb246CisgICAgICAg
IC8vIE5vdGUgdGhhdCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoaXMgc3RydWN0IGNvbnRh
aW5zIG1pc2FsaWduZWQgZnVuY3Rpb24gcG9pbnRlcnMuCisgICAgICAgIC8vIFRvIGF2b2lkIGxp
bmstdGltZSBpc3N1ZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgY2xpZW50cyBmaWxsIENNQmxv
Y2tCdWZmZXJDdXN0b21CbG9ja1NvdXJjZSdzIGZ1bmN0aW9uIHBvaW50ZXIgZmllbGRzCisgICAg
ICAgIC8vIGJ5IHVzaW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4gZGVjbGFy
aW5nIHRoZW0gYXMgZ2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgorICAgICAgICBDTUJsb2NrQnVm
ZmVyQ3VzdG9tQmxvY2tTb3VyY2UgYWxsb2NhdG9yOworICAgICAgICBhbGxvY2F0b3IudmVyc2lv
biA9IDA7CisgICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVsbHB0cjsKKyAgICAg
ICAgYWxsb2NhdG9yLkZyZWVCbG9jayA9IEZyZWVEYXRhU2VnbWVudDsKKyAgICAgICAgYWxsb2Nh
dG9yLnJlZkNvbiA9IGNvbnN0X2Nhc3Q8RGF0YVNlZ21lbnQqPigmc2VnbWVudCk7CisgICAgICAg
IHNlZ21lbnQucmVmKCk7CisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcGFydGlhbEJ1ZmZlciA9
IG51bGxwdHI7CisgICAgICAgIGlmIChQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5
QmxvY2sobnVsbHB0ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNl
Z21lbnQuZGF0YSgpKSksIHNlZ21lbnQuc2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCAwLCBz
ZWdtZW50LnNpemUoKSwgMCwgJnBhcnRpYWxCdWZmZXIpICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YocGFy
dGlhbEJ1ZmZlcik7CisgICAgfTsKKworICAgIGlmIChoYXNPbmVTZWdtZW50KCkgJiYgIWlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHNlZ21lbnRUb0NNQmxvY2tCdWZmZXIobV9zZWdtZW50c1sw
XS5zZWdtZW50KTsKKworICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxs
cHRyOworICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgaXNFbXB0eSgpID8gMCA6IG1fc2VnbWVudHMuc2l6ZSgpLCAwLCAmcmF3
QmxvY2tCdWZmZXIpOworICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VyciB8fCAhcmF3
QmxvY2tCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gYmxvY2tCdWZm
ZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKKworICAgIGlmIChpc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBibG9ja0J1ZmZlcjsKKworICAgIGZvciAoYXV0byYgc2VnbWVudCA6IG1fc2Vn
bWVudHMpIHsKKyAgICAgICAgaWYgKCFzZWdtZW50LnNlZ21lbnQtPnNpemUoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIHBhcnRpYWxCdWZmZXIgPSBzZWdtZW50VG9DTUJs
b2NrQnVmZmVyKHNlZ21lbnQuc2VnbWVudCk7CisgICAgICAgIGlmICghcGFydGlhbEJ1ZmZlcikK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAoUEFMOjpDTUJsb2NrQnVm
ZmVyQXBwZW5kQnVmZmVyUmVmZXJlbmNlKHJhd0Jsb2NrQnVmZmVyLCBwYXJ0aWFsQnVmZmVyLmdl
dCgpLCAwLCAwLCAwKSAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBibG9ja0J1ZmZlcjsKK30KKwogUmV0YWluUHRy
PE5TRGF0YT4gU2hhcmVkQnVmZmVyOjpjcmVhdGVOU0RhdGEoKSBjb25zdAogewogICAgIHJldHVy
biBicmlkZ2VfY2FzdChjcmVhdGVDRkRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5o
CmluZGV4IDA4NDRiMWU4ZGNhY2ZjYTYwNmQwMWFmZGM5YzZmNzIwZTMzOTQ0NWMuLmFmYzMxMjU0
ZWI1NGZhZGYzZjEyMTk5NjVlODI1ZWQzMjYzZDRiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1h
cmllcy5oCkBAIC0zMyw2ICszMywxNSBAQCBlbnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllcyA6IHVpbnQ4X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUx
NzBtLAorICAgIEJ0NDcwbSwKKyAgICBTbXB0ZTI0MG0sCisgICAgRmlsbSwKKyAgICBCdDIwMjAs
CisgICAgU21wdGVTdDQyODEsCisgICAgU21wdGVScDQzMSwKKyAgICBTbXB0ZUVnNDMyLAorICAg
IEplZGVjUDIyUGhvc3Bob3JzLAorICAgIFVuc3BlY2lmaWVkLAogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpAQCAtNDQsNyArNTMsMTYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM+IHsKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0NzA5LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwYmcsCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkJ0NDcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6RmlsbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpCdDIwMjAsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xv
clByaW1hcmllczo6U21wdGVTdDQyODEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9D
b2xvclByaW1hcmllczo6U21wdGVScDQzMSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhvc3Bob3JzLAorICAgICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAppbmRleCBlOTA3MzVjODhkN2ZlNTFmMzc3
NTViZDhjMDc0NGZhNmI1M2M2ZmU5Li4zOTFhZGVjYWQyMmNhNmQ5MTFlYjAwOGI3NTZjOGRlYTc3
NGYyMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCkBAIC0zNCw2ICsz
NCwxMiBAQCBlbnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMgOiB1aW50
OF90IHsKICAgICBCdDcwOSwKICAgICBCdDQ3MGJnLAogICAgIFNtcHRlMTcwbSwKKyAgICBTbXB0
ZTI0MG0sCisgICAgRmNjLAorICAgIFlDZ0NvLAorICAgIEJ0MjAyME5vbmNvbnN0YW50THVtaW5h
bmNlLAorICAgIEJ0MjAyMENvbnN0YW50THVtaW5hbmNlLAorICAgIFVuc3BlY2lmaWVkLAogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpAQCAtNDYsNyArNTIsMTMgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRz
PiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlJn
YiwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ3
MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0
NDcwYmcsCi0gICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6
OlNtcHRlMTcwbQorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2ll
bnRzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2Vm
ZmljaWVudHM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6RmNjLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpZQ2dDbywKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJp
eENvZWZmaWNpZW50czo6QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2UsCisgICAgICAgIFdlYkNv
cmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyMENvbnN0YW50THVtaW5h
bmNlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpV
bnNwZWNpZmllZAogICAgID47CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcy5oCmluZGV4IGNjN2YxZWEyMTRlNGE5YWI1ZWMxZTYyYWIyNDQ2Mjg4YTg0MGQ0
ZWIuLmJiMTgzYzAzMDYzMDFiMzcwNzhmZGNkNTQwMjNmZmU3NDNiYzJhYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oCkBAIC0zMyw2ICszMywyMCBAQCBl
bnVtIGNsYXNzIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyA6IHVpbnQ4X3Qg
ewogICAgIEJ0NzA5LAogICAgIFNtcHRlMTcwbSwKICAgICBJZWM2MTk2NjIxLAorICAgIEdhbW1h
MjJjdXJ2ZSwKKyAgICBHYW1tYTI4Y3VydmUsCisgICAgU21wdGUyNDBtLAorICAgIExpbmVhciwK
KyAgICBMb2csCisgICAgTG9nU3FydCwKKyAgICBJZWM2MTk2NjI0LAorICAgIEJ0MTM2MUV4dGVu
ZGVkQ29sb3VyR2FtdXQsCisgICAgQnQyMDIwXzEwYml0LAorICAgIEJ0MjAyMF8xMmJpdCwKKyAg
ICBTbXB0ZVN0MjA4NCwKKyAgICBTbXB0ZVN0NDI4MSwKKyAgICBBcmliU3RkQjY3SGxnLAorICAg
IFVuc3BlY2lmaWVkCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00NCw3ICs1OCwy
MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcz4gewogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUxNzBtLAotICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjEKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2
NjIxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkdhbW1hMjJjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpHYW1tYTI4Y3VydmUsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhciwKKyAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2csCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9nU3Fy
dCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpJZWM2MTk2NjI0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJ0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQsCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEwYml0LAorICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAy
MF8xMmJpdCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpTbXB0ZVN0MjA4NCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpBcmliU3RkQjY3SGxnLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVk
CiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKaW5kZXggMDRjYmU0ZDI3ZjE5MGI3YjI3Yjlj
YTdlOThhOWM0NzE3M2QyZjg5Yi4uYmY0N2ZjZWJiNTZlMmY5ZGU1NGE0MjBkZTJkMjE2YTQ3ZWNh
MmY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNl
QnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIFNvdXJjZUJ1
ZmZlclByaXZhdGU6OnJlZW5xdWV1ZU1lZGlhRm9yVGltZShUcmFja0J1ZmZlciYgdHJhY2tCdWZm
ZXIsIGNvbnN0CiAgICAgICAgIHx8IChjdXJyZW50U2FtcGxlUFRTSXRlcmF0b3ItPmZpcnN0IC0g
dGltZSkgPiB0aW1lRnVkZ2VGYWN0b3IoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gU2Vh
Y2ggYmFja3dhcmQgZm9yIHRoZSBwcmV2aW91cyBzeW5jIHNhbXBsZS4KKyAgICAvLyBTZWFyY2gg
YmFja3dhcmQgZm9yIHRoZSBwcmV2aW91cyBzeW5jIHNhbXBsZS4KICAgICBEZWNvZGVPcmRlclNh
bXBsZU1hcDo6S2V5VHlwZSBkZWNvZGVLZXkoY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5zZWNv
bmQtPmRlY29kZVRpbWUoKSwgY3VycmVudFNhbXBsZVBUU0l0ZXJhdG9yLT5zZWNvbmQtPnByZXNl
bnRhdGlvblRpbWUoKSk7CiAgICAgYXV0byBjdXJyZW50U2FtcGxlRFRTSXRlcmF0b3IgPSB0cmFj
a0J1ZmZlci5zYW1wbGVzLmRlY29kZU9yZGVyKCkuZmluZFNhbXBsZVdpdGhEZWNvZGVLZXkoZGVj
b2RlS2V5KTsKICAgICBBU1NFUlQoY3VycmVudFNhbXBsZURUU0l0ZXJhdG9yICE9IHRyYWNrQnVm
ZmVyLnNhbXBsZXMuZGVjb2RlT3JkZXIoKS5lbmQoKSk7CkBAIC0xMTcxLDYgKzExNzEsOSBAQCB2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmRpZFJlY2VpdmVTYW1wbGUoUmVmPE1lZGlhU2FtcGxl
PiYmIG9yaWdpbmFsU2FtcGxlKQogICAgICAgICAgICAgICAgIE1lZGlhVGltZSBlcmFzZUJlZ2lu
VGltZSA9IHRyYWNrQnVmZmVyLmhpZ2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXA7CiAgICAgICAg
ICAgICAgICAgTWVkaWFUaW1lIGVyYXNlRW5kVGltZSA9IGZyYW1lRW5kVGltZXN0YW1wIC0gY29u
dGlndW91c0ZyYW1lVG9sZXJhbmNlOwogCisgICAgICAgICAgICAgICAgaWYgKGVyYXNlRW5kVGlt
ZSA8PSBlcmFzZUJlZ2luVGltZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICAgICAgICBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFu
Z2U7CiAgICAgICAgICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZl
ci5oaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVy
YXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBmcmFtZSBpcyBhdCB0
aGUgZW5kIG9mIHRoZSBidWZmZXJlZCByYW5nZXMsIHBlcmZvcm0gYSBzZXF1ZW50aWFsIHNjYW4g
ZnJvbSBlbmQgKE8oMSkpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJv
dXRlUGlja2VyVmlld1RhcmdldFBpY2tlci5tbQppbmRleCBkYjg4MjUxMWIxYWRlYjYxZjcxOTll
YjkyNTRiODgzMjJlODlhNGVkLi5hMjI4ODZlNDlhOWE0ZDA5NDE2NWZjMTRjNWMyMTc2MzdkNWYy
MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vb2JqYy9BVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlci5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9BVlJvdXRlUGlja2Vy
Vmlld1RhcmdldFBpY2tlci5tbQpAQCAtOTEsNyArOTEsNyBAQCBBVk91dHB1dENvbnRleHQgKiBB
VlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6b3V0cHV0Q29udGV4dEludGVybmFsKGJvb2wg
dXNlaQogICAgICAgICAgICAgbV9vdXRwdXRDb250ZXh0ID0gW1BBTDo6Z2V0QVZPdXRwdXRDb250
ZXh0Q2xhc3MoKSBvdXRwdXRDb250ZXh0XTsKICAgICAgICAgQVNTRVJUKG1fb3V0cHV0Q29udGV4
dCk7CiAgICAgICAgIGlmIChtX291dHB1dENvbnRleHQpCi0gICAgICAgICAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3
RGVsZWdhdGUuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBu
YW1lOlBBTDo6Z2V0X0FWRm91bmRhdGlvbl9BVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlk
Q2hhbmdlTm90aWZpY2F0aW9uKCkgb2JqZWN0Om1fb3V0cHV0Q29udGV4dC5nZXQoKV07CisgICAg
ICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVy
Om1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlm
aWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6QVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9vdXRwdXRDb250ZXh0LmdldCgpXTsKICAgICB9
CiAKICAgICByZXR1cm4gbV9vdXRwdXRDb250ZXh0LmdldCgpOwpAQCAtMTExLDcgKzExMSw3IEBA
IEFWUm91dGVEZXRlY3RvciAqQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXI6OnJvdXRlRGV0
ZWN0b3IoKQogewogICAgIGlmICghbV9yb3V0ZURldGVjdG9yKSB7CiAgICAgICAgIG1fcm91dGVE
ZXRlY3RvciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NBVlJvdXRlRGV0ZWN0b3JJbnN0YW5jZSgpIGlu
aXRdKTsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjptX3JvdXRlUGlja2VyVmlld0RlbGVnYXRlLmdldCgpIHNlbGVjdG9yOkBzZWxlY3Rv
cihub3RpZmljYXRpb25IYW5kbGVyOikgbmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZSb3V0
ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbigpIG9i
amVjdDptX3JvdXRlRGV0ZWN0b3IuZ2V0KCldOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUu
Z2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKG5vdGlmaWNhdGlvbkhhbmRsZXI6KSBuYW1lOlBBTDo6
QVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlv
biBvYmplY3Q6bV9yb3V0ZURldGVjdG9yLmdldCgpXTsKICAgICAgICAgaWYgKFttX3JvdXRlRGV0
ZWN0b3IgbXVsdGlwbGVSb3V0ZXNEZXRlY3RlZF0pCiAgICAgICAgICAgICBhdmFpbGFibGVEZXZp
Y2VzRGlkQ2hhbmdlKCk7CiAgICAgfQpAQCAtMTcwLDEzICsxNzAsMTMgQEAgQVZPdXRwdXRDb250
ZXh0ICogQVZSb3V0ZVBpY2tlclZpZXdUYXJnZXRQaWNrZXI6Om91dHB1dENvbnRleHQoKQogdm9p
ZCBBVlJvdXRlUGlja2VyVmlld1RhcmdldFBpY2tlcjo6aW52YWxpZGF0ZVBsYXliYWNrVGFyZ2V0
cygpCiB7CiAgICAgaWYgKG1fcm91dGVEZXRlY3RvcikgewotICAgICAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3
RGVsZWdhdGUuZ2V0KCkgbmFtZTpQQUw6OmdldF9BVkZvdW5kYXRpb25fQVZSb3V0ZURldGVjdG9y
TXVsdGlwbGVSb3V0ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbigpIG9iamVjdDptX3Jv
dXRlRGV0ZWN0b3IuZ2V0KCldOworICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fcm91dGVQaWNrZXJWaWV3RGVsZWdhdGUuZ2V0KCkg
bmFtZTpQQUw6OkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VO
b3RpZmljYXRpb24gb2JqZWN0Om1fcm91dGVEZXRlY3Rvci5nZXQoKV07CiAgICAgICAgIFttX3Jv
dXRlRGV0ZWN0b3Igc2V0Um91dGVEZXRlY3Rpb25FbmFibGVkOk5PXTsKICAgICAgICAgbV9yb3V0
ZVBpY2tlclZpZXcgPSBudWxscHRyOwogICAgIH0KIAogICAgIGlmIChtX291dHB1dENvbnRleHQp
IHsKLSAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjptX3JvdXRlUGlja2VyVmlld0RlbGVnYXRlLmdldCgpIG5hbWU6UEFMOjpnZXRfQVZG
b3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRp
b24oKSBvYmplY3Q6bV9vdXRwdXRDb250ZXh0LmdldCgpXTsKKyAgICAgICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX3JvdXRlUGlja2VyVmll
d0RlbGVnYXRlLmdldCgpIG5hbWU6UEFMOjpBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlk
Q2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDptX291dHB1dENvbnRleHQuZ2V0KCldOwogICAgICAg
ICBtX291dHB1dENvbnRleHQgPSBudWxscHRyOwogICAgIH0KIApAQCAtMjgyLDkgKzI4Miw5IEBA
IC0gKHZvaWQpbm90aWZpY2F0aW9uSGFuZGxlcjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KICAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6UEFMOjpnZXRfQVZG
b3VuZGF0aW9uX0FWT3V0cHV0Q29udGV4dE91dHB1dERldmljZXNEaWRDaGFuZ2VOb3RpZmljYXRp
b24oKV0pCisgICAgICAgIGlmIChbW25vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6
UEFMOjpBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSkK
ICAgICAgICAgICAgIG1fY2FsbGJhY2stPmN1cnJlbnREZXZpY2VEaWRDaGFuZ2UoKTsKLSAgICAg
ICAgZWxzZSBpZiAoW1tub3RpZmljYXRpb24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOlBBTDo6Z2V0
X0FWRm91bmRhdGlvbl9BVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hh
bmdlTm90aWZpY2F0aW9uKCldKQorICAgICAgICBlbHNlIGlmIChbW25vdGlmaWNhdGlvbiBuYW1l
XSBpc0VxdWFsVG9TdHJpbmc6UEFMOjpBVlJvdXRlRGV0ZWN0b3JNdWx0aXBsZVJvdXRlc0RldGVj
dGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSkKICAgICAgICAgICAgIG1fY2FsbGJhY2stPmF2YWls
YWJsZURldmljZXNEaWRDaGFuZ2UoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU2FtcGxlQVZG
T2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKaW5kZXggNmNjZmZiMGQ2YTkyZWYwNmFlNzZmODhhMGIy
ODU2OTc1ZGEzYjJmNy4uMDI1ZDBkMzQ0ZjNhZWE0MjhhNmVkODc2ODY4OGNjYWJmZDM3YTMyZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmgKQEAgLTY1LDcg
KzY1LDYgQEAgcHVibGljOgogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgUGxhdGZvcm1TYW1wbGU6OlR5cGUgcGxhdGZvcm1TYW1wbGVUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1TYW1wbGU6OkNNU2FtcGxlQnVmZmVy
VHlwZTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8Qnl0ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUm
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29u
c3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0Rpdmlz
YWJsZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1w
bGVBVkZPYmpDLm1tCmluZGV4IGU4MzhlY2UzMTdlOTA0NGJiYWM5ZWM3NzBiODkxZmM5YWQzMWNk
ZjAuLjljYWQ4OWQxYzc2YzljYzExOGI0NzEyMmE1NmNiZDU3YTEzMTJkNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KQEAgLTI0NSwxMSArMjQ1LDYg
QEAgRmxvYXRTaXplIE1lZGlhU2FtcGxlQVZGT2JqQzo6cHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0
CiAgICAgcmV0dXJuIEZsb2F0U2l6ZShQQUw6OkNNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkdldFBy
ZXNlbnRhdGlvbkRpbWVuc2lvbnMoZm9ybWF0RGVzY3JpcHRpb24sIHRydWUsIHRydWUpKTsKIH0K
IAotdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
LXsKLSAgICBvdXQucHJpbnQoIntQVFMoIiwgcHJlc2VudGF0aW9uVGltZSgpLCAiKSwgRFRTKCIs
IGRlY29kZVRpbWUoKSwgIiksIGR1cmF0aW9uKCIsIGR1cmF0aW9uKCksICIpLCBmbGFncygiLCAo
aW50KWZsYWdzKCksICIpLCBwcmVzZW50YXRpb25TaXplKCIsIHByZXNlbnRhdGlvblNpemUoKS53
aWR0aCgpLCAieCIsIHByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSwgIil9Iik7Ci19Ci0KIHZv
aWQgTWVkaWFTYW1wbGVBVkZPYmpDOjpvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3QgTWVkaWFUaW1l
JiBvZmZzZXQpCiB7CiAgICAgQ01JdGVtQ291bnQgaXRlbUNvdW50ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQyMWMzNTA2NjRlYjBiNWM2MzQ4YWI3MTRkNzNkMjZjMzEyMmFhMDUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxp
dGllcy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCit0eXBlZGVm
IGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIqIENNU2FtcGxlQnVm
ZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE1lZGlhU2FtcGxlc0Jsb2Nr
Oworc3RydWN0IFRyYWNrSW5mbzsKKworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbyhjb25z
dCBUcmFja0luZm8mKTsKKy8vIENvbnZlcnQgTWVkaWFTYW1wbGVzQmxvY2sgdG8gdGhlIGVxdWl2
YWxlbnQgQ01TYW1wbGVCdWZmZXJSZWYuIElmIENNRm9ybWF0RGVzY3JpcHRpb25SZWYKKy8vIGlz
IHNldCBpdCB3aWxsIGJlIHVzZWQsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNyZWF0ZWQgZnJvbSB0
aGUgTWVkaWFTYW1wbGVzQmxvY2sncyBUcmFja0luZm8uCitXRUJDT1JFX0VYUE9SVCBSZXRhaW5Q
dHI8Q01TYW1wbGVCdWZmZXJSZWY+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1wbGVzQmxvY2sm
JiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZik7CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiZDRhN2YyMzdjZWJlNmQ0NTg0MTA1NjlmZDA5ODliODJhMmNlNjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxp
dGllcy5tbQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMC0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJDTVV0aWxpdGllcy5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisK
KyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5o
IgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBvcnQgIk1lZGlhVXRpbGl0aWVzLmgiCisj
aW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQgIldlYk1BdWRpb1V0aWxpdGllc0NvY29h
LmgiCisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8
cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5kYXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9T
Y29wZS5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0c0NGLmg+CisKKyNpbXBvcnQgIkNvcmVW
aWRlb1NvZnRMaW5rLmgiCisjaW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgorI2ltcG9y
dCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwvY2YvQ29y
ZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9BdWRpb1Rvb2xib3hTb2Z0TGluay5o
PgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShPUFVTKSB8fCBFTkFCTEUo
Vk9SQklTKQorCitzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9JbmZvJiBpbmZvKQoreworICAgIEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsKKyAgICBhc2JkLm1Gb3JtYXRJRCA9
IGluZm8uY29kZWNOYW1lLnZhbHVlOworICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKGFzYmQpOwor
ICAgIGF1dG8gZXJyb3IgPSBQQUw6OkF1ZGlvRm9ybWF0R2V0UHJvcGVydHkoa0F1ZGlvRm9ybWF0
UHJvcGVydHlfRm9ybWF0SW5mbywgaW5mby5jb29raWVEYXRhLT5zaXplKCksIGluZm8uY29va2ll
RGF0YS0+ZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFp
bGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3IsIChjaGFyICopJmVycm9yKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0
RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBpbmZvLmNvb2tpZURh
dGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRhKCkpOworfQorCisjZW5kaWYKKworc3Rh
dGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMoUGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzIHByaW1hcmllcykKK3sKKyAgICBzd2l0Y2ggKHByaW1hcmllcykgeworICAg
IGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDcwOToKKyAgICAgICAgcmV0dXJu
IGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1JfNzA5XzI7CisgICAgY2FzZSBQbGF0
Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhvc3Bob3JzOgorICAgICAgICByZXR1
cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVfMzIxMzsKKyAgICBjYXNlIFBsYXRm
b3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBtOgorICAgIGNhc2UgUGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG06CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
ckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmlt
YXJpZXM6OlNtcHRlUnA0MzE6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0
aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzOjpTbXB0ZUVnNDMyOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlw
dGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclBy
aW1hcmllczo6QnQyMDIwOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlv
bkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorfQorCisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRy
YW5zZmVyRnVuY3Rpb24oUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIGNoYXJh
Y3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgeworICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOToKKyAgICAgICAgcmV0
dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUyNDBtOgorICAgICAg
ICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDIw
ODQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ6CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDoKKyAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgY2FzZSBQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxOgorICAgICAg
ICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVf
U1RfNDI4XzE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkFyaWJTdGRCNjdIbGc6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9u
VHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMToKKyAgICAgICAgcmV0dXJuIFBBTDo6
Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NS
R0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVu
Y3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NN
WUNiQ1JNYXRyaXgoUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyBjb2VmZmljaWVudHMp
Cit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9N
YXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0YW50THVtaW5hbmNlOgorICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7Cisg
ICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDQ3MGJnOgorICAgIGNh
c2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6U21wdGUxNzBtOgorICAgICAgICBy
ZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFfNDsKKyAgICBjYXNlIFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0NzA5OgorICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbyhjb25zdCBUcmFja0lu
Zm8mIGluZm8pCit7CisgICAgQVNTRVJUKGluZm8uaXNWaWRlbygpIHx8IGluZm8uaXNBdWRpbygp
KTsKKworICAgIGlmIChpbmZvLmlzQXVkaW8oKSkgeworICAgICAgICBhdXRvJiBhdWRpb0luZm8g
PSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KGluZm8pOworICAgICAgICBpZiAoIWF1ZGlvSW5m
by5jb29raWVEYXRhIHx8ICFhdWRpb0luZm8uY29va2llRGF0YS0+c2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3dpdGNoIChhdWRpb0luZm8uY29kZWNOYW1l
LnZhbHVlKSB7CisjaWYgRU5BQkxFKE9QVVMpCisgICAgICAgIGNhc2UgJ29wdXMnOgorICAgICAg
ICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbihhdWRpb0luZm8pOworI2VuZGlmCisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICAgICAgY2Fz
ZSAndm9yYic6CisgICAgICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oYXVkaW9JbmZvKTsKKyNlbmRpZgorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvJiB2aWRlb0luZm8gPSBkb3duY2FzdDxjb25zdCBWaWRlb0luZm8+KGluZm8pOworCisg
ICAgYXV0byBkYXRhID0gdmlkZW9JbmZvLmF0b21EYXRhLT5jcmVhdGVDRkRhdGEoKTsKKyAgICBB
U1NFUlQodmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAwOScgfHwgdmlkZW9JbmZvLmNvZGVjTmFt
ZSA9PSAndnAwOCcpOworICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNU
UigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0
YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmln
dXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01G
b3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21z
IH07CisgICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJh
dGlvbkRpY3QuZ2V0KCkgfTsKKworICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5mdWxsUmFu
Z2UgJiYgKnZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxSYW5nZSkgeworICAgICAgICBleHRlbnNp
b25zS2V5cy5hcHBlbmQoUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFu
Z2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVl
KTsKKyAgICB9CisKKyAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UucHJpbWFyaWVzKSB7Cisg
ICAgICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFy
aWVzKCp2aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJpZXMpKSB7CisgICAgICAgICAgICBleHRl
bnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7CisgICAg
ICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAodmlkZW9JbmZvLmNvbG9yU3BhY2UudHJhbnNmZXIpIHsKKyAg
ICAgICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1
bmN0aW9uKCp2aWRlb0luZm8uY29sb3JTcGFjZS50cmFuc2ZlcikpIHsKKyAgICAgICAgICAgIGV4
dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25LZXkpOwor
ICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2ZlckZ1bmN0aW9uKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgp
IHsKKyAgICAgICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KCp2
aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgpKSB7CisgICAgICAgICAgICBleHRlbnNpb25zS2V5
cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7CisgICAgICAgICAgICBleHRl
bnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh
dXRvIGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBl
eHRlbnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgQ01WaWRlb0NvZGVj
VHlwZSBjb2RlYyA9IHZpZGVvSW5mby5jb2RlY05hbWUgPT0gInZwMDkiID8ga0NNVmlkZW9Db2Rl
Y1R5cGVfVlA5IDogJ3ZwMDgnOworICAgIGlmIChub0VyciAhPSBQQUw6OkNNVmlkZW9Gb3JtYXRE
ZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb2RlYywgdmlkZW9JbmZvLnNp
emUud2lkdGgoKSwgdmlkZW9JbmZvLnNpemUuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0KCksICZm
b3JtYXREZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQorCitSZXRhaW5QdHI8Q01TYW1wbGVCdWZm
ZXJSZWY+IHRvQ01TYW1wbGVCdWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzLCBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uKQoreworICAgIGlmICghc2FtcGxl
cy5pbmZvKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzY29wZUV4aXQg
PSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIHNhbXBsZXMuY2xlYXIoKTsKKyAgICB9KTsK
KworICAgIGF1dG8gZm9ybWF0ID0gZm9ybWF0RGVzY3JpcHRpb24gPyByZXRhaW5QdHIoZm9ybWF0
RGVzY3JpcHRpb24pIDogY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpzYW1w
bGVzLmluZm8oKSk7CisgICAgaWYgKCFmb3JtYXQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNvbXBsZXRlQmxvY2tCdWZmZXJzOwor
ICAgIGlmIChzYW1wbGVzLnNpemUoKSA+IDEpIHsKKyAgICAgICAgLy8gT3B0aW1pc2F0aW9uIHNv
IHRoYXQgd2UgYWxsb2NhdGUgdGhlIGVudGlyZSBDTUJsb2NrQnVmZmVyIGF0IG9uY2UgaWYgd2Ug
aGF2ZSBtb3JlIHRoYW4gb25lIHRvIHJldHVybi4KKyAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiBy
YXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gZXJyID0gUEFMOjpDTUJsb2Nr
QnVmZmVyQ3JlYXRlRW1wdHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2FtcGxlcy5zaXplKCksIDAs
ICZyYXdCbG9ja0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0Vy
ciB8fCAhcmF3QmxvY2tCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSByYXdCbG9ja0J1ZmZlcjsKKyAgICB9CisKKyAgICBW
ZWN0b3I8Q01TYW1wbGVUaW1pbmdJbmZvPiBwYWNrZXRUaW1pbmdzOworICAgIHBhY2tldFRpbWlu
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzYW1wbGVzLnNpemUoKSk7CisgICAgVmVjdG9yPHNp
emVfdD4gcGFja2V0U2l6ZXM7CisgICAgcGFja2V0U2l6ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzYW1wbGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBzYW1wbGUgOiBzYW1wbGVzKSB7Cisg
ICAgICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgRnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4+KHNhbXBsZS5kYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBhdXRvJiBkYXRhID0gc3RkOjpnZXQ8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+PihzYW1wbGUuZGF0YSk7CisgICAgICAgIGF1dG8gYmxvY2tCdWZmZXIgPSBkYXRhLT5j
cmVhdGVDTUJsb2NrQnVmZmVyKCk7CisgICAgICAgIGlmICghYmxvY2tCdWZmZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoIWNvbXBsZXRlQmxvY2tCdWZmZXJz
KQorICAgICAgICAgICAgY29tcGxldGVCbG9ja0J1ZmZlcnMgPSBXVEZNb3ZlKGJsb2NrQnVmZmVy
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1
ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShjb21wbGV0ZUJsb2NrQnVmZmVycy5nZXQoKSwgYmxv
Y2tCdWZmZXIuZ2V0KCksIDAsIDAsIDApOworICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9j
a0J1ZmZlck5vRXJyKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgICAgIHBhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjp0b0NNVGltZShzYW1wbGUuZHVy
YXRpb24pLCBQQUw6OnRvQ01UaW1lKHNhbXBsZS5wcmVzZW50YXRpb25UaW1lKSwgUEFMOjp0b0NN
VGltZShzYW1wbGUuZGVjb2RlVGltZSkgfSk7CisgICAgICAgIHBhY2tldFNpemVzLmFwcGVuZChk
YXRhLT5zaXplKCkpOworICAgIH0KKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1
ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKGF1dG8gZXJyID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckNy
ZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIGNvbXBsZXRlQmxvY2tCdWZmZXJzLmdldCgp
LCBmb3JtYXQuZ2V0KCksIHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0VGltaW5ncy5zaXplKCks
IHBhY2tldFRpbWluZ3MuZGF0YSgpLCBwYWNrZXRTaXplcy5zaXplKCksIHBhY2tldFNpemVzLmRh
dGEoKSwgJnJhd1NhbXBsZUJ1ZmZlcikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
aWYgKHNhbXBsZXMuaXNWaWRlbygpICYmIHNhbXBsZXMuc2l6ZSgpKSB7CisgICAgICAgIGF1dG8g
YXR0YWNobWVudHNBcnJheSA9IFBBTDo6Q01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50
c0FycmF5KHJhd1NhbXBsZUJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChhdHRhY2htZW50
c0FycmF5KTsKKyAgICAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFj
aG1lbnRzQXJyYXkpKSA9PSBzYW1wbGVzLnNpemUoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBp
ID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRz
ID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgaWYgKCEoc2FtcGxl
c1tpXS5mbGFncyAmIE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jKSkKKyAgICAgICAg
ICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVB
dHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNLmNwcAppbmRleCBhZTE2NDE0ZjIxYzY4NDZjMTg5NzcwOWUxNDI0ZTRhNmE0
Yjc2MWEwLi41MTM3OTEyZGE5MzU4YjM4NzA2MmNiODYyYmZjNGU0N2NlZTg1NTdhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCIKKyNp
bmNsdWRlICJDTVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTM2
LDI1ICszNywxOCBAQAogI2luY2x1ZGUgIk1lZGlhU2FtcGxlQVZGT2JqQy5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2Vy
LmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29j
b2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZVdlYk0uaCIKICNpbmNsdWRlICJXZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3
Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oPgogI2luY2x1ZGUgPHdlYm0vd2VibV9wYXJzZXIuaD4KICNpbmNsdWRlIDx3dGYvQWxnb3Jp
dGhtcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpc3QuaD4KLSNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRl
IDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CiAjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vT1NW
YXJpYW50U1BJLmg+CiAKICNpbmNsdWRlICJDb3JlVmlkZW9Tb2Z0TGluay5oIgotI2luY2x1ZGUg
IlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCi0jaW5jbHVkZSA8cGFsL2NmL0NvcmVNZWRpYVNvZnRM
aW5rLmg+CiAKIFdURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKHdlYm06OnN3YXApOwogCkBAIC0y
MzUsMjUgKzIyOSw2IEBAIHRlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3VtZW50PHdlYm06OklkPiB7
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKLSAgICBzdGF0aWMgQVNDSUlMaXRlcmFsIHRv
U3RyaW5nKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlIHN0YXRlKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpOb25lOiByZXR1cm4gIk5vbmUiX3M7Ci0gICAgICAg
IGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdFYm1s
OiByZXR1cm4gIlJlYWRpbmdFYm1sIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkRWJtbDogcmV0dXJuICJSZWFkRWJtbCJfczsKLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGlu
Z1NlZ21lbnQ6IHJldHVybiAiUmVhZGluZ1NlZ21lbnQiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29y
ZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJlYWRpbmdJbmZvOiByZXR1cm4gIlJl
YWRpbmdJbmZvIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OlN0YXRlOjpSZWFkSW5mbzogcmV0dXJuICJSZWFkSW5mbyJfczsKLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1RyYWNrczogcmV0
dXJuICJSZWFkaW5nVHJhY2tzIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nVHJhY2s6IHJldHVybiAiUmVhZGluZ1RyYWNrIl9z
OwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpS
ZWFkVHJhY2s6IHJldHVybiAiUmVhZFRyYWNrIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5nQ2x1c3RlcjogcmV0dXJuICJSZWFk
aW5nQ2x1c3RlciJfczsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIlVua25vd24iX3M7Ci0g
ICAgfQotfTsKLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTI3NywxNCArMjUyLDE0IEBAIHN0YXRpYyBTdGF0dXMgc2VnbWVudFJlYWRFcnJvclRvV2VibVN0
YXR1cyhTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6OlJlYWRFcnJvCiB7CiAgICAgc3dpdGNo
IChlcnJvcikgewogICAgIGNhc2UgU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJy
b3I6OkVuZE9mRmlsZTogcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtFbmRPZkZpbGUpOwotICAgIGNh
c2UgU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkZhdGFsRXJyb3I6IHJl
dHVybiBTdGF0dXMoU3RhdHVzOjpDb2RlKFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkVycm9yQ29k
ZTo6UmVhZGVyRmFpbGVkKSk7CisgICAgY2FzZSBTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ6
OlJlYWRFcnJvcjo6RmF0YWxFcnJvcjogcmV0dXJuIFN0YXR1cyhTdGF0dXM6OkNvZGUoV2ViTVBh
cnNlcjo6RXJyb3JDb2RlOjpSZWFkZXJGYWlsZWQpKTsKICAgICB9CiB9CiAKLWNsYXNzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFkZXIgZmluYWwgOiBwdWJsaWMgd2VibTo6UmVh
ZGVyIHsKK2NsYXNzIFdlYk1QYXJzZXI6OlNlZ21lbnRSZWFkZXIgZmluYWwgOiBwdWJsaWMgd2Vi
bTo6UmVhZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2
b2lkIGFwcGVuZFNlZ21lbnQoU2VnbWVudCYmIHNlZ21lbnQpCisgICAgdm9pZCBhcHBlbmRTZWdt
ZW50KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiAgICAgewogICAgICAg
ICBtX2RhdGEucHVzaF9iYWNrKFdURk1vdmUoc2VnbWVudCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50U2VnbWVudCA9PSBtX2RhdGEuZW5kKCkpCkBAIC0zNjUsMjEgKzM0MCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprV291bGRCbG9jayk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgRnJlZVNoYXJlZEJ1ZmZlcih2b2lkKiByZWZjb24sIHZvaWQqLCBzaXpl
X3QpCisgICAgU3RhdHVzIFJlYWRJbnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgU2hhcmVkQnVm
ZmVyQnVpbGRlciYgb3V0cHV0QnVmZmVyLCB1aW50NjRfdCogbnVtQWN0dWFsbHlSZWFkKQogICAg
IHsKLSAgICAgICAgYXV0byogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxTaGFyZWRCdWZmZXIq
PihyZWZjb24pOwotICAgICAgICBidWZmZXItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgU3RhdHVz
IFJlYWRJbnRvKHN0ZDo6c2l6ZV90IG51bVRvUmVhZCwgQ01CbG9ja0J1ZmZlclJlZiBvdXRwdXRC
dWZmZXIsIHVpbnQ2NF90KiBudW1BY3R1YWxseVJlYWQpCi0gICAgewotICAgICAgICBBU1NFUlQo
b3V0cHV0QnVmZmVyICYmIG51bUFjdHVhbGx5UmVhZCk7CisgICAgICAgIEFTU0VSVChudW1BY3R1
YWxseVJlYWQpOwogICAgICAgICBpZiAoIW51bUFjdHVhbGx5UmVhZCkKICAgICAgICAgICAgIHJl
dHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKIAogICAgICAgICAqbnVtQWN0
dWFsbHlSZWFkID0gMDsKLSAgICAgICAgaWYgKCFvdXRwdXRCdWZmZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CiAKICAgICAgICAgd2hpbGUg
KG51bVRvUmVhZCAmJiBtX2N1cnJlbnRTZWdtZW50ICE9IG1fZGF0YS5lbmQoKSkgewogICAgICAg
ICAgICAgYXV0byYgY3VycmVudFNlZ21lbnQgPSAqbV9jdXJyZW50U2VnbWVudDsKQEAgLTM4OSw0
NCArMzU2LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNoYXJlZEJ1ZmZlciA9IGN1
cnJlbnRTZWdtZW50LmdldFNoYXJlZEJ1ZmZlcigpOwotICAgICAgICAgICAgQ01CbG9ja0J1ZmZl
clJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgICAgICB1aW50NjRfdCBsYXN0
UmVhZCA9IDA7CisgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByYXdCbG9ja0J1ZmZl
cjsKICAgICAgICAgICAgIGlmICghc2hhcmVkQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgLy8g
V2UgY291bGQgcG90ZW50aWFsbHkgYWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiBuZWVkZWQgaWYg
dGhlIHJlYWQgaXMgcGFydGlhbC4KLSAgICAgICAgICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01C
bG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxs
cHRyLCBudW1Ub1JlYWQsIGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG51bVRvUmVh
ZCwga0NNQmxvY2tCdWZmZXJBc3N1cmVNZW1vcnlOb3dGbGFnLCAmcmF3QmxvY2tCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIGlmIChlcnIgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwotICAg
ICAgICAgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICAgICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAg
ICAgZXJyID0gUEFMOjpDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIocmF3QmxvY2tCdWZmZXIs
IDAsICZzZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVy
RGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciAhPSBrQ01CbG9ja0J1ZmZlck5vRXJyKQor
ICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXIudHJ5UmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Ub1JlYWQpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZWFkUmVzdWx0ID0gY3VycmVudFNlZ21lbnQucmVhZChtX3Bv
c2l0aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkLCBibG9ja0J1ZmZlckRhdGEpOworICAgICAg
ICAgICAgICAgIGJ1ZmZlci5yZXNpemUobnVtVG9SZWFkKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlYWRSZXN1bHQgPSBjdXJyZW50U2VnbWVudC5yZWFkKG1fcG9zaXRpb25XaXRoaW5TZWdtZW50
LCBudW1Ub1JlYWQsIGJ1ZmZlci5kYXRhKCkpOwogICAgICAgICAgICAgICAgIGlmICghcmVhZFJl
c3VsdC5oYXNfdmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRSZWFk
RXJyb3JUb1dlYm1TdGF0dXMocmVhZFJlc3VsdC5lcnJvcigpKTsKLSAgICAgICAgICAgICAgICBs
YXN0UmVhZCA9IHJlYWRSZXN1bHQudmFsdWUoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVE9ETzogY291bGQgd2Ugb25seSBjcmVhdGUgYSBuZXcgQ01CbG9ja0J1
ZmZlciBpZiB0aGUgYmFja2VuZCBtZW1vcnkgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgb25l
PwotICAgICAgICAgICAgICAgIHNpemVfdCBjYW5SZWFkID0gc3RkOjptaW48c2l6ZV90PihudW1U
b1JlYWQsIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpIC0gbV9wb3NpdGlvbldpdGhpblNlZ21lbnQpOwot
ICAgICAgICAgICAgICAgIC8vIEZyb20gQ01CbG9ja0J1ZmZlckN1c3RvbUJsb2NrU291cmNlIGRv
Y3VtZW50YXRpb246Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGZvciA2NC1iaXQgYXJj
aGl0ZWN0dXJlcywgdGhpcyBzdHJ1Y3QgY29udGFpbnMgbWlzYWxpZ25lZCBmdW5jdGlvbiBwb2lu
dGVycy4KLSAgICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBsaW5rLXRpbWUgaXNzdWVzLCBpdCBp
cyByZWNvbW1lbmRlZCB0aGF0IGNsaWVudHMgZmlsbCBDTUJsb2NrQnVmZmVyQ3VzdG9tQmxvY2tT
b3VyY2UncyBmdW5jdGlvbiBwb2ludGVyIGZpZWxkcwotICAgICAgICAgICAgICAgIC8vIGJ5IHVz
aW5nIGFzc2lnbm1lbnQgc3RhdGVtZW50cywgcmF0aGVyIHRoYW4gZGVjbGFyaW5nIHRoZW0gYXMg
Z2xvYmFsIG9yIHN0YXRpYyBzdHJ1Y3RzLgotICAgICAgICAgICAgICAgIENNQmxvY2tCdWZmZXJD
dXN0b21CbG9ja1NvdXJjZSBhbGxvY2F0b3I7Ci0gICAgICAgICAgICAgICAgYWxsb2NhdG9yLnZl
cnNpb24gPSAwOwotICAgICAgICAgICAgICAgIGFsbG9jYXRvci5BbGxvY2F0ZUJsb2NrID0gbnVs
bHB0cjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IuRnJlZUJsb2NrID0gRnJlZVNoYXJlZEJ1
ZmZlcjsKLSAgICAgICAgICAgICAgICBhbGxvY2F0b3IucmVmQ29uID0gc2hhcmVkQnVmZmVyLmdl
dCgpOwotICAgICAgICAgICAgICAgIHNoYXJlZEJ1ZmZlci0+cmVmKCk7Ci0gICAgICAgICAgICAg
ICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sobnVs
bHB0ciwgc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNoYXJlZEJ1ZmZl
ci0+ZGF0YSgpKSksIHNoYXJlZEJ1ZmZlci0+c2l6ZSgpLCBudWxscHRyLCAmYWxsb2NhdG9yLCBt
X3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgY2FuUmVhZCwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKLSAgICAg
ICAgICAgICAgICBsYXN0UmVhZCA9IGNhblJlYWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhdXRvIGJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAg
ICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckFwcGVuZEJ1ZmZlclJlZmVyZW5jZShvdXRw
dXRCdWZmZXIsIHJhd0Jsb2NrQnVmZmVyLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIGlmIChlcnIg
IT0ga0NNQmxvY2tCdWZmZXJOb0VycikKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CisgICAgICAgICAgICAgICAgYnVmZmVyLnJlc2l6ZShy
ZWFkUmVzdWx0LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHJhd0Jsb2NrQnVmZmVyID0gc2hhcmVkQnVmZmVyLT5nZXRDb250aWd1
b3VzRGF0YShtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCwgbnVtVG9SZWFkKTsKKyAgICAgICAgICAg
IGF1dG8gbGFzdFJlYWQgPSByYXdCbG9ja0J1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgb3V0
cHV0QnVmZmVyLmFwcGVuZCgqcmF3QmxvY2tCdWZmZXIpOwogICAgICAgICAgICAgbV9wb3NpdGlv
biArPSBsYXN0UmVhZDsKICAgICAgICAgICAgICpudW1BY3R1YWxseVJlYWQgKz0gbGFzdFJlYWQ7
CiAgICAgICAgICAgICBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCArPSBsYXN0UmVhZDsKQEAgLTQ5
MSw4ICs0MzYsOCBAQCBwcml2YXRlOgogICAgICAgICBtX3Bvc2l0aW9uV2l0aGluU2VnbWVudCA9
IDA7CiAgICAgfQogCi0gICAgU3RkTGlzdDxTZWdtZW50PiBtX2RhdGE7Ci0gICAgU3RkTGlzdDxT
ZWdtZW50Pjo6aXRlcmF0b3IgbV9jdXJyZW50U2VnbWVudCB7IG1fZGF0YS5lbmQoKSB9OworICAg
IFN0ZExpc3Q8U291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50PiBtX2RhdGE7CisgICAgU3RkTGlz
dDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+OjppdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50
IHsgbV9kYXRhLmVuZCgpIH07CiAgICAgc2l6ZV90IG1fcG9zaXRpb24geyAwIH07CiAgICAgc2l6
ZV90IG1fcG9zaXRpb25XaXRoaW5TZWdtZW50IHsgMCB9OwogfTsKQEAgLTU4NCwxMzkgKzUyOSw0
OCBAQCBzdGF0aWMgYm9vbCBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkKICNlbmRpZiAvLyAhVVNFKEFQ
UExFX0lOVEVSTkFMX1NESykKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dl
Yk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQorV2ViTVBhcnNlcjo6V2ViTVBhcnNlcihDYWxsYmFj
ayYgY2FsbGJhY2spCisgICAgOiBtX3BhcnNlcihtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2ND
aGVjazxXZWJtUGFyc2VyPigpKQorICAgICwgbV9yZWFkZXIobWFrZVVuaXF1ZVJlZjxTZWdtZW50
UmVhZGVyPigpKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKIHsKLSAgICByZXR1cm4gUGxh
dGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjp3ZWJNRm9ybWF0UmVhZGVyRW5hYmxlZCgpICYmIGNh
bkxvYWRGb3JtYXRSZWFkZXIoKSAmJiBpc1dlYm1QYXJzZXJBdmFpbGFibGUoKTsKIH0KIAotTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29u
dGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCitXZWJNUGFyc2VyOjp+
V2ViTVBhcnNlcigpCiB7Ci0jaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCi0gICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAg
ICBhdXRvIGNvbnRhaW5lclR5cGUgPSB0eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBib29sIGlz
QXVkaW9Db250YWluZXJUeXBlID0gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShjb250YWluZXJUeXBl
LCAiYXVkaW8vd2VibSIpOwotICAgIGJvb2wgaXNWaWRlb0NvbnRhaW5lclR5cGUgPSBlcXVhbEln
bm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJ2aWRlby93ZWJtIik7Ci0gICAgaWYgKCFp
c0F1ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNWaWRlb0NvbnRhaW5lclR5cGUpCi0gICAgICAgIHJl
dHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotICAg
IAotICAgIGJvb2wgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlID0gZmFsc2U7Ci0jaWYgRU5BQkxF
KFZPUkJJUykKLSAgICBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgfD0gaXNWb3JiaXNEZWNvZGVy
QXZhaWxhYmxlKCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoT1BVUykKLSAgICBpc0FueUF1ZGlvQ29k
ZWNBdmFpbGFibGUgfD0gaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOwotI2VuZGlmCi0KLSAgICBp
ZiAoaXNBdWRpb0NvbnRhaW5lclR5cGUgJiYgIWlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSkKLSAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0
ZWQ7Ci0KLSAgICBib29sIGlzQW55Q29kZWNBdmFpbGFibGUgPSBpc0FueUF1ZGlvQ29kZWNBdmFp
bGFibGU7Ci0jaWYgRU5BQkxFKFZQOSkKLSAgICBpc0FueUNvZGVjQXZhaWxhYmxlIHw9IGlzVlA5
RGVjb2RlckF2YWlsYWJsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAoIWlzQW55Q29kZWNBdmFpbGFi
bGUpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOwotCi0gICAgYXV0byBjb2RlY3MgPSB0eXBlLmNvZGVjcygpOwotICAgIGlmIChj
b2RlY3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpNYXlCZVN1cHBvcnRlZDsKLQotICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3Mp
IHsKLSNpZiBFTkFCTEUoVlA5KQotICAgICAgICBpZiAoY29kZWMuc3RhcnRzV2l0aCgidnAwOSIp
IHx8IGNvZGVjLnN0YXJ0c1dpdGgoInZwMDgiKSB8fCBlcXVhbChjb2RlYywgInZwOCIpIHx8IGVx
dWFsKGNvZGVjLCAidnA5IikpIHsKLQotICAgICAgICAgICAgaWYgKCFpc1ZQOURlY29kZXJBdmFp
bGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgYXV0byBjb2RlY1BhcmFtZXRl
cnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKGNvZGVjKTsKLSAgICAgICAgICAgIGlmICghY29k
ZWNQYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpT
dXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBpZiAoIWlzVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoKmNvZGVjUGFyYW1ldGVycykpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBw
b3J0ZWQ7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKFZQOSkKLQotI2lmIEVOQUJMRShWT1JCSVMpCi0gICAgICAgIGlmIChjb2RlYyA9PSAidm9y
YmlzIikgewotICAgICAgICAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05v
dFN1cHBvcnRlZDsKLQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAv
LyBFTkFCTEUoVk9SQklTKQotCi0jaWYgRU5BQkxFKE9QVVMpCi0gICAgICAgIGlmIChjb2RlYyA9
PSAib3B1cyIpIHsKLSAgICAgICAgICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlm
IC8vIEVOQUJMRShPUFVTKQotCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBw
b3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwotICAgIH0KLQotICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkOwotCi0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTSh0eXBlKTsKLQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
OklzTm90U3VwcG9ydGVkOwotI2VuZGlmIC8vIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMp
IHx8IEVOQUJMRShPUFVTKQotfQotCi1SZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQotewot
ICAgIGlmIChpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKHR5cGUpICE9IE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCi0gICAgOiBt
X3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+KCkpCit2b2lkIFdlYk1QYXJzZXI6
OnJlc2V0U3RhdGUoKQogewotICAgIGlmIChpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKLSAgICAg
ICAgbV9wYXJzZXIgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxXZWJtUGFyc2Vy
PigpOworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGlmICht
X3BhcnNlcikKKyAgICAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKKyAgICBtX3JlYWRlci0+cmVz
ZXQoKTsKKyAgICBtX3N0YXRlID0gbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9jZXNzZWQgPyBT
dGF0ZTo6UmVhZGluZ1NlZ21lbnQgOiBTdGF0ZTo6Tm9uZTsKKyAgICBtX2luaXRpYWxpemF0aW9u
U2VnbWVudCA9IG51bGxwdHI7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJl
ZCA9IGZhbHNlOworICAgIG1fY3VycmVudEJsb2NrLnJlc2V0KCk7CisgICAgZm9yIChhdXRvJiB0
cmFjayA6IG1fdHJhY2tzKQorICAgICAgICB0cmFjay0+cmVzZXQoKTsKIH0KIAotU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6flNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQordm9pZCBXZWJNUGFyc2Vy
OjpyZXNldCgpCiB7CisgICAgbV9yZWFkZXItPnJlc2V0KCk7CisgICAgbV9wYXJzZXItPkRpZFNl
ZWsoKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmREYXRhKFNlZ21l
bnQmJiBzZWdtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIsIEFwcGVuZEZsYWdzIGFwcGVuZEZsYWdzKQoraW50IFdlYk1QYXJzZXI6OnBhcnNlKFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKCFtX3BhcnNlcikg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIsIGFwcGVu
ZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVpdHkiIDog
IiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIpOwotCi0gICAgaWYgKGFwcGVuZEZs
YWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7Ci0gICAgICAgIG1fcmVhZGVyLT5y
ZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwotICAgIH0KKyAgICBpZiAoIW1f
cGFyc2VyKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgbV9yZWFkZXItPmFwcGVuZFNlZ21lbnQo
V1RGTW92ZShzZWdtZW50KSk7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBtX3N0YXR1
cyA9IG1fcGFyc2VyLT5GZWVkKHRoaXMsICZtX3JlYWRlcik7CiAgICAgICAgIGlmIChtX3N0YXR1
cy5vaygpIHx8IG1fc3RhdHVzLmNvZGUgPT0gU3RhdHVzOjprRW5kT2ZGaWxlIHx8IG1fc3RhdHVz
LmNvZGUgPT0gU3RhdHVzOjprV291bGRCbG9jaykgewogICAgICAgICAgICAgbV9yZWFkZXItPnJl
Y2xhaW1TZWdtZW50cygpOwotCi0gICAgICAgICAgICAvLyBBdWRpbyB0cmFja3MgYXJlIGdyb3Vw
ZWQgaW50byBtZXRhLXNhbXBsZXMgb2YgYSBkdXJhdGlvbiBubyBtb3JlIHRoYW4gbV9taW5pbXVt
U2FtcGxlRHVyYXRpb24uCi0gICAgICAgICAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUs
IG5vIG1vcmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBlbWl0IGFu
eSBwZW5kaW5nCi0gICAgICAgICAgICAvLyBhdWRpbyBidWZmZXJzLgotICAgICAgICAgICAgZmx1
c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0KLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChtX3N0YXR1cy5jb2RlICE9IHN0YXRpY19jYXN0PGludDMyX3Q+KEVy
cm9yQ29kZTo6UmVjZWl2ZWRFYm1sSW5zaWRlU2VnbWVudCkpCkBAIC03NDEsNjEgKzU5NSwyNCBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYmIHNlZ21l
bnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaQogICAgICAgICBjb250aW51ZTsKICAgICB9CiAKLSAg
ICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgInN0YXR1cy5jb2RlKCIsIG1f
c3RhdHVzLmNvZGUsICIpIik7Ci0gICAgbV9jYWxsT25DbGllbnRUaHJlYWRDYWxsYmFjayhbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNvZGUgPSBtX3N0YXR1cy5jb2RlXSB7
Ci0gICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKQot
ICAgICAgICAgICAgbV9kaWRFbmNvdW50ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhjb2Rl
KTsKLSAgICB9KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFEYXRhKCkKLXsKLX0KLQotdm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJ
RChib29sLCB1aW50NjRfdCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVp
bnQ2NF90KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBtX3N0YXR1cy5jb2RlOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnJlc2V0UGFyc2VyU3RhdGUoKQordm9pZCBXZWJNUGFyc2VyOjpzZXRMb2dnZXIoY29uc3QgTG9n
Z2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCiB7Ci0gICAgSU5GT19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7Ci0gICAgaWYgKG1fcGFyc2VyKQotICAgICAgICBt
X3BhcnNlci0+RGlkU2VlaygpOwotICAgIG1fcmVhZGVyLT5yZXNldCgpOwotICAgIG1fc3RhdGUg
PSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/IFN0YXRlOjpSZWFkaW5nU2VnbWVu
dCA6IFN0YXRlOjpOb25lOwotICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50ID0gbnVsbHB0cjsK
LSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFsc2U7Ci0gICAgbV9j
dXJyZW50QmxvY2sucmVzZXQoKTsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpCi0g
ICAgICAgIHRyYWNrLT5yZXNldCgpOworICAgIG1fbG9nZ2VyID0gJmxvZ2dlcjsKKyAgICBtX2xv
Z0lkZW50aWZpZXIgPSBsb2dJZGVudGlmaWVyOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OmludmFsaWRhdGUoKQordm9pZCBXZWJNUGFyc2VyOjppbnZhbGlkYXRlKCkKIHsKLSAg
ICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKLQogICAgIG1fcGFyc2VyID0g
bnVsbHB0cjsKICAgICBtX3RyYWNrcy5jbGVhcigpOwogICAgIG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50ID0gbnVsbHB0cjsKICAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwogfQogCi12b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29u
c3Qgdm9pZCogbG9nSWRlbnRpZmllcikKLXsKLSAgICBtX2xvZ2dlciA9ICZsb2dnZXI7Ci0gICAg
bV9sb2dJZGVudGlmaWVyID0gbG9nSWRlbnRpZmllcjsKLX0KLQotYXV0byBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJlcikg
LT4gVHJhY2tEYXRhKgorYXV0byBXZWJNUGFyc2VyOjp0cmFja0RhdGFGb3JUcmFja051bWJlcih1
aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRhKgogewogICAgIGZvciAoYXV0byYgdHJh
Y2sgOiBtX3RyYWNrcykgewogICAgICAgICBpZiAodHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVy
LmlzX3ByZXNlbnQoKSAmJiB0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIudmFsdWUoKSA9PSB0
cmFja051bWJlcikKQEAgLTgwNCw3ICs2MjEsNyBAQCBhdXRvIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAtPiBUcgog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25FbGVtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQWN0aW9uKiBh
Y3Rpb24pCitTdGF0dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4oY29uc3QgRWxlbWVudE1l
dGFkYXRhJiBtZXRhZGF0YSwgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgQVNTRVJUKGFjdGlvbik7
CiAgICAgaWYgKCFhY3Rpb24pCkBAIC04NzYsNyArNjkzLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uRWxlbWVudEJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRh
dGEsIEEKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3Rh
dHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWxlbWVudEVuZChjb25zdCBFbGVtZW50TWV0
YWRhdGEmIG1ldGFkYXRhKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWxlbWVudEVuZChjb25zdCBF
bGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIpOwogCkBAIC04OTIsMjQgKzcwOSwyMCBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEp
CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgInN0YXRlKCIsIG9sZFN0
YXRlLCAiLT4iLCBtX3N0YXRlLCAiKSwgaWQoIiwgbWV0YWRhdGEuaWQsICIpLCBzaXplKCIsIG1l
dGFkYXRhLnNpemUsICIpIik7CiAKICAgICBpZiAobWV0YWRhdGEuaWQgPT0gSWQ6OmtUcmFja3Mp
IHsKLSAgICAgICAgaWYgKCFtX2tleUlkcy5pc0VtcHR5KCkgJiYgIW1fZGlkUHJvdmlkZUNvbnRl
bnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNrKSB7CisgICAg
ICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpICYmICFtX2NhbGxiYWNrLmNhbkRlY3J5cHQoKSkg
ewogICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJFbmNv
dW50ZXJlZCBlbmNyeXB0ZWQgY29udGVudCB3aXRob3V0IGFuIGtleSByZXF1ZXN0IGNhbGxiYWNr
Iik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShFcnJvckNvZGU6OkNv
bnRlbnRFbmNyeXB0ZWQpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2luaXRpYWxpemF0
aW9uU2VnbWVudEVuY291bnRlcmVkKSB7Ci0gICAgICAgICAgICBtX2NhbGxPbkNsaWVudFRocmVh
ZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgaW5pdGlhbGl6
YXRpb25TZWdtZW50ID0gV1RGTW92ZSgqbV9pbml0aWFsaXphdGlvblNlZ21lbnQpXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2Fs
bGJhY2spCi0gICAgICAgICAgICAgICAgICAgIG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFD
YWxsYmFjayhXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCkpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVy
ZWQpCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShXVEZN
b3ZlKCptX2luaXRpYWxpemF0aW9uU2VnbWVudCkpOwogICAgICAgICBtX2luaXRpYWxpemF0aW9u
U2VnbWVudEVuY291bnRlcmVkID0gZmFsc2U7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnRQcm9jZXNzZWQg
PSB0cnVlOwogCiAgICAgICAgIGlmICghbV9rZXlJZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGtleUlkUGFpciA6IG1fa2V5SWRzKQotICAgICAgICAgICAgICAgIG1fZGlk
UHJvdmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxi
YWNrKFdURk1vdmUoa2V5SWRQYWlyLnNlY29uZCksIGtleUlkUGFpci5maXJzdCk7CisgICAgICAg
ICAgICAgICAgbV9jYWxsYmFjay5jb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZv
clRyYWNrSUQoV1RGTW92ZShrZXlJZFBhaXIuc2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0KTsKICAg
ICAgICAgfQogICAgICAgICBtX2tleUlkcy5jbGVhcigpOwogICAgIH0KQEAgLTkxNyw3ICs3MzAs
NyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwoY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKK1N0YXR1cyBXZWJNUGFyc2Vy
OjpPbkVibWwoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKIHsKICAg
ICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTI1LDcgKzczOCw3
IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVibWwoY29uc3QgRWxlbWVudE1l
dGFkYXRhJiwgY29uc3QgRWJtbCYgZWJtbCkKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OkNvZGUoRXJyb3JDb2RlOjpJbnZhbGlkRG9jVHlwZSkpOwogCiAgICAgbV9pbml0aWFsaXphdGlv
blNlZ21lbnRFbmNvdW50ZXJlZCA9IHRydWU7Ci0gICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQg
PSBtYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazxJbml0aWFsaXphdGlvblNlZ21lbnQ+
KCk7CisgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBtYWtlVW5pcXVlV2l0aG91dEZhc3RN
YWxsb2NDaGVjazxTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudD4oKTsK
ICAgICAvLyBUT0RPOiBTZXR0aW5nIHRoaXMgdG8gZmFsc2UgaGVyZSwgd2lsbCBwcmV2ZW50IGFk
ZGluZyBhIG5ldyBtZWRpYSBzZWdtZW50IHNob3VsZCBhCiAgICAgLy8gcGFydGlhbCBpbml0IHNl
Z21lbnQgYmUgZW5jb3VudGVyZWQgYWZ0ZXIgYSBjYWxsIHRvIHNvdXJjZUJ1ZmZlci5hYm9ydCgp
LgogICAgIC8vIEl0J3MgcHJvYmFibHkgZmluZSBhcyBuby1vbmUgaW4gdGhlaXIgcmlnaHQgbWlu
ZCBzaG91bGQgc2VuZCBwYXJ0aWFsIGluaXQgc2VnbWVudCBvbmx5CkBAIC05MzYsNyArNzQ5LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tD
b21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TZWdtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9uKiBhY3Rpb24pCitTdGF0dXMgV2Vi
TVBhcnNlcjo6T25TZWdtZW50QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9uKiBh
Y3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAg
LTk1Myw3ICs3NjYsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TZWdtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgQWN0aW9uKiBhYwogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEluZm8mIGluZm8pCitT
dGF0dXMgV2ViTVBhcnNlcjo6T25JbmZvKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IElu
Zm8mIGluZm8pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAK
QEAgLTk2OSw3ICs3ODIsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25JbmZv
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEluZm8mIGluZm8pCiAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpPbkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBDbHVz
dGVyJiBjbHVzdGVyLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbkNsdXN0
ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBDbHVzdGVyJiBjbHVzdGVyLCBB
Y3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVS
KTsKIApAQCAtOTg1LDcgKzc5OCw3IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
bkNsdXN0ZXJCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBDbHVzCiAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3Qg
VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKK1N0YXR1cyBXZWJNUGFyc2VyOjpPblRyYWNrRW50cnko
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKIHsK
ICAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tfdHlwZS5pc19wcmVzZW50KCkgfHwgIXRyYWNrRW50
cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a09rQ29tcGxldGVkKTsKQEAgLTEwNTAsMTQgKzg2MywxNCBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFRy
YWNrRQogCiAjaWYgRU5BQkxFKFZPUkJJUykKICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9S
QklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBtX3RyYWNrcy5h
cHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRy
eSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgbV90cmFj
a3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWb3JiaXMsIHRyYWNr
RW50cnksICp0aGlzKSk7CiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0
ZWQpOwogICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKE9QVVMpCiAgICAgaWYgKGNvZGVjU3Ry
aW5nID09ICJBX09QVVMiICYmIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkgewotICAgICAgICBt
X3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6Ok9wdXMsIHRy
YWNrRW50cnksICp0aGlzLCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKSk7CisgICAgICAg
IG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywg
dHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDY2LDcgKzg3OSw3IEBAIFN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwg
Y29uc3QgVHJhY2tFCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrQmVnaW4oY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikK
K3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFk
YXRhJiwgY29uc3QgQmxvY2smIGJsb2NrLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA4MSw3ICs4OTQsNyBAQCB3ZWJt
OjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0JlZ2luKGNvbnN0IEVsZW1l
bnRNZXRhZGF0YSYsIGNvbnN0CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrRW5k
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJikKK3dlYm06OlN0YXR1cyBXZWJN
UGFyc2VyOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEJsb2NrJikK
IHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA5MCw3
ICs5MDMsNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0Vu
ZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbAogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNp
bXBsZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNl
cjo6T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNpbXBs
ZUJsb2NrJiBibG9jaywgQWN0aW9uKiBhY3Rpb24pCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTExMDUsNyArOTE4LDcgQEAgd2VibTo6U3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uU2ltcGxlQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLAogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi13
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0VuZChjb25z
dCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBTaW1wbGVCbG9jayYpCit3ZWJtOjpTdGF0dXMgV2Vi
TVBhcnNlcjo6T25TaW1wbGVCbG9ja0VuZChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBT
aW1wbGVCbG9jayYpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7
CiAKQEAgLTExMTQsNyArOTI3LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06Ok9uU2ltcGxlQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY28KICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRN
ZXRhZGF0YSYsIHdlYm06OkFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6
Ok9uQmxvY2tHcm91cEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFj
dGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIp
OwogCkBAIC0xMTI2LDcgKzkzOSw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNOjpPbkJsb2NrR3JvdXBCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhCiAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1l
dGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkKK3dlYm06OlN0YXR1
cyBXZWJNUGFyc2VyOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRh
JiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYgYmxvY2tHcm91cCkKIHsKICAgICBJTkZPX0xPR19J
Rl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKICAgICBpZiAoYmxvY2tHcm91cC5ibG9jay5pc19w
cmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcuaXNfcHJlc2VudCgpKSB7CkBA
IC0xMTM2LDE3ICs5NDksMTMgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
Ok9uQmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEKICAgICAgICAgICAg
IEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiSWdub3JpbmcgdW5rbm93biB0
cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOwogICAgICAgICAgICAgcmV0dXJuIFN0YXR1cyhT
dGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRyYWNrRGF0YS0+
dHJhY2soKS50cmFja191aWQuaXNfcHJlc2VudCgpICYmIGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRk
aW5nLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxi
YWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCA9IHRyYWNr
RGF0YS0+dHJhY2soKS50cmFja191aWQudmFsdWUoKSwgcGFkZGluZyA9IE1lZGlhVGltZShibG9j
a0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29uZHMpXSgpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKQotICAgICAg
ICAgICAgICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sodHJhY2tJRCwgcGFk
ZGluZyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHJhY2tEYXRh
LT50cmFjaygpLnRyYWNrX3VpZC5pc19wcmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3Bh
ZGRpbmcudmFsdWUoKSA+IDApCisgICAgICAgICAgICBtX2NhbGxiYWNrLnBhcnNlZFRyaW1taW5n
RGF0YSh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCksIE1lZGlhVGltZShibG9j
a0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpLCBrX3VzX2luX3NlY29uZHMpKTsKICAgICB9
CiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEm
IG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQord2Vi
bTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRh
dGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCiB7CiAgICAgQVNT
RVJUKHJlYWRlcik7CiAgICAgaWYgKCFyZWFkZXIpCkBAIC0xMTgzLDM3ICs5OTIsMjAgQEAgd2Vi
bTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRh
ZGF0YSYgbWV0YWRhdGEsIFJlYWQKICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1Jl
bWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0
YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIFBBTDo6Q01UaW1lTWFrZShibG9j
ay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVt
X2ZyYW1lcyk7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgqcmVhZGVy
LCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIE1lZGlhVGltZShibG9jay0+dGltZWNvZGUgKyBt
X2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVtX2ZyYW1lcyk7CiB9CiAK
LXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8
Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJhY2tJRCwgc3RkOjpv
cHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9mZnNldCkKLXsKLSAgICBtX2NhbGxPbkNsaWVudFRo
cmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgc2FtcGxl
QnVmZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBieXRlUmFuZ2VPZmZzZXRd
ICgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNr
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRp
YVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOwotICAg
ICAgICBpZiAoYnl0ZVJhbmdlT2Zmc2V0KQotICAgICAgICAgICAgbWVkaWFTYW1wbGUtPnNldEJ5
dGVSYW5nZU9mZnNldCgqYnl0ZVJhbmdlT2Zmc2V0KTsKLSAgICAgICAgbV9kaWRQcm92aWRlTWVk
aWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5n
KCkpOwotICAgIH0pOwotfQogCiAjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
Li4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJv
cihsb2dDaGFubmVsKCksIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIobG9nQ2xhc3NOYW1lKCks
IF9fZnVuY19fLCBwYXJzZXIoKS5sb2dJZGVudGlmaWVyKCkpLCBfX1ZBX0FSR1NfXykKIAotUmV0
YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0
YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxl
bmd0aCkgY29uc3QKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IFdlYk1QYXJzZXI6OlRyYWNrRGF0YTo6
Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0
aCkgY29uc3QKIHsKLSAgICBpZiAoIW9mZnNldCAmJiAhbGVuZ3RoICYmIFBBTDo6Q01CbG9ja0J1
ZmZlcklzUmFuZ2VDb250aWd1b3VzKG1fY29tcGxldGVCbG9ja0J1ZmZlci5nZXQoKSwgMCwgMCkp
Ci0gICAgICAgIHJldHVybiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAgQ01CbG9ja0J1ZmZl
clJlZiByYXdDb250aWd1b3VzQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAoUEFMOjpDTUJsb2Nr
QnVmZmVyQ3JlYXRlQ29udGlndW91cyhudWxscHRyLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0
KCksIG51bGxwdHIsIG51bGxwdHIsIG9mZnNldCwgbGVuZ3RoLCAwLCAmcmF3Q29udGlndW91c0J1
ZmZlcikgIT0ga0NNQmxvY2tCdWZmZXJOb0VycikgewotICAgICAgICBSRUxFQVNFX0xPR19GQVVM
VChXZWJBdWRpbywgImZhaWxlZCB0byBjcmVhdGUgY29udGlndW91cyBibG9jayBidWZmZXIiKTsK
KyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5zaXplKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihyYXdD
b250aWd1b3VzQnVmZmVyKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyLT5nZXRD
b250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiBy
ZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0
ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJh
bWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBt
ZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIGlmIChtX2NvbXBsZXRl
UGFja2V0U2l6ZSAmJiAqbV9jb21wbGV0ZVBhY2tldFNpemUgIT0gbWV0YWRhdGEuc2l6ZSkgewog
ICAgICAgICAvLyBUaGUgcGFja2V0J3MgbWV0YWRhdGEgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVu
dGx5IHBlbmRpbmcgY29tcGxldGUgcGFja2V0OyByZXN0YXJ0LgpAQCAtMTIyNCwyMCArMTAxNiw5
IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRG
cmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKCFtX2NvbXBsZXRlUGFja2V0U2l6
ZSkKICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBtZXRhZGF0YS5zaXplOwogCi0gICAg
aWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgewotICAgICAgICBBU1NFUlQoIW1fcGFydGlhbEJ5
dGVzUmVhZCk7Ci0gICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxs
cHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckNyZWF0ZUVtcHR5KGtD
RkFsbG9jYXRvckRlZmF1bHQsIG1NYXhCbG9ja0J1ZmZlckNhcGFjaXR5LCAwLCAmcmF3QmxvY2tC
dWZmZXIpOwotICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9FcnIgfHwgIXJhd0Js
b2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwotICAgICAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0g
ICAgfQotCiAgICAgd2hpbGUgKCpieXRlc1JlbWFpbmluZykgewogICAgICAgICB1aW50NjRfdCBi
eXRlc1JlYWQ7Ci0gICAgICAgIGF1dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6U2VnbWVudFJlYWRlciY+KHJlYWRlcikuUmVhZEludG8oKmJ5dGVzUmVtYWlu
aW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGF1
dG8gc3RhdHVzID0gc3RhdGljX2Nhc3Q8V2ViTVBhcnNlcjo6U2VnbWVudFJlYWRlciY+KHJlYWRl
cikuUmVhZEludG8oKmJ5dGVzUmVtYWluaW5nLCBtX2N1cnJlbnRCbG9ja0J1ZmZlciwgJmJ5dGVz
UmVhZCk7CiAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CiAgICAgICAgIG1f
cGFydGlhbEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CiAKQEAgLTEyNDksMTU2ICsxMDMwLDkyIEBA
IHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFt
ZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAgaWYgKG1fcGFydGlhbEJ5dGVzUmVhZCA8ICpt
X2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpT
dGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgaWYgKCFtX2NvbXBsZXRlQmxvY2tCdWZmZXIpCi0g
ICAgICAgIG1fY29tcGxldGVCbG9ja0J1ZmZlciA9IFdURk1vdmUobV9jdXJyZW50QmxvY2tCdWZm
ZXIpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckFw
cGVuZEJ1ZmZlclJlZmVyZW5jZShtX2NvbXBsZXRlQmxvY2tCdWZmZXIuZ2V0KCksIG1fY3VycmVu
dEJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKLSAgICAgICAgaWYgKGVycikgewotICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckFwcGVuZEJ1
ZmZlclJlZmVyZW5jZSB0byBjb21wbGV0ZSBibG9jayBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7
Ci0gICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgIH0K
KyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBtX2N1cnJlbnRCbG9ja0J1ZmZlci50YWtlKCk7
CisgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgbV9wYXJ0aWFs
Qnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNv
bnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNv
bnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQordm9pZCBXZWJN
UGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCit7Cisg
ICAgbV9rZXlGcmFtZXMuY2xlYXIoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJh
bWVzU3RhdGUoKTsKK30KKword2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFk
YXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBNZWRpYVRpbWUm
IHByZXNlbnRhdGlvblRpbWUsIGludCkKIHsKICNpZiBFTkFCTEUoVlA5KQogICAgIGF1dG8gc3Rh
dHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZyk7CiAg
ICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0dXM7CiAK
LSAgICBjcmVhdGVTYW1wbGVCdWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQsIG1l
dGFkYXRhKTsKLSAgICByZXNldCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEp
OwotICAgIFVOVVNFRF9QQVJBTShwcmVzZW50YXRpb25UaW1lKTsKLSAgICBVTlVTRURfUEFSQU0o
c2FtcGxlQ291bnQpOwotI2VuZGlmCisgICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3Np
dGlvbjsKIAotICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLX0KLQot
dm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxl
QnVmZmVyKGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50LCBj
b25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSNpZiBFTkFCTEUoVlA5KQot
ICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CiAgICAgY29uc3RleHByIHNp
emVfdCBtYXhIZWFkZXJTaXplID0gMzI7IC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIFZQOSB1
bmNvbXByZXNzZWQgaGVhZGVyIGlzIDE0NCBiaXRzIGFuZCAxMSBieXRlcyBmb3IgVlA4LiBSb3Vu
ZCBoaWdoLgotICAgIHNpemVfdCBzZWdtZW50SGVhZGVyTGVuZ3RoID0gc3RkOjptaW4obWF4SGVh
ZGVyU2l6ZSwgKm1fY29tcGxldGVQYWNrZXRTaXplKTsKKyAgICBzaXplX3Qgc2VnbWVudEhlYWRl
ckxlbmd0aCA9IHN0ZDo6bWluKG1heEhlYWRlclNpemUsIG1fY29tcGxldGVCbG9ja0J1ZmZlci0+
c2l6ZSgpKTsKICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVC
bG9ja0J1ZmZlcigwLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKICAgICBpZiAoIWNvbnRpZ3VvdXNC
dWZmZXIpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiVmlkZW9UcmFj
a0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlciBmYWlsZWQgdG8gY3JlYXRlIGNvbnRpZ3VvdXMgZGF0
YSBibG9jayIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1dG8gZXJyID0gUEFMOjpD
TUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIoY29udGlndW91c0J1ZmZlci5nZXQoKSwgMCwgbnVs
bHB0ciwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKLSAgICBpZiAoZXJyKSB7
Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXRE
YXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiVmlkZW9UcmFja0RhdGE6OmNvbnN1
bWVGcmFtZURhdGEgZmFpbGVkIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKKyAg
ICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgIH0KKyAgICBj
b25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCk7
CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7Ci0gICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAgIGlmIChjb2RlYygpID09IENvZGVjVHlw
ZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRI
ZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKICAgICAgICAgICAgIGlz
S2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVG
b3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNr
KCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlw
dGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZh
aWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1h
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNl
dEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIobV9o
ZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZQOCkgewogICAgICAgICBhdXRv
IGhlYWRlciA9IHBhcnNlVlA4RnJhbWVIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVh
ZGVyTGVuZ3RoKTsKICAgICAgICAgaWYgKGhlYWRlciAmJiBoZWFkZXItPmtleWZyYW1lKSB7CiAg
ICAgICAgICAgICBpc0tleSA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0
aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNr
KCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlw
dGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZh
aWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1h
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNl
dEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoKmhlYWRlciwg
dHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfQogCisgICAg
aWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgbV9jb21wbGV0ZU1l
ZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9uKCkpOworICAgIGVsc2UgaWYgKGZv
cm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVN
ZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7CisKICAg
ICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKLSAgICAvLyBGSVhNRTogQSBibG9jayBtaWdo
dCBjb250YWluIG1vcmUgdGhhbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IHRoaXMgZnJhbWUgaGFzIGJl
ZW4gcmVhZCBpbnRvIGBjb21wbGV0ZUJsb2NrQnVmZmVyYC4KLSAgICAvLyBCZWxvdyB3ZSBjcmVh
dGUgc2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxvY2sncyB0
aW1lY29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgotICAgIC8vIFNob3VsZG4ndCB3ZSBjcmVh
dGUganVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFtZXMgaGF2
ZSBiZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KIAogICAgIHVpbnQ2NF90IGR1
cmF0aW9uID0gMDsKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkp
Ci0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJl
c2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CisgICAgICAgIGR1cmF0
aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9uVGltZS50
aW1lU2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIENNU2FtcGxlQnVmZmVyUmVmIHJh
d1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9
IHsgUEFMOjpDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSks
IHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfTsKLSAgICBlcnIgPSBQQUw6OkNN
U2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJs
b2NrQnVmZmVyLmdldCgpLCB0aGlzLT5mb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBzYW1wbGVD
b3VudCwgMSwgJnRpbWluZywgMSwgJiptX2NvbXBsZXRlUGFja2V0U2l6ZSwgJnJhd1NhbXBsZUJ1
ZmZlcik7Ci0gICAgaWYgKGVycikgewotICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0Yo
cmF3U2FtcGxlQnVmZmVyKTsKKyAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVuZCh7IHBy
ZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZShkdXJhdGlvbiwgcHJl
c2VudGF0aW9uVGltZS50aW1lU2NhbGUoKSksIG1fY29tcGxldGVCbG9ja0J1ZmZlci5yZWxlYXNl
Tm9uTnVsbCgpLCBpc0tleSA/IE1lZGlhU2FtcGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIDogTWVk
aWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpOb25lIH0pOwogCi0gICAgYXV0byBhdHRhY2htZW50c0Fy
cmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxl
QnVmZmVyLmdldCgpLCB0cnVlKTsKLSAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7Ci0gICAg
aWYgKCFhdHRhY2htZW50c0FycmF5KSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoIkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheSByZXR1cm5lZCBO
VUxMIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWlzS2V5KSB7Ci0gICAg
ICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVu
dHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBDRk11dGFibGVEaWN0aW9u
YXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOwotICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIFBBTDo6a0NNU2FtcGxlQXR0
YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Cisg
ICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCi0gICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJh
Y2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShXVEZNb3ZlKHNh
bXBsZUJ1ZmZlciksIHRyYWNrSUQsIG1ldGFkYXRhLnBvc2l0aW9uKTsKKyAgICBBU1NFUlQoISpi
eXRlc1JlbWFpbmluZyk7CisgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtP
a0NvbXBsZXRlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwcmVzZW50YXRpb25UaW1lKTsK
ICAgICBVTlVTRURfUEFSQU0oc2FtcGxlQ291bnQpOwogICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0
YSk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CisjZW5kaWYKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpB
dWRpb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKQordm9pZCBXZWJNUGFyc2VyOjpBdWRpb1Ry
YWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAgbU51bUZyYW1lc0lu
Q29tcGxldGVCbG9jayA9IDA7Ci0gICAgbV9wYWNrZXRTaXplcy5jbGVhcigpOwotICAgIG1fcGFj
a2V0VGltaW5ncy5jbGVhcigpOwotICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOwot
ICAgIFRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWQoKTsKKyAgICBUcmFja0RhdGE6OnJlc2V0Q29t
cGxldGVkRnJhbWVzU3RhdGUoKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVh
ZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nLCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3dl
Ym06OlN0YXR1cyBXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBp
bnQpCiB7Ci0gICAgaWYgKG1fcGFja2V0VGltaW5ncy5zaXplKCkpIHsKLSAgICAgICAgYXV0byYg
bGFzdFRpbWluZyA9IG1fcGFja2V0VGltaW5ncy5sYXN0KCk7Ci0gICAgICAgIGlmIChQQUw6OkNN
VGltZUNvbXBhcmUoUEFMOjpDTVRpbWVBZGQobGFzdFRpbWluZy5kdXJhdGlvbiwgbGFzdFRpbWlu
Zy5wcmVzZW50YXRpb25UaW1lU3RhbXApLCBwcmVzZW50YXRpb25UaW1lKSkgewotICAgICAgICAg
ICAgLy8gRGlzY29udGludWl0eSBlbmNvdW50ZXJlZCwgZW1pdCB0aGUgcHJldmlvdXNseSBkZW11
eGVkIHNhbXBsZXMuCi0gICAgICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIobWV0YWRhdGEucG9z
aXRpb24pOwotICAgICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGF1
dG8gc3RhdHVzID0gcmVhZEZyYW1lRGF0YShyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmlu
Zyk7CiAgICAgaWYgKCFzdGF0dXMuY29tcGxldGVkX29rKCkpCiAgICAgICAgIHJldHVybiBzdGF0
dXM7CiAKLSAgICAvLyBBdHRlbXB0cyB0byBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIG1lbW9yeSBh
bGxvY2F0aW9ucyBkdWUgdG8gcmVwZXRpdHZlIENNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZl
cmVuY2UgY2FsbHMgaW4gcmVhZEZyYW1lRGF0YS4KLSAgICBtTnVtRnJhbWVzSW5Db21wbGV0ZUJs
b2NrKys7Ci0gICAgaWYgKG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgPiBtTWF4QmxvY2tCdWZm
ZXJDYXBhY2l0eSkKLSAgICAgICAgbU1heEJsb2NrQnVmZmVyQ2FwYWNpdHkgPSBtTnVtRnJhbWVz
SW5Db21wbGV0ZUJsb2NrOwotCi0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQotICAg
ICAgICBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOworICAgIG1f
bGFzdFBvc2l0aW9uID0gbWV0YWRhdGEucG9zaXRpb247CiAKICAgICBpZiAoIWZvcm1hdERlc2Ny
aXB0aW9uKCkpIHsKICAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3ByaXZhdGUuaXNfcHJlc2Vu
dCgpKSB7CkBAIC0xNDA2LDI0ICsxMTIzLDE4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkCiAg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAg
IH0KIAotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVz
Y3JpcHRpb247CisgICAgICAgIFJlZlB0cjxBdWRpb0luZm8+IGZvcm1hdERlc2NyaXB0aW9uOwog
ICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgp
OwogICAgICAgICBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6OlZvcmJpcykKLSAgICAgICAgICAg
IGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihw
cml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSk7CisgICAgICAgICAgICBmb3Jt
YXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyhwcml2YXRlRGF0YS5zaXplKCks
IHByaXZhdGVEYXRhLmRhdGEoKSk7CiAgICAgICAgIGVsc2UgaWYgKGNvZGVjKCkgPT0gQ29kZWNU
eXBlOjpPcHVzKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1
b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCAqbV9jb21w
bGV0ZVBhY2tldFNpemUpOworICAgICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29u
dGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwga09wdXNNaW5pbXVtRnJhbWVEYXRhU2l6ZSk7
CiAgICAgICAgICAgICBpZiAoIWNvbnRpZ3VvdXNCdWZmZXIpIHsKICAgICAgICAgICAgICAgICBQ
QVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1l
RGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwotICAg
ICAgICAgICAgYXV0byBlcnIgPSBQQUw6OkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihjb250
aWd1b3VzQnVmZmVyLmdldCgpLCAwLCBudWxscHRyLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1
ZmZlckRhdGEpOwotICAgICAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWls
ZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRl
ciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgT3B1c0Nvb2tp
ZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwotICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2
YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxl
dGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKSkgeworICAgICAg
ICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZh
dGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1ZmZlci0+c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVy
LT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKSkgewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBwYXJzZSBPcHVzIHByaXZhdGUgZGF0YSIpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAg
ICAgICAgICAgIH0KQEAgLTE0MzMsNDAgKzExNDQsMjkgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJl
YWQKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fZnJhbWVzUGVyUGFja2V0ID0gY29va2ll
Q29udGVudHMuZnJhbWVzUGVyUGFja2V0OwogICAgICAgICAgICAgbV9mcmFtZUR1cmF0aW9uID0g
Y29va2llQ29udGVudHMuZnJhbWVEdXJhdGlvbjsKLSAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0
aW9uID0gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29va2llQ29udGVudHMpOwor
ICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvb2tp
ZUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBj
cmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAg
ICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIEF1
ZGlvSW5mbyBmcm9tIGF1ZGlvIHRyYWNrIGhlYWRlciIpOwogICAgICAgICAgICAgcmV0dXJuIFNr
aXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBz
dHJlYW1EZXNjcmlwdGlvbiA9IFBBTDo6Q01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFt
QmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7Ci0gICAgICAgIGlmICgh
c3RyZWFtRGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoIkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24g
ZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmlu
Zyk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IFBBTDo6Q01UaW1lTWFr
ZShzdHJlYW1EZXNjcmlwdGlvbi0+bUZyYW1lc1BlclBhY2tldCwgc3RyZWFtRGVzY3JpcHRpb24t
Pm1TYW1wbGVSYXRlKTsKKyAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IE1lZGlhVGltZShmb3Jt
YXREZXNjcmlwdGlvbi0+ZnJhbWVzUGVyUGFja2V0LCBmb3JtYXREZXNjcmlwdGlvbi0+cmF0ZSk7
CiAKLSAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlv
bikpOworICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICB9IGVsc2UgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpPcHVz
KSB7CiAgICAgICAgIC8vIE9wdXMgdGVjaG5pY2FsbHkgYWxsb3dzIHRoZSBmcmFtZSBkdXJhdGlv
biBhbmQgZnJhbWVzLXBlci1wYWNrZXQgdmFsdWVzIHRvIGNoYW5nZSBmcm9tIHBhY2tldCB0byBw
YWNrZXQuCiAgICAgICAgIC8vIENvcmVBdWRpbyBkb2Vzbid0IHN1cHBvcnQgQVNCRCB2YWx1ZXMg
bGlrZSB0aGVzZSB0byBjaGFuZ2Ugb24gYSBwZXItcGFja2V0IGJhc2lzLCBzbyB0aHJvdyBhbiBl
cnJvciB3aGVuCiAgICAgICAgIC8vIHRoYXQga2luZCBvZiB2YXJpYWJpbGl0eSBpcyBlbmNvdW50
ZXJlZC4KICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwogICAgICAg
ICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgpOwotICAg
ICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
cihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0LCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAg
ICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIgPSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZl
cigwLCBrT3B1c01pbmltdW1GcmFtZURhdGFTaXplKTsKICAgICAgICAgaWYgKCFjb250aWd1b3Vz
QnVmZmVyKSB7CiAgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRp
b1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3Vz
IGRhdGEgYmxvY2siKTsKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKICAgICAgICAgfQotICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBu
dWxscHRyOwotICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9ja0J1ZmZlckdldERhdGFQb2lu
dGVyKGNvbnRpZ3VvdXNCdWZmZXIuZ2V0KCksIDAsIG51bGxwdHIsIG51bGxwdHIsIChjaGFyKiop
JmJsb2NrQnVmZmVyRGF0YSk7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWls
ZWQgd2l0aCBlcnJvciIsIGVycik7Ci0gICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRl
RGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQ
YWNrZXRTaXplLCBibG9ja0J1ZmZlckRhdGEsIGNvb2tpZUNvbnRlbnRzKQorICAgICAgICBpZiAo
IXBhcnNlT3B1c1ByaXZhdGVEYXRhKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0
YSgpLCBjb250aWd1b3VzQnVmZmVyLT5zaXplKCksIGNvbnRpZ3VvdXNCdWZmZXItPmRhdGEoKSwg
Y29va2llQ29udGVudHMpCiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZXNQZXJQ
YWNrZXQgIT0gbV9mcmFtZXNQZXJQYWNrZXQKICAgICAgICAgICAgIHx8IGNvb2tpZUNvbnRlbnRz
LmZyYW1lRHVyYXRpb24gIT0gbV9mcmFtZUR1cmF0aW9uKSB7CiAgICAgICAgICAgICBQQVJTRVJf
TE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJPcHVzIGZyYW1lcy1wZXItcGFja2V0IGNoYW5nZWQgd2l0
aGluIGEgdHJhY2s7IGVycm9yIik7CkBAIC0xNDc0LDYzICsxMTc0LDI4NSBAQCB3ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZAogICAgICAgICB9CiAgICAgfQogCi0gICAgbV9wYWNrZXRTaXplcy5hcHBl
bmQoKm1fY29tcGxldGVQYWNrZXRTaXplKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsg
bV9wYWNrZXREdXJhdGlvbiwgcHJlc2VudGF0aW9uVGltZSwgUEFMOjprQ01UaW1lSW52YWxpZCB9
KTsKLSAgICBtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0ICs9ICptX2NvbXBsZXRlUGFja2V0U2l6
ZTsKLSAgICBtX2NvbXBsZXRlUGFja2V0U2l6ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIW1f
Y29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBtX2NvbXBsZXRlTWVkaWFTYW1w
bGVzLnNldEluZm8oZm9ybWF0RGVzY3JpcHRpb24oKSk7CisgICAgZWxzZSBpZiAoZm9ybWF0RGVz
Y3JpcHRpb24oKSAmJiAqZm9ybWF0RGVzY3JpcHRpb24oKSAhPSAqbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlcy5pbmZvKCkpCisgICAgICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIAotICAgIGF1dG8g
c2FtcGxlRHVyYXRpb24gPSBQQUw6OkNNVGltZUdldFNlY29uZHMoUEFMOjpDTVRpbWVTdWJ0cmFj
dChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIFBBTDo6Q01U
aW1lR2V0U2Vjb25kcyhtX3BhY2tldER1cmF0aW9uKSAqIHNhbXBsZUNvdW50OworICAgIG1fY29t
cGxldGVNZWRpYVNhbXBsZXMuYXBwZW5kKHsgcHJlc2VudGF0aW9uVGltZSwgTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpLCBtX3BhY2tldER1cmF0aW9uLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVs
ZWFzZU5vbk51bGwoKSwgTWVkaWFTYW1wbGU6OlNhbXBsZUZsYWdzOjpJc1N5bmMgfSk7CiAKLSAg
ICBpZiAoc2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2FtcGxlRHVyYXRpb24pIHsKLSAgICAg
ICAgY3JlYXRlU2FtcGxlQnVmZmVyKG1ldGFkYXRhLnBvc2l0aW9uKTsKLSAgICAgICAgcmVzZXQo
KTsKLSAgICB9CisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0
ZXNSZW1haW5pbmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tD
b21wbGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVS
YW5nZU9mZnNldCkKKworYm9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRlZFZpZGVvQ29kZWMoU3Ry
aW5nVmlldyBuYW1lKQoreworICAgIHJldHVybiBuYW1lID09ICJWX1ZQOCIgfHwgbmFtZSA9PSAi
Vl9WUDkiOworfQorCitib29sIFdlYk1QYXJzZXI6OmlzU3VwcG9ydGVkQXVkaW9Db2RlYyhTdHJp
bmdWaWV3IG5hbWUpCit7CisgICAgcmV0dXJuIG5hbWUgPT0gIkFfVk9SQklTIiB8fCBuYW1lID09
ICJBX09QVVMiOworfQorCitTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNKCkKKyAgICA6IG1fcGFyc2VyKCp0aGlzKQoreworfQorCitib29sIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpCit7CisgICAgcmV0dXJu
IFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6d2ViTUZvcm1hdFJlYWRlckVuYWJsZWQoKSAm
JiBjYW5Mb2FkRm9ybWF0UmVhZGVyKCkgJiYgaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCk7Cit9CisK
K01lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpp
c0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQogewotICAgIGlm
IChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKKyNpZiBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9S
QklTKSB8fCBFTkFCTEUoT1BVUykKKyAgICBpZiAoIWlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQor
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKKworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVyVHlwZSgpOwor
ICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNv
bnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7CisgICAgYm9vbCBpc1ZpZGVvQ29udGFpbmVyVHlw
ZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVvL3dlYm0iKTsK
KyAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFpbmVyVHlwZSkK
KyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBw
b3J0ZWQ7CisKKyAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZhbHNlOworI2lm
IEVOQUJMRShWT1JCSVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzVm9yYmlz
RGVjb2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisjaWYgRU5BQkxFKE9QVVMpCisgICAgaXNBbnlB
dWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgor
CisgICAgaWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29kZWNBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90
U3VwcG9ydGVkOworCisgICAgYm9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNBbnlBdWRpb0Nv
ZGVjQXZhaWxhYmxlOworI2lmIEVOQUJMRShWUDkpCisgICAgaXNBbnlDb2RlY0F2YWlsYWJsZSB8
PSBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKCFpc0FueUNvZGVj
QXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2RlY3MoKTsKKyAg
ICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7CisKKyAgICBmb3IgKGF1dG8mIGNvZGVjIDog
Y29kZWNzKSB7CisjaWYgRU5BQkxFKFZQOSkKKyAgICAgICAgaWYgKGNvZGVjLnN0YXJ0c1dpdGgo
InZwMDkiKSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29kZWMsICJ2cDgi
KSB8fCBlcXVhbChjb2RlYywgInZwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICghaXNWUDlEZWNv
ZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGF1dG8gY29kZWNQ
YXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlYyk7CisgICAgICAgICAgICBp
ZiAoIWNvZGVjUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJF
bnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgaWYgKCFp
c1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFtZXRlcnMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBpZiAoY29kZWMg
PT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlw
ZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisj
ZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworI2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAo
Y29kZWMgPT0gIm9wdXMiKSB7CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFi
bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNU
eXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKworICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKKworI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odHlwZSk7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUo
Vk9SQklTKSB8fCBFTkFCTEUoT1BVUykKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlw
ZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNhbXBsZXNCbG9j
ayYmIHNhbXBsZXMsIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIG1fY2FsbGJhY2sucGFyc2Vk
TWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcyksIHBvc2l0aW9uKTsKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlhbGl6YXRpb25T
ZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQoreworICAgIG1fY2FsbE9uQ2xpZW50VGhy
ZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFs
aXphdGlvblNlZ21lbnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCldKCkgbXV0YWJs
ZSB7CisgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2spCisg
ICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2soV1RGTW92ZShp
bml0aWFsaXphdGlvblNlZ21lbnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBzYW1wbGVzQmxv
Y2ssIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIGlmICghc2FtcGxlc0Jsb2NrLmluZm8oKSkg
eworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIk5vIFRyYWNr
SW5mbyBzZXQiKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIENNU2FtcGxlQnVmZmVy
UmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgYXV0byBlcnIgPSBQQUw6OkNNU2Ft
cGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldFNpemVzLnNp
emUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9w
YWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVy
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3
aXRoICVkIiwgZXJyKTsKKyAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9y
bWF0RGVzY3JpcHRpb247CisgICAgaWYgKHNhbXBsZXNCbG9jay5pc1ZpZGVvKCkpIHsKKyAgICAg
ICAgaWYgKG1fdmlkZW9JbmZvICE9IHNhbXBsZXNCbG9jay5pbmZvKCkpIHsKKyAgICAgICAgICAg
IG1fdmlkZW9JbmZvID0gc2FtcGxlc0Jsb2NrLmluZm8oKTsKKyAgICAgICAgICAgIG1fdmlkZW9G
b3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVRyYWNrSW5mbygq
c2FtcGxlc0Jsb2NrLmluZm8oKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb247CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KG1fYXVkaW9JbmZvICE9IHNhbXBsZXNCbG9jay5pbmZvKCkpIHsKKyAgICAgICAgICAgIGZsdXNo
UGVuZGluZ0F1ZGlvU2FtcGxlcygpOworICAgICAgICAgICAgbV9hdWRpb0Zvcm1hdERlc2NyaXB0
aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpzYW1wbGVzQmxvY2su
aW5mbygpKTsKKyAgICAgICAgICAgIG1fYXVkaW9JbmZvID0gc2FtcGxlc0Jsb2NrLmluZm8oKTsK
KyAgICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IG1fYXVkaW9Gb3JtYXREZXNj
cmlwdGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgeworICAg
ICAgICByZXR1cm5TYW1wbGVzKFdURk1vdmUoc2FtcGxlc0Jsb2NrKSwgbV92aWRlb0Zvcm1hdERl
c2NyaXB0aW9uLmdldCgpLCBwb3NpdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
YXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CiAKLSAgICBhdXRv
IHRyYWNrSUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOwotICAgIHBhcnNlcigpLnByb3Zp
ZGVNZWRpYURhdGEoV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lELCBsYXRlc3RCeXRlUmFu
Z2VPZmZzZXQpOworICAgIC8vIFBhY2sgYXVkaW8gaWYgbmVlZGVkLgorICAgIGlmIChtX3F1ZXVl
ZEF1ZGlvU2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYgbGFzdFNhbXBsZSA9IG1fcXVl
dWVkQXVkaW9TYW1wbGVzLmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3RTYW1wbGUuZHVyYXRpb24g
KyBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUgIT0gc2FtcGxlc0Jsb2NrLmZpcnN0KCkucHJl
c2VudGF0aW9uVGltZSkKKyAgICAgICAgICAgIGZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcyhwb3Np
dGlvbik7CisgICAgfQorICAgIGZvciAoYXV0byYgc2FtcGxlIDogc2FtcGxlc0Jsb2NrKQorICAg
ICAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1cmF0aW9uOworICAgIG1fcXVl
dWVkQXVkaW9TYW1wbGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNCbG9jaykpOworICAgIGlmICht
X3F1ZXVlZEF1ZGlvRHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHBvc2l0aW9uKTsKIH0K
IAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMo
KQordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpyZXR1cm5TYW1wbGVzKE1lZGlhU2FtcGxl
c0Jsb2NrJiYgYmxvY2ssIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZGVzY3JpcHRpb24sIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9uKQogewotICAgIGZvciAoYXV0byYgdHJhY2sgOiBt
X3RyYWNrcykgewotICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pIHsKLSAgICAgICAgICAgIEF1ZGlv
VHJhY2tEYXRhJiBhdWRpb1RyYWNrID0gZG93bmNhc3Q8QXVkaW9UcmFja0RhdGE+KHRyYWNrLmdl
dCgpKTsKLSAgICAgICAgICAgIGF1ZGlvVHJhY2suY3JlYXRlU2FtcGxlQnVmZmVyKCk7Ci0gICAg
ICAgICAgICBhdWRpb1RyYWNrLnJlc2V0Q29tcGxldGVkKCk7Ci0gICAgICAgIH0KKyAgICBpZiAo
YmxvY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHNhbXBsZUJ1ZmZl
ciA9IHRvQ01TYW1wbGVCdWZmZXIoV1RGTW92ZShibG9jayksIGRlc2NyaXB0aW9uKTsKKyAgICBp
ZiAoIXNhbXBsZUJ1ZmZlcikgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURF
TlRJRklFUiwgIkNvdWxkbid0IGNyZWF0ZSBDTVNhbXBsZUJ1ZmZlciBmcm9tIE1lZGlhU2FtcGxl
c0Jsb2NrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NhbGxPbkNsaWVudFRo
cmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJ
RCA9IGJsb2NrLmluZm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVC
dWZmZXIpLCBwb3NpdGlvbl0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQcm92aWRl
TWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBt
ZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQo
KSwgdHJhY2tJRCk7CisgICAgICAgIGlmIChwb3NpdGlvbikKKyAgICAgICAgICAgIG1lZGlhU2Ft
cGxlLT5zZXRCeXRlUmFuZ2VPZmZzZXQoKnBvc2l0aW9uKTsKKworICAgICAgICBtX2RpZFByb3Zp
ZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlT
dHJpbmcoKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cGFy
c2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90IHRyYWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgcGFkZGlu
ZykKK3sKKyAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gUmVmIHsgKnRoaXMgfSwgdHJhY2tJRCwgcGFkZGluZ10gKCkgeworICAgICAgICBpZiAo
bV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAgbV9kaWRQYXJzZVRy
aW1taW5nRGF0YUNhbGxiYWNrKHRyYWNrSUQsIHBhZGRpbmcpOworICAgIH0pOworfQorCit2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmIGtleUlELCB1aW50NjRfdCB0cmFja0lE
KQoreworICAgIGlmIChtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9u
RGF0YUZvclRyYWNrSURDYWxsYmFjaykKKyAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJl
cXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJRCks
IHRyYWNrSUQpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGlu
Z0F1ZGlvU2FtcGxlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwb3NpdGlvbikKK3sKKyAgICBp
ZiAoIW1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VChtX2F1ZGlvSW5mbyk7CisgICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMuc2V0SW5mbyhtX2F1ZGlv
SW5mby5jb3B5UmVmKCkpOworICAgIHJldHVyblNhbXBsZXMoV1RGTW92ZShtX3F1ZXVlZEF1ZGlv
U2FtcGxlcyksIG1fYXVkaW9Gb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgcG9zaXRpb24pOworCisg
ICAgbV9xdWV1ZWRBdWRpb1NhbXBsZXMgPSB7IH07CisgICAgbV9xdWV1ZWRBdWRpb0R1cmF0aW9u
ID0geyB9OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2Vn
bWVudCYmIHNlZ21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlciwgQXBwZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCit7CisgICAgSU5GT19MT0dfSUZfUE9TU0lC
TEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIsIGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpE
aXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVpdHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQu
c2l6ZSgpLCAiKSIpOworCisgICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNj
b250aW51aXR5KQorICAgICAgICBtX3BhcnNlci5yZXNldCgpOworCisgICAgaWYgKGludCBjb2Rl
ID0gbV9wYXJzZXIucGFyc2UoV1RGTW92ZShzZWdtZW50KSkpIHsKKyAgICAgICAgRVJST1JfTE9H
X0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICJzdGF0dXMuY29kZSgiLCBjb2RlLCAiKSIpOwor
ICAgICAgICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gUmVmIHsgKnRoaXMgfSwgY29kZV0geworICAgICAgICAgICAgaWYgKG1fZGlkRW5jb3VudGVy
RXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCisgICAgICAgICAgICAgICAgbV9kaWRFbmNvdW50
ZXJFcnJvckR1cmluZ1BhcnNpbmdDYWxsYmFjayhjb2RlKTsKKyAgICAgICAgfSk7CiAgICAgfQor
ICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1
cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1TYW1wbGVEdXJhdGlvbi4KKyAgICAvLyBCdXQg
YXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5vIG1vcmUgYXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcs
IHNvIGZsdXNoIGFuZCBlbWl0IGFueSBwZW5kaW5nCisgICAgLy8gYXVkaW8gYnVmZmVycy4KKyAg
ICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxl
RHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZs
dXNoUGVuZGluZ01lZGlhRGF0YSgpCiB7Ci0gICAgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlv
biA9IGR1cmF0aW9uOwogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzU3VwcG9y
dGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5hbWUpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQog
ewotICAgIHJldHVybiBuYW1lID09ICJWX1ZQOCIgfHwgbmFtZSA9PSAiVl9WUDkiOworICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNTdXBw
b3J0ZWRBdWRpb0NvZGVjKFN0cmluZ1ZpZXcgbmFtZSkKK2Jvb2wgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpCiB7Ci0gICAg
cmV0dXJuIG5hbWUgPT0gIkFfVk9SQklTIiB8fCBuYW1lID09ICJBX09QVVMiOworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OmludmFsaWRhdGUoKQoreworICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lE
RU5USUZJRVIpOworICAgIG1fcGFyc2VyLmludmFsaWRhdGUoKTsKK30KKwordm9pZCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIpCit7CisgICAgbV9wYXJzZXIuc2V0TG9nZ2VyKGxvZ2dlciwgbG9n
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWluaW11
bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KGR1cmF0aW9uKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGU4NzZhYjQxNGE0YWJi
MzNkNTE4YzM3YjQxZmU1YTE0Nzc2YWI0OTYuLjk4ODIzNDMzN2I2NDA2OWMwNmNjODEyNmM5YzRl
YmY2ZjNmNWQ0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTI3LDE5ICsy
NywxOSBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgogI2luY2x1ZGUgPENvcmVB
dWRpby9Db3JlQXVkaW9UeXBlcy5oPgotI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4KICNp
bmNsdWRlIDxwYWwvc3BpL2NmL0NvcmVNZWRpYVNQSS5oPgogI2luY2x1ZGUgPHZhcmlhbnQ+CiAj
aW5jbHVkZSA8d2VibS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CiAjaW5j
bHVkZSA8d2VibS92cDlfaGVhZGVyX3BhcnNlci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1h
dERlc2NyaXB0aW9uUmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01C
bG9ja0J1ZmZlclJlZjsKIAogbmFtZXNwYWNlIHdlYm0gewogY2xhc3MgV2VibVBhcnNlcjsKQEAg
LTQ3LDQyICs0NywzNiBAQCBjbGFzcyBXZWJtUGFyc2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFy
c2VyLCBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKK2NsYXNzIFdlYk1QYXJzZXIgOiBwcml2YXRl
IHdlYm06OkNhbGxiYWNrIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICBjbGFzcyBTZWdtZW50UmVhZGVyOwotCi0gICAgc3RhdGljIGJvb2wgaXNXZWJNRm9ybWF0
UmVhZGVyQXZhaWxhYmxlKCk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRz
VHlwZSBpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7Ci0gICAgc3Rh
dGljIFNwYW48Y29uc3QgQVNDSUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlwZXMoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0
ZShjb25zdCBDb250ZW50VHlwZSYpOworICAgIGNsYXNzIENhbGxiYWNrIHsKKyAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VkVHJpbW1pbmdEYXRhKHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJz
ZXI6OkluaXRpYWxpemF0aW9uU2VnbWVudCYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpID0gMDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGNhbkRlY3J5cHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICB2aXJ0dWFsIHZvaWQgY29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JU
cmFja0lEKFJlZjxTaGFyZWRCdWZmZXI+JiYsIHVpbnQ2NF90KSB7IH0KKyAgICAgICAgdmlydHVh
bCB+Q2FsbGJhY2soKSA9IGRlZmF1bHQ7CisgICAgfTsKIAotICAgIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKTsKLSAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOworICAgIFdlYk1QYXJzZXIo
Q2FsbGJhY2smKTsKKyAgICB+V2ViTVBhcnNlcigpOwogCi0gICAgc3RhdGljIGJvb2wgaXNBdmFp
bGFibGUoKTsKKyAgICBjbGFzcyBTZWdtZW50UmVhZGVyOwogCisgICAgaW50IHBhcnNlKFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmKTsKKyAgICB2b2lkIHJlc2V0U3RhdGUoKTsKKyAgICB2
b2lkIHJlc2V0KCk7CisgICAgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgY29uc3Qgd2VibTo6U3Rh
dHVzJiBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQogCi0gICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gVHlwZTo6V2ViTTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwZW5kRGF0YShTZWdtZW50JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsg
fSwgQXBwZW5kRmxhZ3MgPSBBcHBlbmRGbGFnczo6Tm9uZSkgZmluYWw7Ci0gICAgdm9pZCBmbHVz
aFBlbmRpbmdNZWRpYURhdGEoKSBmaW5hbDsKLSAgICB2b2lkIHNldFNob3VsZFByb3ZpZGVNZWRp
YURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KSBmaW5hbDsKLSAgICBib29sIHNob3VsZFBy
b3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KSBmaW5hbDsKLSAgICB2b2lkIHJlc2V0
UGFyc2VyU3RhdGUoKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGUoKSBmaW5hbDsKKyAgICB2
b2lkIHByb3ZpZGVNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpOwogCi0g
ICAgdm9pZCBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKLSAgICB2b2lkIHNldE1pbmltdW1B
dWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKLSAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsK
LQotICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+
LCB1aW50NjRfdCwgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGJ5dGVSYW5nZU9mZnNldCk7Ci0gICAg
dXNpbmcgRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IEZ1bmN0aW9uPHZvaWQodWludDY0
X3QgdHJhY2tJRCwgY29uc3QgTWVkaWFUaW1lJiBkaXNjYXJkUGFkZGluZyk+OwotICAgIHZvaWQg
c2V0RGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayhEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxi
YWNrJiYgY2FsbGJhY2spCi0gICAgewotICAgICAgICBtX2RpZFBhcnNlVHJpbW1pbmdEYXRhQ2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKLSAgICB9CisgICAgdm9pZCBzZXRMb2dnZXIoY29u
c3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcik7CisgICAgY29uc3QgTG9nZ2VyKiBs
b2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KIAog
ICAgIGVudW0gY2xhc3MgRXJyb3JDb2RlIDogaW50MzJfdCB7CiAgICAgICAgIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk1FcnJvckNvZGVTdGFydCA9IDIwMDAsCkBAIC0xMjAsMTggKzExNCwxMiBAQCBw
dWJsaWM6CiAgICAgY2xhc3MgVHJhY2tEYXRhIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBl
IGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRhPgorICAgICAgICBz
dGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tF
bnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tE
YXRhPgogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0Rh
dGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6VW5rbm93biwgcGFyc2VyKTsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0Vu
dHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZTo6VW5rbm93biwgcGFyc2VyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgICAgICBVbmtub3duLAotICAgICAg
ICAgICAgQXVkaW8sCi0gICAgICAgICAgICBWaWRlbywKLSAgICAgICAgfTsKLQotICAgICAgICBU
cmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSwgVHlwZSB0cmFja1R5cGUsIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikK
KyAgICAgICAgVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlwZSwgV2ViTVBh
cnNlciYgcGFyc2VyKQogICAgICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNUeXBlIH0KICAgICAg
ICAgICAgICwgbV90cmFjayB7IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0VudHJ5IH0gfQogICAg
ICAgICAgICAgLCBtX3RyYWNrVHlwZSB7IHRyYWNrVHlwZSB9CkBAIC0xNDIsMTEzICsxMzAsMTEy
IEBAIHB1YmxpYzoKIAogICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7IHJldHVybiBt
X2NvZGVjOyB9CiAgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90
cmFjazsgfQotICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tU
eXBlOyB9CisgICAgICAgIFRyYWNrSW5mbzo6VHJhY2tUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhY2tUeXBlOyB9CiAKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlv
bjsgfQotICAgICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiYmIGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBX
VEZNb3ZlKGRlc2NyaXB0aW9uKTsgfQorICAgICAgICBSZWZQdHI8VHJhY2tJbmZvPiBmb3JtYXRE
ZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb24uY29weVJlZigp
OyB9CisgICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmVmPFRyYWNrSW5mbz4mJiBk
ZXNjcmlwdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbiA9
IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9mb3JtYXREZXNjcmlwdGlvbi0+
dHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgICAgIH0KIAotICAgICAg
ICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNl
cjsgfQorICAgICAgICBXZWJNUGFyc2VyJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNl
cjsgfQogCi0gICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3Qg
Q01UaW1lJiwgaW50KQorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVE
YXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCos
IGNvbnN0IE1lZGlhVGltZSYsIGludCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1
czo6a0ludmFsaWRFbGVtZW50SWQpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJlc2V0Q29tcGxldGVkKCkKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVkRnJh
bWVzU3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIg
PSBudWxscHRyOworICAgICAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcyA9IHsgfTsKICAg
ICAgICAgfQorCiAgICAgICAgIHZvaWQgcmVzZXQoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXNldENvbXBsZXRlZCgpOworICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgp
OwogICAgICAgICAgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAg
ICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgPSAwOwotICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIucmVz
ZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHJhaW5QZW5kaW5nU2FtcGxlcygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zaXplKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9wYXJzZXIucHJvdmlkZU1l
ZGlhRGF0YShXVEZNb3ZlKG1fY29tcGxldGVNZWRpYVNhbXBsZXMpLCBtX2xhc3RQb3NpdGlvbik7
CisgICAgICAgICAgICByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCk7CiAgICAgICAgIH0KIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGNvbnRp
Z3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNv
bnN0OworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBjb250aWd1b3VzQ29tcGxldGVCbG9j
a0J1ZmZlcihzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKICAgICAgICAgd2Vi
bTo6U3RhdHVzIHJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVN
ZXRhZGF0YSYsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIFJldGFpblB0cjxD
TUJsb2NrQnVmZmVyUmVmPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXI7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAgLy8gSW5pdGlhbCBh
bGxvY2F0aW9uIHNpemUgb2YgZW1wdHkgQ01CbG9ja0J1ZmZlci4KLSAgICAgICAgc2l6ZV90IG1N
YXhCbG9ja0J1ZmZlckNhcGFjaXR5IHsgMCB9OworICAgICAgICBSZWZQdHI8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4gbV9jb21wbGV0ZUJsb2NrQnVmZmVyOworICAgICAgICBNZWRpYVNhbXBsZXNC
bG9jayBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzOworICAgICAgICB1aW50NjRfdCBtX2xhc3RQb3Np
dGlvbiB7IDAgfTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIENvZGVjVHlwZSBtX2NvZGVjOwog
ICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1fdHJhY2s7Ci0gICAgICAgIFR5cGUgbV90cmFja1R5
cGU7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERl
c2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jdXJyZW50
QmxvY2tCdWZmZXI7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1fcGFyc2VyOwor
ICAgICAgICBjb25zdCBUcmFja0luZm86OlRyYWNrVHlwZSBtX3RyYWNrVHlwZTsKKyAgICAgICAg
UmVmUHRyPFRyYWNrSW5mbz4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgU2hhcmVkQnVm
ZmVyQnVpbGRlciBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgV2ViTVBhcnNlciYgbV9w
YXJzZXI7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6
ZTsKICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgY3VycmVudGx5IGluY29tcGxldGUgcGFyc2VkIHBh
Y2tldC4KICAgICAgICAgc2l6ZV90IG1fcGFydGlhbEJ5dGVzUmVhZCB7IDAgfTsKICAgICB9Owog
CiAgICAgY2xhc3MgVmlkZW9UcmFja0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25z
dCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBw
YXJzZXIpIC0+IFVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1dG8g
Y3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNr
RW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPgog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0
YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAgICAg
VmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRy
eSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQotICAgICAgICAg
ICAgOiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpWaWRlbywgcGFyc2Vy
KQorICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpCisgICAgICAgICAg
ICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRyYWNrSW5mbzo6VHJhY2tUeXBl
OjpWaWRlbywgcGFyc2VyKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB3ZWJtOjpT
dGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1l
dGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01UaW1lJiwgaW50
LCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJik7CiAgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0Ns
YXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KKyAgICAgICAgd2Vi
bTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJh
bWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKKyAg
ICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CiAKICNpZiBFTkFC
TEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJz
ZXI7CisgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKICNlbmRpZgogICAgIH07CiAK
ICAgICBjbGFzcyBBdWRpb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0
IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBh
cnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKSAtPiBVbmlxdWVSZWY8QXVkaW9UcmFj
a0RhdGE+CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBj
b25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBXZWJNUGFyc2VyJiBwYXJzZXIpIC0+
IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFy
c2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNv
bnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0m
IHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAgICAgICAgOiBUcmFj
a0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OkF1ZGlvLCBwYXJzZXIgfQotICAg
ICAgICAgICAgLCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IG1pbmltdW1TYW1wbGVEdXJhdGlv
biB9CisgICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdl
Ym06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikKKyAgICAgICAg
ICAgIDogVHJhY2tEYXRhIHsgY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNr
VHlwZTo6QXVkaW8sIHBhcnNlciB9CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHdl
Ym06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZy
YW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7Ci0gICAg
ICAgIHZvaWQgcmVzZXRDb21wbGV0ZWQoKSBmaW5hbDsKLSAgICAgICAgdm9pZCBjcmVhdGVTYW1w
bGVCdWZmZXIoc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxhdGVzdEJ5dGVSYW5nZU9mZnNldCA9IHN0
ZDo6bnVsbG9wdCk7Ci0KICAgICBwcml2YXRlOgorICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3Vt
ZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWlu
dDY0X3QqLCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIHJlc2V0
Q29tcGxldGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xh
c3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCi0gICAgICAgIENN
VGltZSBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWU7Ci0gICAgICAgIENNVGltZSBtX3BhY2tldER1
cmF0aW9uOwotICAgICAgICBzaXplX3QgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCB7IDAgfTsK
KyAgICAgICAgTWVkaWFUaW1lIG1fcGFja2V0RHVyYXRpb247CiAgICAgICAgIHVpbnQ4X3QgbV9m
cmFtZXNQZXJQYWNrZXQgeyAwIH07CiAgICAgICAgIFNlY29uZHMgbV9mcmFtZUR1cmF0aW9uIHsg
MF9zIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFja2V0U2l6ZXM7Ci0gICAgICAgIFZl
Y3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGltaW5nczsKICAgICAgICAgc2l6ZV90
IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07Ci0gICAgICAgIC8vIEZJWE1FOiAwLjUg
LSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlvbiBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0
IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZpcnN0Ci0gICAgICAgIC8vIHNhbXBsZSBi
dWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRpYVNhbXBsZUN1cnNvcjo6Y3JlYXRlU2Ft
cGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KLSAgICAgICAgZmxvYXQgbV9taW5p
bXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKIAotICAgIGNvbnN0IExvZ2dlciogbG9n
Z2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KLSAgICBjb25zdCB2b2lk
KiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9Ci0KIHBy
aXZhdGU6Ci0KICAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90
KTsKLQogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3KTsK
ICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyk7CiAKQEAg
LTI2OCw3ICsyNTUsNyBAQCBwcml2YXRlOgogICAgIHdlYm06OlN0YXR1cyBPbkJsb2NrR3JvdXBF
bmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgY29uc3Qgd2VibTo6QmxvY2tHcm91cCYp
OwogICAgIHdlYm06OlN0YXR1cyBPbkZyYW1lKGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB3
ZWJtOjpSZWFkZXIqLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpIGZpbmFsOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEluaXRpYWxpemF0aW9uU2VnbWVudD4gbV9pbml0aWFsaXphdGlvblNlZ21l
bnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRp
b25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVudDsKICAgICBWZWN0b3I8c3RkOjpwYWly
PHVpbnQ2NF90LCBSZWY8U2hhcmVkQnVmZmVyPj4+IG1fa2V5SWRzOwogICAgIHdlYm06OlN0YXR1
cyBtX3N0YXR1czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VibTo6V2VibVBhcnNlcj4gbV9wYXJz
ZXI7CkBAIC0yODUsMTIgKzI3Miw2OCBAQCBwcml2YXRlOgogICAgIHVzaW5nIEJsb2NrVmFyaWFu
dCA9IHN0ZDo6dmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxvY2s+OwogICAgIHN0
ZDo6b3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJlbnRCbG9jazsKICAgICBzdGQ6Om9wdGlv
bmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247Ci0gICAgZmxvYXQgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIFJlZlB0cjxjb25zdCBMb2dnZXI+IG1fbG9n
Z2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKICAgICB1
aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAwIH07CisgICAgQ2FsbGJhY2smIG1fY2Fs
bGJhY2s7Cit9OworCitjbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJj
ZUJ1ZmZlclBhcnNlciwgV2ViTVBhcnNlcjo6Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBib29sIGlzV2ViTUZvcm1hdFJlYWRlckF2
YWlsYWJsZSgpOworICAgIHN0YXRpYyBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgaXND
b250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYpOworICAgIHN0YXRpYyBTcGFu
PGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlNRVR5cGVzKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBjcmVhdGUoY29uc3Qg
Q29udGVudFR5cGUmKTsKKworICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKKyAgICB+U291
cmNlQnVmZmVyUGFyc2VyV2ViTSgpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBib29sIGlzQXZh
aWxhYmxlKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOjpXZWJNOyB9
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmREYXRhKFNlZ21lbnQmJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBlbmRGbGFncyA9IEFwcGVuZEZsYWdzOjpO
b25lKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoUGVuZGluZ01lZGlhRGF0YSgpIGZpbmFsOworICAg
IHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNrSUQoYm9vbCwgdWludDY0X3Qp
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0
X3QpIGZpbmFsOworICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFsIHsgbV9wYXJzZXIu
cmVzZXRTdGF0ZSgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CisKKyAgICB1c2lu
ZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0gRnVuY3Rpb248dm9pZCh1aW50NjRfdCB0
cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQYWRkaW5nKT47CisgICAgdm9pZCBzZXRE
aWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sm
JiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIH0KKworICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVk
aW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2
b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKKyAgICAKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVu
dGlmaWVyKSBmaW5hbDsKKyAgICBjb25zdCBMb2dnZXIqIGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0
dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAgIC8vIFdlYk1Q
YXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoU291cmNl
QnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21lbnQmJikgZmluYWw7CisgICAgdm9pZCBw
YXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpIGZpbmFsOworICAg
IGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEhbV9kaWRQcm92aWRlQ29u
dGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2s7IH0KKyAg
ICB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8
U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgZmluYWw7CisgICAgdm9pZCBwYXJzZWRUcmltbWlu
Z0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworICAgIAorICAgIHZvaWQg
cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmLCBDTUZvcm1hdERlc2NyaXB0aW9uUmVm
LCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90Pik7CisKICAgICBEaWRQYXJzZVRyaW1taW5nRGF0YUNh
bGxiYWNrIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjazsKKyAgICBXZWJNUGFyc2VyIG1f
cGFyc2VyOworICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBtX2F1ZGlvRm9y
bWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0IFRyYWNrSW5mbz4gbV9hdWRpb0luZm87
CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fdmlkZW9Gb3JtYXREZXNj
cmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX3ZpZGVvSW5mbzsKKyAgICBN
ZWRpYVRpbWUgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDk2MDAwLCA0ODAwMCB9Owor
ICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fcXVldWVkQXVkaW9TYW1wbGVzOworICAgIE1lZGlhVGlt
ZSBtX3F1ZXVlZEF1ZGlvRHVyYXRpb247CisgICAgUmVmUHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dn
ZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9OwogfTsKIAog
fQpAQCAtMjk5LDEyICszNDIsMTIgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKQogICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXImIHBhcnNlcikgeyByZXR1cm4gcGFyc2VyLnR5
cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI6OlR5cGU6OldlYk07IH0KIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YSkKLSAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJh
Y2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OlZpZGVvOyB9CitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJh
Y2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXZWJNUGFyc2Vy
OjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09
IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpWaWRlbzsgfQogU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhKQotICAgIHN0YXRpYyBib29sIGlz
VHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRy
YWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW87IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGEpCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0
YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6
VHJhY2tJbmZvOjpUcmFja1R5cGU6OkF1ZGlvOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgK
aW5kZXggOTQxMGE3YzQ3OTYzNDcwNGViNTljOTk5NjAzNDg0NGI2OWE4ODc2ZC4uZDAwNDFiZjg5
YjMwYzJjYzYxODc5MDhmNGJlNzZhM2FiZmY0MjY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBA
IC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8d2Vi
bS9kb21fdHlwZXMuaD4KIAotdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNj
cmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKLQogbmFtZXNwYWNlIHZwOV9wYXJzZXIg
ewogY2xhc3MgVnA5SGVhZGVyUGFyc2VyOwogfQpAQCAtNDAsNiArMzgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0cnVjdCBNZWRpYUNhcGFiaWxpdGllc0luZm87CiBzdHJ1Y3QgVmlkZW9D
b25maWd1cmF0aW9uOworc3RydWN0IFZpZGVvSW5mbzsKIAogV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZWdpc3RlcldlYktpdFZQOURlY29kZXIoKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJX
ZWJLaXRWUDhEZWNvZGVyKCk7CkBAIC01MCw3ICs0OSw3IEBAIGJvb2wgaXNWUDhEZWNvZGVyQXZh
aWxhYmxlKCk7CiBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmRTdXBwb3J0ZWQoY29u
c3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsKIHN0ZDo6b3B0aW9uYWw8TWVkaWFDYXBh
YmlsaXRpZXNJbmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVycyhjb25zdCBWUENvZGVjQ29uZmlndXJh
dGlvblJlY29yZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCi1SZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVy
UGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVs
ZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJv
bVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImLCBjb25z
dCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogc3RydWN0IFZQOEZyYW1lSGVhZGVy
IHsKICAgICBib29sIGtleWZyYW1lIHsgZmFsc2UgfTsKQEAgLTY1LDggKzY0LDggQEAgc3RydWN0
IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29sIG5lZWRzQ2xhbXBpbmcgeyBmYWxzZSB9OwogfTsK
IAotc3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50
OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOwotUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhlYWRlcihjb25zdCBW
UDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworc3Rk
OjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcihjb25zdCB1aW50
OF90KiBmcmFtZURhdGEsIHNpemVfdCBmcmFtZVNpemUpOworUmVmPFZpZGVvSW5mbz4gY3JlYXRl
VmlkZW9JbmZvRnJvbVZQOEhlYWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYsIGNvbnN0IHdlYm06
OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOwogCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBWUDlUZXN0
aW5nT3ZlcnJpZGVzIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KaW5kZXggNWMwZGZh
ZmRiMmU2N2YwNDgwNTA1ZmVhYzY2YTRlZDU0NGEyOWUzMy4uY2Y4YzliMjEyOGMwMTQ4ZDVhOTBk
OWQ1MTU2ZGY2OWY0YTBmYmQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KQEAgLTMxLDExICsz
MSwxMiBAQAogI2ltcG9ydCAiRm91ckNDLmgiCiAjaW1wb3J0ICJMaWJXZWJSVENQcm92aWRlci5o
IgogI2ltcG9ydCAiTWVkaWFDYXBhYmlsaXRpZXNJbmZvLmgiCisjaW1wb3J0ICJNZWRpYVNhbXBs
ZS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlNjcmVlblByb3BlcnRp
ZXMuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCAiU3lzdGVtQmF0dGVyeS5o
IgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCi0jaW1wb3J0IDxDb3JlTWVkaWEvQ01G
b3JtYXREZXNjcmlwdGlvbi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4K
ICNpbXBvcnQgPHdlYm0vdnA5X2hlYWRlcl9wYXJzZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0
cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KQEAgLTM1MCwyNSArMzUxLDM1IEBAIHN0YXRpYyB1
aW50OF90IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2ll
bnRzKQogICAgIH0KIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQcmlt
YXJpZXModWludDhfdCBwcmltYXJpZXMpCitzdGF0aWMgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzIGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmll
cykKIHsKICAgICBzd2l0Y2ggKHByaW1hcmllcykgewogICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJD
b2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
ckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpCVF80NzBfNl9NOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzOjpCdDQ3MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRf
NDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkJ0
NDcwYmc7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAxXzc6
CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMTcwbTsK
ICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA6Ci0g
ICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbTsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpGaWxtOgorICAgICAgICByZXR1cm4g
UGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpGaWxtOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAgICAg
ICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpCdDIwMjA7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfNDI4XzE6CisgICAgICAgIHJl
dHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlU3Q0MjgxOwogICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgotICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0RDSV9QMzsKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGVScDQzMTsKICAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9FR180MzJfMToKLSAg
ICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19E
NjU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25j
b25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0
aW9uQ29sb3JQcmltYXJpZXNfSVRVX1JfMjAyMDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6U21wdGVFZzQzMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZp
ZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIyUGhvc3Bob3JzOworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOwogICAgIH0K
LQotICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9UcmFu
c2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hhcmFj
dGVyaXN0aWNzKQpAQCAtNDExLDI5ICs0MjIsNDUgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFRv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGMK
ICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCitzdGF0aWMgUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzIGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljcyh1aW50OF90IGNoYXJhY3RlcmlzdGljcykKIHsKICAgICBzd2l0Y2ggKGNoYXJhY3Rlcmlz
dGljcykgewogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9u
X0lUVV9SXzcwOV8yOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCVF80NzBfNl9NOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTIyY3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZTsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFfNzoKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGUx
NzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNN
UFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlv
bl9TTVBURV8yNDBNXzE5OTU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0
RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzIwODRfUFE7CisgICAgICAgIHJl
dHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlMjQwbTsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Cisg
ICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVh
cjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dy
aXRobWljOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpMb2c7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TG9ncml0aG1pY19TcXJ0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjQ7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDEzNjFFeHRlbmRl
ZENvbG91ckdhbXV0OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OklFQ182MTk2Nl8yXzE6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2MjE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMGJpdDoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEwYml0OwogICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6
Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl8yMDIwOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCdDIwMjBfMTJiaXQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U21wdGVTdDIwODQ7CiAgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE6Ci0gICAg
ICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBU
RV9TVF80MjhfMTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6U21wdGVTdDQyODE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAg
ICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxscHRyOwotICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjoKLSAgICAgICAgcmV0dXJu
IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0xpbmVhcjsKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QXJpYlN0ZEI2
N0hsZzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpV
bnNwZWNpZmllZDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRz
KGNvbnN0IE1hdHJpeENvZWZmaWNpZW50cyYgY29lZmZpY2llbnRzKQpAQCAtNDYyLDIxICs0ODks
MzEgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbnN0IE1h
dHJpeENvZWZmaWNpZW50cyYgY29lZmZpY2llbnQKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmlu
Z1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHVpbnQ4X3QgY29lZmZpY2llbnRzKQorc3RhdGlj
IFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMgY29udmVydFRvUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cyh1aW50OF90IGNvZWZmaWNpZW50cykKIHsKICAgICBzd2l0Y2ggKGNv
ZWZmaWNpZW50cykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRz
OjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NN
Rm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpJZGVudGl0eToKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlJnYjsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY6CisgICAgICAgIHJldHVybiBQbGF0Zm9y
bVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcwOTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6RkNDOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50czo6RmNjOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpCVF80NzBfN19CRzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHM6OkJ0NDcwYmc7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzYwMV83OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9JVFVfUl82MDFfNDsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0
cml4X0lUVV9SXzcwOV8yOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6U21wdGUxNzBtOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZp
Y2llbnRzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4X1NNUFRFXzI0ME1fMTk5NTsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRy
aXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6WUNnQ286CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpZQ2dDbzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQ
bGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5j
ZTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9D
b25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29l
ZmZpY2llbnRzOjpCdDIwMjBDb25zdGFudEx1bWluYW5jZTsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOwog
ICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwogfQogCiBzdGF0aWMgdWludDhfdCBjb252ZXJ0
U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkK
QEAgLTQ5MSw3ICs1MjgsNyBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRv
Q2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkKICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7
CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9y
bWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoY29uc3QgVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQmIHJlY29yZCwgaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWln
aHQpCitzdGF0aWMgUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25m
aWd1cmF0aW9uUmVjb3JkKGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiByZWNvcmQs
IGludDMyX3Qgd2lkdGgsIGludDMyX3QgaGVpZ2h0KQogewogICAgIC8vIFJlZjogIlZQIENvZGVj
IElTTyBNZWRpYSBGaWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgogICAgIC8v
IDxodHRwczovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+CkBAIC01MjAsMTIgKzU1Nywx
NCBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1h
dERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maQogICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0
aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxv
dwogICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgogCisgICAgYXV0byB2aWRl
b0luZm8gPSBWaWRlb0luZm86OmNyZWF0ZSgpOworICAgIHZpZGVvSW5mby0+c2l6ZSA9IHZpZGVv
SW5mby0+ZGlzcGxheVNpemUgPSB7IGZsb2F0KHdpZHRoKSwgZmxvYXQoaGVpZ2h0KSB9OworCiAg
ICAgY29uc3RleHByIHNpemVfdCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9IDEy
OwogCiAgICAgdWludDMyX3QgdmVyc2lvbkFuZEZsYWdzID0gMSA8PCAyNDsKICAgICB1aW50OF90
IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UgPSAoMHhGICYgcmVjb3JkLmJpdERlcHRoKSA8PCA0IHwg
KDB4NyAmIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZykgPDwgMSB8ICgweDEgJiByZWNvcmQudmlk
ZW9GdWxsUmFuZ2VGbGFnKTsKICAgICB1aW50MTZfdCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6
ZSA9IDA7Ci0KICAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZm
ZXI6OmNyZWF0ZShWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29k
ZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplKTsKICAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFu
ZEZsYWdzLCBmYWxzZSk7CiAgICAgdmlldy0+c2V0KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7
CkBAIC01MzUsNDYgKzU3NCwxNiBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maQogICAgIHZpZXct
PnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsKICAgICB2aWV3
LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cywgZmFsc2UpOwogICAgIHZpZXctPnNl
dCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUsIGZhbHNlKTsKLQotICAgIGF1dG8gZGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50
OCAqKXZpZXctPmRhdGEoKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKSk7Ci0KLSAgICBDRlR5cGVSZWYg
Y29uZmlndXJhdGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OwotICAgIENGVHlwZVJlZiBj
b25maWd1cmF0aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKLSAgICBhdXRvIGNvbmZpZ3Vy
YXRpb25EaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgY29uZmlndXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5H
VEgoY29uZmlndXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBWZWN0b3I8Q0ZUeXBlUmVm
PiBleHRlbnNpb25zS2V5cyB7IFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2Ft
cGxlRGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9OwotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4
dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07Ci0KLSAgICBpZiAo
cmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJh
bmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChQQUw6OmtDTUZvcm1hdERlc2Ny
aXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVl
cy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOwotICAgIH0KLQotICAgIGlmIChhdXRvIGNtQ29sb3JQ
cmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmll
cykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQ
cmltYXJpZXNLZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJp
bWFyaWVzKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24ocmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKSkg
ewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1
bmN0aW9uS2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2ZlckZ1
bmN0aW9uKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5zaW9u
c0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBleHRl
bnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7Ci0gICAgfQotCi0gICAgYXV0byBleHRlbnNp
b25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0
ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tl
eXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0KLSAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYg
Zm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIENNVmlkZW9Db2RlY1R5cGUgY29kZWMg
PSByZWNvcmQuY29kZWNOYW1lID09ICJ2cDA5IiA/IGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSA6ICd2
cDA4JzsKLSAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGNvZGVjLCB3aWR0aCwgaGVpZ2h0LCBleHRlbnNpb25zLmdldCgp
LCAmZm9ybWF0RGVzY3JpcHRpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gYWRvcHRDRihmb3JtYXREZXNjcmlwdGlvbik7CisgICAgdmlkZW9JbmZvLT5hdG9tRGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVpbnQ4X3QqPih2aWV3LT5kYXRhKCkp
LCB2aWV3LT5ieXRlTGVuZ3RoKCkpOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5mdWxsUmFu
Z2UgPSByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdlOjpG
dWxsUmFuZ2U7CisgICAgdmlkZW9JbmZvLT5jb2xvclNwYWNlLnByaW1hcmllcyA9IGNvbnZlcnRU
b1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpOworICAg
IHZpZGVvSW5mby0+Y29sb3JTcGFjZS50cmFuc2ZlciA9IGNvbnZlcnRUb1BsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcyhyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOwor
ICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5tYXRyaXggPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVv
TWF0cml4Q29lZmZpY2llbnRzKHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpOworICAgIHZpZGVv
SW5mby0+Y29kZWNOYW1lID0gcmVjb3JkLmNvZGVjTmFtZSA9PSAidnAwOSIgPyAndnAwOScgOiAn
dnAwOCc7CisgICAgcmV0dXJuIHZpZGVvSW5mbzsKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihj
b25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxl
bWVudDxDb2xvdXI+JiBjb2xvcikKK1JlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21W
UDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIs
IGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCiB7CiAgICAgVlBDb2RlY0NvbmZp
Z3VyYXRpb25SZWNvcmQgcmVjb3JkOwogCkBAIC02MDYsMTAgKzYxNSwxMCBAQCBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVh
ZGVyUGFyc2VyKGNvbgogICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVy
dFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0
aW9uUmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CisgICAg
cmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNv
cmQsIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCkpOwogfQogCi1zdGQ6Om9wdGlvbmFs
PFZQOEZyYW1lSGVhZGVyPiBwYXJzZVZQOEZyYW1lSGVhZGVyKHVpbnQ4X3QqIGZyYW1lRGF0YSwg
c2l6ZV90IGZyYW1lU2l6ZSkKK3N0ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4
RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQog
ewogICAgIC8vIFZQOCBmcmFtZSBoZWFkZXJzIGFyZSBkZWZpbmVkIGluIFJGQyA2Mzg2OiA8aHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYzODY+LgogCkBAIC02NzEsNyArNjgwLDcgQEAg
c3RkOjpvcHRpb25hbDxWUDhGcmFtZUhlYWRlcj4gcGFyc2VWUDhGcmFtZUhlYWRlcih1aW50OF90
KiBmcmFtZURhdGEsIHNpemVfdCBmcmEKICAgICByZXR1cm4gaGVhZGVyOwogfQogCi1SZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA4
SGVhZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8
Q29sb3VyPiYgY29sb3IpCitSZWY8VmlkZW9JbmZvPiBjcmVhdGVWaWRlb0luZm9Gcm9tVlA4SGVh
ZGVyKGNvbnN0IFZQOEZyYW1lSGVhZGVyJiBoZWFkZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29s
b3VyPiYgY29sb3IpCiB7CiAgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOwog
ICAgIHJlY29yZC5jb2RlY05hbWUgPSAidnAwOCI7CkBAIC03MDEsNyArNzEwLDcgQEAgUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OEhlYWRlcihjb25zdCBWUDgKICAgICAgICAgICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IGNv
bnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkpOwogICAg
IH0KIAotICAgIHJldHVybiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZChyZWNvcmQsIGhlYWRlci53aWR0aCwgaGVhZGVyLmhlaWdodCk7CisgICAg
cmV0dXJuIGNyZWF0ZVZpZGVvSW5mb0Zyb21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChyZWNv
cmQsIGhlYWRlci53aWR0aCwgaGVhZGVyLmhlaWdodCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0Nv
Y29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9V
dGlsaXRpZXNDb2NvYS5oCmluZGV4IDg3MTA0ZDhiN2IzNTdjMTYwYjZkY2NjNDFiZmUxZjg5ZTBh
NmMyNzEuLmE5ODA5OGM1YTM5ZmNiNDUwYjJmZjljNzYxMGQ5NzRlODI0NmQ0ZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaApAQCAtMjcsMTYgKzI3LDE3IEBACiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKIAotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAKIGNsYXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Ci10eXBlZGVmIGNvbnN0
IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVm
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0cnVjdCBBdWRpb0luZm87CisKIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7CiBXRUJDT1JFX0VYUE9SVCBi
b29sIHJlZ2lzdGVyVm9yYmlzRGVjb2RlcklmTmVlZGVkKCk7Ci1SZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3Qs
IGNvbnN0IHZvaWQqKTsKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZVZvcmJpc0F1ZGlvSW5mbyhz
aXplX3QsIGNvbnN0IHZvaWQqKTsKIAogc3RydWN0IE9wdXNDb29raWVDb250ZW50cyB7CiAgICAg
dWludDhfdCB2ZXJzaW9uIHsgMCB9OwpAQCAtNTUsOCArNTYsMTAgQEAgc3RydWN0IE9wdXNDb29r
aWVDb250ZW50cyB7CiAKIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJs
ZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCByZWdpc3Rlck9wdXNEZWNvZGVySWZOZWVkZWQoKTsK
K3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGtPcHVzSGVhZGVyU2l6ZSA9IDE5Oworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3Qga09wdXNNaW5pbXVtRnJhbWVEYXRhU2l6ZSA9IDI7CiBib29sIHBhcnNl
T3B1c1ByaXZhdGVEYXRhKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZh
dGVEYXRhLCBzaXplX3QgZnJhbWVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogZnJhbWVEYXRhLCBPcHVz
Q29va2llQ29udGVudHMmKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBPcHVzQ29va2llQ29udGVudHMmKTsK
K1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29uc3QgT3B1c0Nvb2tpZUNv
bnRlbnRzJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQppbmRleCA3
ZTBhZmIyOTBkZDg1YTc3ZjliZWZmZjQ5NDdhNDdiNzUzNWViMmY0Li42NjA5ZjRhZWI2N2EyZGY2
NDFmMDcyZTU4MTYwZjlhZjVkMzZkZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2Nv
YS5tbQpAQCAtMzAsMTIgKzMwLDEzIEBACiAKICNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKICNp
bXBvcnQgIk1lZGlhVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCA8QXVkaW9Ub29sYm94
L0F1ZGlvQ29kZWMuaD4KICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVudC5oPgog
I2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+Ci0jaW1wb3J0IDxDb3JlTWVkaWEv
Q01Gb3JtYXREZXNjcmlwdGlvbi5oPgogI2ltcG9ydCA8ZGxmY24uaD4KICNpbXBvcnQgPHd0Zi9G
bGlwQnl0ZXMuaD4KICNpbXBvcnQgPHd0Zi9TZWNvbmRzLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0
YXRpYyBib29sIHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoY29uc3QgY2hhciogZGVjb2Rlck5hbWUs
IE9TVHlwZSBkZWNvZGVyVHlwZSkKICNlbmRpZgogfQogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQo
T1NUeXBlIGZvcm1hdElELCBWZWN0b3I8dWludDhfdD4mJiBtYWdpY0Nvb2tpZSkKK3N0YXRpYyBS
ZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoT1NUeXBlIGZvcm1hdElE
LCBWZWN0b3I8dWludDhfdD4mJiBtYWdpY0Nvb2tpZSkKIHsKICAgICBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24gYXNiZCB7IH07CiAgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsKQEAg
LTg3LDggKzg4LDE2IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIH0KIAotICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihhc2JkKSwgbWFnaWNDb29raWUuc2l6ZSgpLCBtYWdp
Y0Nvb2tpZS5kYXRhKCkpOworICAgIGF1dG8gYXVkaW9JbmZvID0gQXVkaW9JbmZvOjpjcmVhdGUo
KTsKKyAgICBhdWRpb0luZm8tPmNvZGVjTmFtZSA9IGZvcm1hdElEOworICAgIGF1ZGlvSW5mby0+
cmF0ZSA9IGFzYmQubVNhbXBsZVJhdGU7CisgICAgYXVkaW9JbmZvLT5jaGFubmVscyA9IGFzYmQu
bUNoYW5uZWxzUGVyRnJhbWU7CisgICAgYXVkaW9JbmZvLT5mcmFtZXNQZXJQYWNrZXQgPSBhc2Jk
Lm1GcmFtZXNQZXJQYWNrZXQ7CisgICAgYXVkaW9JbmZvLT5iaXREZXB0aCA9IDE2OworICAgIGF1
ZGlvSW5mby0+Y29va2llRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUobWFnaWND
b29raWUpKTsKKyAgICByZXR1cm4gYXVkaW9JbmZvOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKFZP
UkJJUykgfHwgRU5BQkxFKE9QVVMpCiAKICNpZiBFTkFCTEUoT1BVUykKQEAgLTIwMCw3ICsyMDks
NyBAQCBib29sIHBhcnNlT3B1c1ByaXZhdGVEYXRhKHNpemVfdCBjb2RlY1ByaXZhdGVTaXplLCBj
b25zdCB2b2lkKiBjb2RlY1ByaXZhdGVEYXRhLAogCiAgICAgYXV0byogcHJpdmF0ZURhdGFQdHIg
PSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oY29kZWNQcml2YXRlRGF0YSk7CiAKLSAgICBp
ZiAoY29kZWNQcml2YXRlU2l6ZSA8IDE5KQorICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwga09w
dXNIZWFkZXJTaXplKQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAgLy8gMS4gTWFnaWMgU2ln
bmF0dXJlOgpAQCAtMzYyLDcgKzM3MSw3IEBAIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2RlcklmTmVl
ZGVkKCkKICNlbmRpZgogfQogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJiBj
b29raWVDb250ZW50cykKK1JlZlB0cjxBdWRpb0luZm8+IGNyZWF0ZU9wdXNBdWRpb0luZm8oY29u
c3QgT3B1c0Nvb2tpZUNvbnRlbnRzJiBjb29raWVDb250ZW50cykKIHsKICNpZiBFTkFCTEUoT1BV
UykKICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKQEAgLTM3Miw3ICszODEsNyBA
QCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0
RGVzY3JpcHRpb24oY29uc3QgT3B1c0NvbwogICAgIGlmICghY29va2llRGF0YS5zaXplKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVz
Y3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMnLCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKKyAgICByZXR1
cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRhKSk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb29raWVDb250ZW50cyk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC00NjUsNyArNDc0LDcgQEAgYm9vbCByZWdpc3RlclZvcmJpc0RlY29kZXJJZk5l
ZWRlZCgpCiAjZW5kaWYKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNy
ZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwg
Y29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3JiaXNB
dWRpb0luZm8oc2l6ZV90IHByaXZhdGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEp
CiB7CiAjaWYgRU5BQkxFKFZPUkJJUykKICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJs
ZSgpKQpAQCAtNDc1LDcgKzQ4NCw3IEBAIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2CiAgICAgaWYg
KCFjb29raWVEYXRhLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCgndm9yYicsIFdURk1vdmUo
Y29va2llRGF0YSkpOworICAgIHJldHVybiBjcmVhdGVBdWRpb0luZm9Gb3JGb3JtYXQoJ3ZvcmIn
LCBXVEZNb3ZlKGNvb2tpZURhdGEpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVE
YXRhU2l6ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
U2FtcGxlR1N0cmVhbWVyLmgKaW5kZXggZmY4YzFhOGI0ODFkN2YzM2NjMjQ3YjY0ZGYxYjhmYWM3
MGNiZGRkMi4uMmI3ZGQ0NDRjNTNkMmQ2YmQwN2E5YjgzOGQ2NzliNjRiMzc0OWFmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmgKQEAgLTU3LDggKzU3LDYgQEAgcHVibGljOgog
ICAgIEZsb2F0U2l6ZSBwcmVzZW50YXRpb25TaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9wcmVzZW50YXRpb25TaXplOyB9CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3Qg
TWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlh
VGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEaXZpc2FibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHN0ZDo6cGFpcjxSZWZQdHI8
TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1l
JiwgVXNlRW5kVGltZSkgb3ZlcnJpZGUgIHsgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9OyB9
CiAgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IG92
ZXJyaWRlOwogICAgIFNhbXBsZUZsYWdzIGZsYWdzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9mbGFnczsgfQogICAgIFBsYXRmb3JtU2FtcGxlIHBsYXRmb3JtU2FtcGxlKCkgY29uc3Qgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291
cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDBhOTRh
Y2YxYTFlMTM2NmY2YTU3MjU4OGI3NzA0MWU0YzNjNjQ3MzIuLjNjZjdlZTY1M2VjODEzZGZiYWUz
M2VmOTNhMGMzM2ZlMmM2Mzk0ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja1NvdXJjZUJ1ZmZlclByaXZh
dGUuY3BwCkBAIC02Nyw4ICs2Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBvZmZzZXRUaW1lc3RhbXBzQnkoY29uc3Qg
TWVkaWFUaW1lJiBvZmZzZXQpIG92ZXJyaWRlIHsgbV9ib3gub2Zmc2V0VGltZXN0YW1wc0J5KG9m
ZnNldCk7IH0KICAgICB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lc3RhbXAsIGNvbnN0IE1lZGlhVGltZSYgZGVjb2RlVGltZXN0YW1wKSBvdmVycmlk
ZSB7IG1fYm94LnNldFRpbWVzdGFtcHMocHJlc2VudGF0aW9uVGltZXN0YW1wLCBkZWNvZGVUaW1l
c3RhbXApOyB9Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBsZT4sIFJlZlB0cjxNZWRp
YVNhbXBsZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKSBvdmVycmlkZSB7
IHJldHVybiB7bnVsbHB0ciwgbnVsbHB0cn07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0
ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB1bnNpZ25lZCBnZW5l
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ib3guZ2VuZXJhdGlvbigpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVy
L01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAppbmRleCA3OGY3MzEzNGNlNmE3YTIxNGNkYzlkZTA1
YzQ3NTM3MmUxN2M5YTNkLi44OWM3OTJmZTVkNDVlNDU5ODg0MTQzZjU0NDI5MDE2ZDY3MmM0ZTc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIv
TWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKQEAgLTM0LDggKzM0LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogTWVkaWFT
YW1wbGVCeXRlUmFuZ2U6Ok1lZGlhU2FtcGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiBzYW1wbGUs
IE1UUGx1Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQotICAg
IDogTWVkaWFTYW1wbGVBVkZPYmpDKG51bGxwdHIpCi0gICAgLCBtX3ByZXNlbnRhdGlvblRpbWUo
c2FtcGxlLnByZXNlbnRhdGlvblRpbWUoKSkKKyAgICA6IG1fcHJlc2VudGF0aW9uVGltZShzYW1w
bGUucHJlc2VudGF0aW9uVGltZSgpKQogICAgICwgbV9kZWNvZGVUaW1lKHNhbXBsZS5kZWNvZGVU
aW1lKCkpCiAgICAgLCBtX2R1cmF0aW9uKHNhbXBsZS5kdXJhdGlvbigpKQogICAgICwgbV9ieXRl
UmFuZ2UoKnNhbXBsZS5ieXRlUmFuZ2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdl
LmgKaW5kZXggYjY2ZjNhMzVhOTZmN2I1ZDVmOTdhYmQ2ZWRhMDAyNjE1ODI2ZTFlMi4uNWRhMjg4
NWQ0NWQxNzg4ODM2MjI5MTdlNWU0YWNiOTdmOGVjYWUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2Ft
cGxlQnl0ZVJhbmdlLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIE1lZGlhU2FtcGxlQnl0ZVJhbmdlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6Ok1lZGlh
U2FtcGxlQVZGT2JqQyB7CitjbGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpNZWRpYVNhbXBsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxNZWRpYVNh
bXBsZUJ5dGVSYW5nZT4gY3JlYXRlKFdlYkNvcmU6Ok1lZGlhU2FtcGxlJiBzYW1wbGUsIE1UUGx1
Z2luQnl0ZVNvdXJjZVJlZiBieXRlU291cmNlLCB1aW50NjRfdCB0cmFja0lEKQogICAgIHsKQEAg
LTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OlBsYXRmb3JtU2FtcGxlOjpUeXBl
IHBsYXRmb3JtU2FtcGxlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFdlYkNvcmU6OlBsYXRm
b3JtU2FtcGxlOjpCeXRlUmFuZ2VTYW1wbGVUeXBlOyB9CiAgICAgdm9pZCBvZmZzZXRUaW1lc3Rh
bXBzQnkoY29uc3QgTWVkaWFUaW1lJikgZmluYWw7CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNv
bnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOworICAgIFJlZjxNZWRpYVNh
bXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCB7IHJldHVybiAqY29uc3RfY2Fz
dDxNZWRpYVNhbXBsZUJ5dGVSYW5nZSo+KHRoaXMpOyB9CiAKIHByaXZhdGU6CiAgICAgTWVkaWFT
YW1wbGVCeXRlUmFuZ2UoTWVkaWFTYW1wbGUmLCBNVFBsdWdpbkJ5dGVTb3VyY2VSZWYsIHVpbnQ2
NF90IHRyYWNrSUQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDY3MWVlZjU2N2U1YzNiYjI3MGRkOWZiYTBmNWRhMzM4MTYzZWVlZTQuLjU4ZDRh
NzUwNzdhZmJhZmYyMTg2ZmQwMWYyMDcyNjgwYzRmODNmYjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAyMi0wMy0w
NSAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcy
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U2FtcGxlTWFwLmNwcDoKKworMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBw
bGUuY29tPgorCisgICAgICAgIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSBjb252ZXJzaW9uIHRv
IENNVGltZSBpbmNvcnJlY3RseSBjcmVhdGVzIGEgdmFsaWQgdGltZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MworICAgICAgICByZGFyOi8v
cHJvYmxlbS84OTgxNDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEZseS1ieSBmaXhlczogQVZGb3VuZGF0aW9uU29mdExpbmtUZXN0IHdhc24ndCBi
ZWluZyBjb21waWxlZAorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbToKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9j
b2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW06IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1h
cC5jcHA6IFVwZGF0ZSBmb2xsb3dpbmcgYmFzZSBjbGFzcyBkZWZpbml0aW9uIGNoYW5nZS4KKwor
MjAyMi0wMi0yMyAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAg
IEFkZCBhYmlsaXR5IHRvIGNvbnZlcnQgRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlciB0byBDTUJsb2Nr
QnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzcwNzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAyMi0wMy0wNCAgUGhpbGlwcGUgTm9ybWFuZCAg
PHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0ZsYXRwYWsgU0RLXSBVcGdyYWRlIGZy
b20gbGx2bTEyIHRvIGxsdm0xMwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ODk0ZmJkNGZk
Y2U1ZTY3YjNkNDM3NzJhZGY5YjA2YjM1MDE5NTRkLi4zZGVjMGNlZTc5M2MwNjUxMDBjYTNlMTNl
OGNlZTZmOTJjYTM4MDRjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjYyLDYgKzI2Miw4
IEBACiAJCTUxMDQ3NzczMUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNvdmVyeS5zcWxp
dGUzLXNobSBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTA0Nzc3MDFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zlcnkuc3FsaXRl
My1zaG0gKi87IH07CiAJCTUxMDQ3Nzc0MUQyOThEREQwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNv
dmVyeS5zcWxpdGUzLXdhbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTA0Nzc3MTFEMjk4RDg1MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3Zl
cnkuc3FsaXRlMy13YWwgKi87IH07CiAJCTUxMDQ3Nzc3MUQyOThFNzIwMDk3NDdFQiAvKiBJREJE
ZWxldGVSZWNvdmVyeS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDQ3Nzc2MUQyOThFNTcwMDk3NDdFQiAvKiBJREJEZWxldGVSZWNv
dmVyeS5odG1sICovOyB9OworCQk1MTBBNjY3QjI3RDMwMUFDMDBEMjI2MjkgLyogQ29yZU1lZGlh
VXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEwQTY2N0EyN0QyRkM3QTAwRDIyNjI5IC8qIENvcmVNZWRpYVV0aWxpdGllcy5tbSAqLzsg
fTsKKwkJNTEwQTY2N0MyN0QzMDFDNjAwRDIyNjI5IC8qIEFWRm91bmRhdGlvblNvZnRMaW5rVGVz
dC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFE
RjUxMjI2QTk1RkIwMDNERDJGNyAvKiBBVkZvdW5kYXRpb25Tb2Z0TGlua1Rlc3QubW0gKi87IH07
CiAJCTUxMEE5MUY4MjREMzYyMjEwMEJGRDg5QyAvKiBTb255RHVhbFNob2NrMy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEE5MUY3MjREMzYyMTkw
MEJGRDg5QyAvKiBTb255RHVhbFNob2NrMy5tbSAqLzsgfTsKIAkJNTEwQTkyMEEyNEQ1MDQ4OTAw
QkZEODlDIC8qIExvZ2l0ZWNoRjMxMC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMEE5MjA5MjRENTA0ODMwMEJGRDg5QyAvKiBMb2dpdGVjaEYzMTAu
bW0gKi87IH07CiAJCTUxMEE5MjBDMjRENTI3NTUwMEJGRDg5QyAvKiBMb2dpdGVjaEY3MTAubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBOTIwQjI0
RDUyNzUxMDBCRkQ4OUMgLyogTG9naXRlY2hGNzEwLm1tICovOyB9OwpAQCAtMjA2OSw2ICsyMDcx
LDcgQEAKIAkJNTEwNDc3NzExRDI5OEQ4NTAwOTc0N0VCIC8qIElEQkRlbGV0ZVJlY292ZXJ5LnNx
bGl0ZTMtd2FsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gZmlsZTsgcGF0aCA9ICJJREJEZWxldGVSZWNvdmVyeS5zcWxpdGUzLXdhbCI7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDQ3Nzc1MUQyOThFMDMwMDk3NDdFQiAvKiBJREJEZWxl
dGVSZWNvdmVyeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IElE
QkRlbGV0ZVJlY292ZXJ5Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA0Nzc3
NjFEMjk4RTU3MDA5NzQ3RUIgLyogSURCRGVsZXRlUmVjb3ZlcnkuaHRtbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuaHRtbDsgcGF0aCA9IElEQkRlbGV0ZVJlY292ZXJ5Lmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMEE2NjdBMjdEMkZDN0EwMEQyMjYyOSAvKiBDb3JlTWVkaWFVdGlsaXRp
ZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDb3JlTWVkaWFVdGlsaXRpZXMubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEE5MUY3MjREMzYyMTkwMEJGRDg5QyAvKiBTb255
RHVhbFNob2NrMy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNv
bnlEdWFsU2hvY2szLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBBOTIwOTI0
RDUwNDgzMDBCRkQ4OUMgLyogTG9naXRlY2hGMzEwLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gTG9naXRlY2hGMzEwLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTBBOTIwQjI0RDUyNzUxMDBCRkQ4OUMgLyogTG9naXRlY2hGNzEwLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTG9naXRlY2hGNzEwLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA1Niw2ICs1MDU5LDcgQEAKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTA3MTFERjUxMjI2QTk1RkIwMDNERDJGNyAvKiBBVkZvdW5kYXRpb25Tb2Z0TGlu
a1Rlc3QubW0gKi8sCiAJCQkJMzFGODY1RTUyNjcwMUU3MzAwM0JGQzZEIC8qIENvcmVDcnlwdG9T
UEkuaCAqLywKKwkJCQk1MTBBNjY3QTI3RDJGQzdBMDBEMjI2MjkgLyogQ29yZU1lZGlhVXRpbGl0
aWVzLm1tICovLAogCQkJCTc1MUIwNUQ1MUY4RUFDMUEwMDI4QTA5RSAvKiBEYXRhYmFzZVRyYWNr
ZXJUZXN0Lm1tICovLAogCQkJCTU3RjFDOTEwMjVEREQ1MTkwMEU4RjZFQSAvKiBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudENvY29hLm1tICovLAogCQkJCTU3NjlDNTBBMUQ5QjAwMDEwMDA4NDdGQiAv
KiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5tbSAqLywKQEAgLTU1MjcsNiArNTUzMSw3IEBACiAJ
CQkJRjRGQTJBNEYyNEQxRjA1NzAwNjE4QTQ2IC8qIEF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JQcm9w
b3NlZFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RDOEU0OEQxQkM1Q0I0NTAwNTk0RkVD
IC8qIEF1ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjQyRDYz
NDQyMkExNzI5RjAwRDJGQjNBIC8qIEF1dG9jb3JyZWN0aW9uVGVzdHNJT1MubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MTBBNjY3QzI3RDMwMUM2MDBEMjI2MjkgLyogQVZGb3VuZGF0aW9uU29mdExp
bmtUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFQjUxQTQxMUE3RTAwNDQ3QzRDIC8q
IEJhY2tGb3J3YXJkTGlzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFDN0ZFQjIwMjA3QzBGMkUw
MEQyMzI3OCAvKiBCYWNrZ3JvdW5kQ29sb3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMTVDQkIz
MDIzRjFGRjFBMDAzMDBDQzcgLyogQmFja2xpZ2h0TGV2ZWxOb3RpZmljYXRpb24ubW0gaW4gU291
cmNlcyAqLywKQEAgLTU1NTYsNiArNTU2MSw3IEBACiAJCQkJQ0QwQkQwQTYxRjc5OTI0RDAwMUFC
MkNGIC8qIENvbnRleHRNZW51SW1nV2l0aFZpZGVvLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTFD
MTQyQzIyNEFBN0IyRTAwNDQ0MjA3IC8qIENvbnRleHRNZW51TW91c2VFdmVudHMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlGNDAzNEZBMTI3NUQ1NDAyMDAzQTgxRjggLyogQ29va2llQ29uc2VudC5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTUxMEE2NjdCMjdEMzAxQUMwMEQyMjYyOSAvKiBDb3JlTWVk
aWFVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VBQzFBNDExQTM0MDA0NDdD
NEMgLyogQ291bnRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0FFQUQ0N0YxRTIwMTE2QzAw
NDE2RUZFIC8qIENyb3NzUGFydGl0aW9uRmlsZVNjaGVtZUFjY2Vzcy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTdDQ0U3RURCMUE0MTFBOTIwMDQ0N0M0QyAvKiBDU1NQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2Ft
cGxlTWFwLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAu
Y3BwCmluZGV4IDVhNjUzNTgzMDE1ZDI4OGRlZjQ3YmNiNDc5MmMyNGM4ZDJmOWE3ZWYuLjcxMjA1
OGEzNjg4ODc3NmIxNzc4ZTRkY2Q5ZDhhOTBjMDIwNmFlYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwCkBAIC02NCw4ICs2NCw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9wcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKICAg
ICAgICAgbV9kZWNvZGVUaW1lID0gZGVjb2RlVGltZTsKICAgICB9OwotICAgIGJvb2wgaXNEaXZp
c2FibGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotICAgIHN0ZDo6cGFpcjxSZWZQ
dHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFU
aW1lJiwgVXNlRW5kVGltZSkgZmluYWwgeyByZXR1cm4geyB9OyB9CiAgICAgUmVmPE1lZGlhU2Ft
cGxlPiBjcmVhdGVOb25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IGZpbmFsIHsKICAgICAgICAgcmV0
dXJuIGNyZWF0ZShtX3ByZXNlbnRhdGlvblRpbWUsIG1fZGVjb2RlVGltZSwgbV9kdXJhdGlvbiwg
c3RhdGljX2Nhc3Q8U2FtcGxlRmxhZ3M+KG1fZmxhZ3MgfCBJc05vbkRpc3BsYXlpbmcpKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVk
QnVmZmVyLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZm
ZXIuY3BwCmluZGV4IDMxNTVjMDlmMjQ3M2ViZWE2OTAwYjM5YzBkOWJlY2FhY2FhNWEwMTUuLmIw
MTEyOGIyNmIxY2MwYTIwNWM2NTQxYTQ4NTZiN2YwMmY0OGJjNzYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzksNiAr
MjM5LDQxIEBAIFRFU1RfRihGcmFnbWVudGVkU2hhcmVkQnVmZmVyVGVzdCwgZ2V0U29tZURhdGEp
CiAgICAgY2hlY2tCdWZmZXIobC5kYXRhKCksIGwuc2l6ZSgpLCAibCIpOwogfQogCitURVNUX0Yo
RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRlc3QsIGdldENvbnRpZ3VvdXNEYXRhKQoreworICAgIFZl
Y3Rvcjx1aW50OF90PiBzMSA9IHsgJ2EnLCAnYicsICdjJywgJ2QnIH07CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHMyID0geyAnZScsICdmJywgJ2cnLCAnaCcgfTsKKyAgICBWZWN0b3I8dWludDhfdD4g
czMgPSB7ICdpJywgJ2onLCAnaycsICdsJyB9OworCisgICAgU2hhcmVkQnVmZmVyQnVpbGRlciBi
dWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKFdURk1vdmUoczEpKTsKKyAgICBidWlsZGVyLmFw
cGVuZChXVEZNb3ZlKHMyKSk7CisgICAgYnVpbGRlci5hcHBlbmQoV1RGTW92ZShzMykpOworICAg
IGF1dG8gYnVmZmVyID0gYnVpbGRlci50YWtlKCk7CisKKyAgICBhdXRvIGFiY2QgPSBidWZmZXIt
PmdldENvbnRpZ3VvdXNEYXRhKDAsIDQpOworICAgIGF1dG8gYmNkZWZnaGkgPSBidWZmZXItPmdl
dENvbnRpZ3VvdXNEYXRhKDEsIDgpOworICAgIGF1dG8gZ2ggPSBidWZmZXItPmdldENvbnRpZ3Vv
dXNEYXRhKDYsIDIpOworICAgIGF1dG8gZ2hpaiA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEo
NiwgNCk7CisgICAgYXV0byBoID0gYnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YSg3LCAxKTsKKyAg
ICBhdXRvIGlqayA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoOCwgMyk7CisgICAgYXV0byBr
bCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoMTAsIDIpOworICAgIGF1dG8gbCA9IGJ1ZmZl
ci0+Z2V0Q29udGlndW91c0RhdGEoMTEsIDEpOworICAgIGNoZWNrQnVmZmVyKGFiY2QtPmRhdGEo
KSwgYWJjZC0+c2l6ZSgpLCAiYWJjZCIpOworICAgIGNoZWNrQnVmZmVyKGJjZGVmZ2hpLT5kYXRh
KCksIGJjZGVmZ2hpLT5zaXplKCksICJiY2RlZmdoaSIpOworICAgIGNoZWNrQnVmZmVyKGdoLT5k
YXRhKCksIGdoLT5zaXplKCksICJnaCIpOworICAgIGNoZWNrQnVmZmVyKGdoaWotPmRhdGEoKSwg
Z2hpai0+c2l6ZSgpLCAiZ2hpaiIpOworICAgIGNoZWNrQnVmZmVyKGgtPmRhdGEoKSwgaC0+c2l6
ZSgpLCAiaCIpOworICAgIGNoZWNrQnVmZmVyKGlqay0+ZGF0YSgpLCBpamstPnNpemUoKSwgImlq
ayIpOworICAgIGNoZWNrQnVmZmVyKGtsLT5kYXRhKCksIGtsLT5zaXplKCksICJrbCIpOworICAg
IGNoZWNrQnVmZmVyKGwtPmRhdGEoKSwgbC0+c2l6ZSgpLCAibCIpOworICAgIGF1dG8gZmdoaWpr
bCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoNSwgMjApOworICAgIEVYUEVDVF9FUShmZ2hp
amtsLT5zaXplKCksIGJ1ZmZlci0+c2l6ZSgpIC0gNSk7CisgICAgY2hlY2tCdWZmZXIoZmdoaWpr
bC0+ZGF0YSgpLCBmZ2hpamtsLT5zaXplKCksICJmZ2hpamtsIik7CisgICAgYXV0byBvdXRCb3Vu
ZCA9IGJ1ZmZlci0+Z2V0Q29udGlndW91c0RhdGEoMzAsIDIwKTsKKyAgICBFWFBFQ1RfRVEob3V0
Qm91bmQtPnNpemUoKSwgMHUpOworfQorCiBURVNUX0YoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlclRl
c3QsIGlzRXF1YWxUbykKIHsKICAgICBhdXRvIG1ha2VCdWZmZXIgPSBbXSAoVmVjdG9yPFZlY3Rv
cjx1aW50OF90Pj4mJiBjb250ZW50cykgewpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVzdC5tbSBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGlua1Rl
c3QubW0KaW5kZXggYmFmYTc1ZjQ2ZTYwMmRjY2YxN2Y1N2Y3YzAyNTNmZjBiMTk1YjE0Zi4uOTg2
ZTA4ZWQ5MDRlMGFiM2YwN2IxMTE4YjFmODM2OGI0MjQwMmUwOCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rVGVz
dC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY29jb2EvQVZGb3Vu
ZGF0aW9uU29mdExpbmtUZXN0Lm1tCkBAIC0xOTMsMTEgKzE5MywxNCBAQCBURVNUKEFWRm91bmRh
dGlvblNvZnRMaW5rLCBDb25zdGFudHMpCiAjZW5kaWYKIAogI2VuZGlmCi0gICAgCisKKyNpZiAh
UExBVEZPUk0oV0FUQ0hPUykKKyAgICBFWFBFQ1RfVFJVRShbUEFMOjpBVlJvdXRlRGV0ZWN0b3JN
dWx0aXBsZVJvdXRlc0RldGVjdGVkRGlkQ2hhbmdlTm90aWZpY2F0aW9uIGlzRXF1YWxUb1N0cmlu
ZzpAIkFWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VOb3RpZmlj
YXRpb24iXSk7CisjZW5kaWYKKwogI2lmIEhBVkUoQVZST1VURVBJQ0tFUlZJRVcpCi0gICAgRVhQ
RUNUX1RSVUUoW0FWUm91dGVEZXRlY3Rvck11bHRpcGxlUm91dGVzRGV0ZWN0ZWREaWRDaGFuZ2VO
b3RpZmljYXRpb24gaXNFcXVhbFRvU3RyaW5nOkAiQVZSb3V0ZURldGVjdG9yTXVsdGlwbGVSb3V0
ZXNEZXRlY3RlZERpZENoYW5nZU5vdGlmaWNhdGlvbiJdKTsKLSAgICBFWFBFQ1RfVFJVRShbQVZP
dXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBpc0VxdWFsVG9T
dHJpbmc6QCJBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0aW9u
Il0pOwotI2VuZGlmIC8vIFBMQVRGT1JNKFdBVENIT1MpCisgICAgRVhQRUNUX1RSVUUoW1BBTDo6
QVZPdXRwdXRDb250ZXh0T3V0cHV0RGV2aWNlc0RpZENoYW5nZU5vdGlmaWNhdGlvbiBpc0VxdWFs
VG9TdHJpbmc6QCJBVk91dHB1dENvbnRleHRPdXRwdXREZXZpY2VzRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIl0pOworI2VuZGlmIC8vIEhBVkUoQVZST1VURVBJQ0tFUlZJRVcpCiAKIH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NvY29hL0NvcmVNZWRpYVV0
aWxpdGllcy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jb2NvYS9Db3Jl
TWVkaWFVdGlsaXRpZXMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzgzYTM4MDU1NzUyZWEzMWM5MWQ0ZDQ5Y2Uz
Y2YwNDRkYmE2ZGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jb2NvYS9Db3JlTWVkaWFVdGlsaXRpZXMubW0KQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorCisjaWYgVVNFKEFWRk9VTkRBVElPTikK
KworI2luY2x1ZGUgPHBhbC9hdmZvdW5kYXRpb24vTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmg+CisK
K25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworVEVTVChQQUwsIE1lZGlhVGltZSkKK3sKKyAg
ICBFWFBFQ1RfRVEoUEFMOjp0b01lZGlhVGltZShQQUw6OnRvQ01UaW1lKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkpLCBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453950</attachid>
            <date>2022-03-07 02:22:41 -0800</date>
            <delta_ts>2022-03-07 02:30:35 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237472-20220307212238.patch</filename>
            <type>text/plain</type>
            <size>144272</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY4Yzk4NzMyNzRiODNm
MTEzZmNkNmFjOWJmMGVhMWEzMWIyNzQwOC4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggOTkxOTdlMjQ1YjBhYzg4MDU1Y2Y0OWI3N2U5YTBkYTU4NDdk
NDZlZC4uNzM4M2ZlZTAxYTMxODc5ZmZiNDYxMWRiOTQ5OTY2MTNhNDc4OWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJk
ICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
IGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJv
YmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcDoKKyAgICAgICAgKiBwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaDogTWV0aG9kIENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgd2Fz
bid0IHNvZnQtbGlua2VkLgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzQ3MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZWM1Y2MyOTA0YWY0N2YzODc3NmZjMTJhYTE3YWYxOWI5
NzM0Zjk2Li4zODVhZmY2NjYyYjBkYmJiMjI5MDBiNzQ5NzA4ZTA0OWYyZDQwNWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2
ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4
MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2UpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuaDogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorICAgICAgICBkaWRuJ3QgbmVlZCB0
byBpbmhlcml0IGZyb20gTWVkaWFTYW1wbGVBVkZPYmpDLiAKKwogMjAyMi0wMy0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTGliV2ViUlRDQ29kZWNzOjpz
ZXRFbmNvZGVSYXRlcyBzaG91bGQgc2VuZCBMaWJXZWJSVENDb2RlY3NQcm94eTo6U2V0RW5jb2Rl
UmF0ZXMgb25seSB3aGVuIHRoZSBlbmNvZGVyIGlzIGxpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5
OWIzNmY1NWYyZGY2ZjhjOTlkNTc2Yi4uZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2Rh
MmIyNjUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5jcHAKQEAgLTE2OSw2ICsxNjksNyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENN
VGltZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENN
VGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRp
bWUgZmlyZVRpbWUsIHVpbnQzMl90IGZsYWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmly
ZVRpbWUsIGZsYWdzKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNF
X1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNv
dXJjZVRvRmlyZUltbWVkaWF0ZWx5LCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2Us
IGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSks
IFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
LCBQQUxfRVhQT1JUKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQo
UEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBp
bnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMs
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxs
b2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2Ny
aXB0aW9uT3V0KSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJ
VEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1h
Z2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0
RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywg
KENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFM
X0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwg
Q29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNp
b25zLCBDR1NpemUsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29s
ZWFuIHVzZVBpeGVsQXNwZWN0UmF0aW8sIEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRl
b0Rlc2MsIHVzZVBpeGVsQXNwZWN0UmF0aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4
IDU3MGE2YTk4NTNjNDQ4MTY4Yjk5MDIyMDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdl
NTkyNWEyNWI2YWNmYmQxNThhNDMyZTdhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKQEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0
Y2hTb3VyY2VUbwogI2RlZmluZSBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmly
ZUltbWVkaWF0ZWx5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRj
aFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
KQogI2RlZmluZSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRp
bWVDb3B5QXNEaWN0aW9uYXJ5CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciwgQ01WaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qg
d2lkdGgsIGludDMyX3QgaGVpZ2h0LCBDRkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3Is
IGNvZGVjVHlwZSwgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25P
dXQpKQorI2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29y
ZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZUZvckltYWdlQnVmZmVyLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJ
bWFnZUJ1ZmZlclJlZiBpbWFnZUJ1ZmZlciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBv
dXREZXNjKSwgKGFsbG9jYXRvciwgaW1hZ2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVk
aWFfQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggOThiMDM1NzkxYTZlYmIwZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTMxMiw2ICszMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvQ01VdGlsaXRpZXMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9h
dFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3Bw
CkBAIC02NDksNiArNjUwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Nv
bG9yQ29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0
MjNmMjdiZmMyNGQ3MTdlYmFjZmEuLmY5ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdi
N2Y4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5p
ZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhYTIyN2Q1OThlNDI5ZDg1NWJiM2RlZWRhOWIxZDQ3Mjgw
ZDYyNDNiLi4xODE5NzQ0OWVlZDY0OTM3OWZmMWY0MjcxNjhkYWI1ZGY4N2Q5ZmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTc5LDYgKzE1NzksOCBAQAogCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NjYwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCAqLzsgfTsKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MTUwQjVERDI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYy
RTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxp
dGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYw
N0UyNjE1NDM1QTAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRC
MkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0
eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVy
LmggKi87IH07CiAJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThC
MUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3Nyw2ICs5Nzc5LDggQEAKIAkJNTE0
Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRD
NzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENNVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTUxRjA3QjI2MTUzNjNGMDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdD
NjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5Mjg5LDYgKzI5MjkzLDggQEAK
IAkJCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICov
LAogCQkJCUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
Y3BwICovLAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uaCAqLywKKwkJCQk1MTUwQjVEQzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
aCAqLywKKwkJCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8s
CiAJCQkJRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlG
NDhEMkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0
QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICsz
MzkwMyw3IEBACiAJCQkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1Q
YXN0ZWJvYXJkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEw
OUQ1MDA3NDU3QUUgLyogQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQy
N0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMw
NTRDQjExMThDOEU0MDBDRTI2MzYgLyogQ29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUVCNURGMEU4MUI5QUIwMEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25J
bmRleENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlD
REY0QjcxNTFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
QjcwNDVCMUY3NDY1QTEwMDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDREMyMjQyODFGNzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RG
NDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBG
QjFBQTUxRTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkM2OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NT
UHJvcGVydHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRp
YVNhbXBsZS5oCmluZGV4IDBhNmYyOGEyMDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMu
LmExMjgyNzNhNTc2ZjgzYmZhZTE3YjU3MjgwODE1MjRmNmRiYTUyMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMjYsNiArMjYsOSBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb3VyQ0MuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CkBAIC00MCw4ICs0MywxMCBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5
OworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVu
dW0gVHlwZSB7CkBAIC03MiwxMyArNzcsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRT
aXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNEaXZpc2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICBlbnVtIERpdmlkZUZs
YWdzIHsgQmVmb3JlUHJlc2VudGF0aW9uVGltZSwgQWZ0ZXJQcmVzZW50YXRpb25UaW1lIH07CiAg
ICAgZW51bSBjbGFzcyBVc2VFbmRUaW1lIDogYm9vbCB7CiAgICAgICAgIERvTm90VXNlLAogICAg
ICAgICBVc2UsCiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpID0gMDsKKyAgICB2
aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+
PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90
VXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB9CiAgICAgdmlydHVhbCBSZWY8TWVkaWFTYW1w
bGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KQEAgLTExOSw3ICsxMjgsMTEgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgSGFzQWxwaGE7IH0KICAgICBib29s
IGhhc1N5bmNJbmZvKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc1N5bmNJbmZvOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJ7UFRTKCIsIHByZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNvZGVUaW1l
KCksICIpLCBkdXJhdGlvbigiLCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClmbGFncygp
LCAiKSwgcHJlc2VudGF0aW9uU2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgIngi
LCBwcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksICIpfSIpOworICAgIH0KKwogICAgIFN0cmlu
ZyB0b0pTT05TdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byBvYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMTM0LDggKzE0NywxMjggQEAgcHVibGljOgogICAgIH0K
IH07CiAKK3N0cnVjdCBBdWRpb0luZm87CitzdHJ1Y3QgVmlkZW9JbmZvOworCitzdHJ1Y3QgVHJh
Y2tJbmZvIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYWNrSW5mbz4geworICAgIGVu
dW0gY2xhc3MgVHJhY2tUeXBlIHsgVW5rbm93biwgQXVkaW8sIFZpZGVvIH07CisKKyAgICBib29s
IGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpBdWRpbzsgfQor
ICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUcmFja1R5cGU6OlZp
ZGVvOyB9CisKKyAgICBUcmFja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSB8fCBjb2RlY05hbWUgIT0gb3Ro
ZXIuY29kZWNOYW1lIHx8IHRyYWNrSUQgIT0gb3RoZXIudHJhY2tJRCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGVxdWFsVG8ob3RoZXIpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVHJhY2tJbmZvJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIEZvdXJDQyBjb2RlY05hbWU7CisgICAgdWludDY0X3Qg
dHJhY2tJRCB7IDAgfTsKKworICAgIHZpcnR1YWwgflRyYWNrSW5mbygpID0gZGVmYXVsdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3Ro
ZXIpIGNvbnN0ID0gMDsKKyAgICBUcmFja0luZm8oVHJhY2tUeXBlIHR5cGUpCisgICAgICAgIDog
bV90eXBlKHR5cGUpIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRyYWNrVHlwZSBtX3R5cGUg
eyBUcmFja1R5cGU6OlVua25vd24gfTsKK307CisKK3N0cnVjdCBWaWRlb0luZm8gOiBwdWJsaWMg
VHJhY2tJbmZvIHsKKyAgICBzdGF0aWMgUmVmPFZpZGVvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb0luZm8oKSk7IH0KKworICAgIEZsb2F0U2l6ZSBzaXplOworICAg
IC8vIFNpemUgaW4gcGl4ZWxzIGF0IHdoaWNoIHRoZSB2aWRlbyBpcyByZW5kZXJlZC4gVGhpcyBp
cyBhZnRlciBpdCBoYXMKKyAgICAvLyBiZWVuIHNjYWxlZCBieSBpdHMgYXNwZWN0IHJhdGlvLgor
ICAgIEZsb2F0U2l6ZSBkaXNwbGF5U2l6ZTsKKyAgICB1aW50OF90IGJpdERlcHRoIHsgOCB9Owor
ICAgIFBsYXRmb3JtVmlkZW9Db2xvclNwYWNlIGNvbG9yU3BhY2U7CisgICAgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24gcm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZSB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXRvbURhdGE7CisKK3ByaXZhdGU6Cisg
ICAgVmlkZW9JbmZvKCkKKyAgICAgICAgOiBUcmFja0luZm8oVHJhY2tUeXBlOjpWaWRlbykgeyB9
CisgICAgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3RoZXJWaWRlb0luZm8pIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICBhdXRvJiBvdGhlciA9IGRvd25jYXN0PGNvbnN0IFZpZGVv
SW5mbz4ob3RoZXJWaWRlb0luZm8pOworICAgICAgICByZXR1cm4gc2l6ZSA9PSBvdGhlci5zaXpl
ICYmIGRpc3BsYXlTaXplID09IG90aGVyLmRpc3BsYXlTaXplICYmIGJpdERlcHRoID09IG90aGVy
LmJpdERlcHRoICYmIGNvbG9yU3BhY2UgPT0gb3RoZXIuY29sb3JTcGFjZSAmJiByb3RhdGlvbiA9
PSBvdGhlci5yb3RhdGlvbiAmJiAoKCFhdG9tRGF0YSAmJiAhb3RoZXIuYXRvbURhdGEpIHx8IChh
dG9tRGF0YSAmJiBvdGhlci5hdG9tRGF0YSAmJiAqYXRvbURhdGEgPT0gKm90aGVyLmF0b21EYXRh
KSk7CisgICAgfQorfTsKKworc3RydWN0IEF1ZGlvSW5mbyA6IHB1YmxpYyBUcmFja0luZm8gewor
ICAgIHN0YXRpYyBSZWY8QXVkaW9JbmZvPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IEF1ZGlvSW5mbygpKTsgfQorCisgICAgdWludDMyX3QgcmF0ZSB7IDAgfTsKKyAgICB1aW50MzJf
dCBjaGFubmVscyB7IDAgfTsKKyAgICB1aW50MzJfdCBmcmFtZXNQZXJQYWNrZXQgeyAwIH07Cisg
ICAgdWludDMyX3QgYml0RGVwdGggeyAxNiB9OworICAgIGludDhfdCBwcm9maWxlIHsgMCB9Owor
ICAgIGludDhfdCBleHRlbmRlZFByb2ZpbGUgeyAwIH07CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBjb29raWVEYXRhOworCitwcml2YXRlOgorICAgIEF1ZGlvSW5mbygpCisgICAgICAgIDog
VHJhY2tJbmZvKFRyYWNrVHlwZTo6QXVkaW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhjb25zdCBU
cmFja0luZm8mIG90aGVyQXVkaW9JbmZvKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0
byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KG90aGVyQXVkaW9JbmZvKTsKKyAg
ICAgICAgcmV0dXJuIHJhdGUgPT0gb3RoZXIucmF0ZSAmJiBjaGFubmVscyA9PSBvdGhlci5jaGFu
bmVscyAmJiBiaXREZXB0aCA9PSBvdGhlci5iaXREZXB0aCAmJiBmcmFtZXNQZXJQYWNrZXQgPT0g
b3RoZXIuZnJhbWVzUGVyUGFja2V0ICYmIHByb2ZpbGUgPT0gb3RoZXIucHJvZmlsZSAmJiBleHRl
bmRlZFByb2ZpbGUgPT0gb3RoZXIuZXh0ZW5kZWRQcm9maWxlICYmICgoIWNvb2tpZURhdGEgJiYg
IW90aGVyLmNvb2tpZURhdGEpIHx8IChjb29raWVEYXRhICYmIG90aGVyLmNvb2tpZURhdGEgJiYg
KmNvb2tpZURhdGEgPT0gKm90aGVyLmNvb2tpZURhdGEpKTsKKyAgICB9Cit9OworCitjbGFzcyBN
ZWRpYVNhbXBsZXNCbG9jayB7CitwdWJsaWM6CisgICAgc3RydWN0IE1lZGlhU2FtcGxlSXRlbSB7
CisgICAgICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lOworICAgICAgICBNZWRpYVRpbWUg
ZGVjb2RlVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGR1cmF0aW9uOworICAgICAgICBzdGQ6OnZh
cmlhbnQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSwgUmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+PiBkYXRhOworICAgICAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgZmxhZ3M7Cisg
ICAgfTsKKworICAgIHZvaWQgc2V0SW5mbyhSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiYmIGluZm8p
IHsgbV9pbmZvID0gV1RGTW92ZShpbmZvKTsgfQorICAgIGNvbnN0IFRyYWNrSW5mbyogaW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1faW5mby5nZXQoKTsgfQorICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0
IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzVmlkZW8oKTsgfQorICAgIGJvb2wgaXNBdWRp
bygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzQXVkaW8oKTsgfQorICAgIFRy
YWNrSW5mbzo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZm8gPyBtX2luZm8t
PnR5cGUoKSA6IFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duOyB9CisgICAgdm9pZCBhcHBl
bmQoTWVkaWFTYW1wbGVJdGVtJiYgaXRlbSkgeyBtX3NhbXBsZXMuYXBwZW5kKFdURk1vdmUoaXRl
bSkpOyB9CisgICAgdm9pZCBhcHBlbmQoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaykgeyBtX3Nh
bXBsZXMuYXBwZW5kVmVjdG9yKHN0ZDo6ZXhjaGFuZ2UoYmxvY2subV9zYW1wbGVzLCB7IH0pKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnNpemUoKTsgfTsK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuaXNFbXB0eSgpOyB9
CisgICAgdm9pZCBjbGVhcigpIHsgbV9zYW1wbGVzLmNsZWFyKCk7IH0KKyAgICB1c2luZyBTYW1w
bGVzVmVjdG9yID0gVmVjdG9yPE1lZGlhU2FtcGxlSXRlbT47CisgICAgU2FtcGxlc1ZlY3RvciB0
YWtlU2FtcGxlcygpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zYW1wbGVzLCB7IH0pOyB9CisK
KyAgICBjb25zdCBNZWRpYVNhbXBsZUl0ZW0mIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZXNbaW5kZXhdOyB9CisgICAgY29uc3QgTWVkaWFTYW1wbGVJdGVt
JiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5maXJzdCgpOyB9CisgICAgY29uc3Qg
TWVkaWFTYW1wbGVJdGVtJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmxhc3QoKTsg
fQorICAgIFNhbXBsZXNWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVzLmJlZ2luKCk7IH0KKyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX2luZm87CisgICAgU2FtcGxlc1ZlY3RvciBtX3Nh
bXBsZXM7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6VmlkZW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNWaWRlbygpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6QXVkaW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNBdWRpbygpOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCmluZGV4IGE1NDljMWE1YzQ4ZWIy
M2Q2NGJhM2ZkMzUzODQwOGJkMTU1MjM0ZjAuLmEyMjE4YzVkZDc0MWZmYzQ2ODg1NzcxZWRkNTE5
NGJjMzEyYTdmZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCkBAIC05
OCwxOCArOTgsNiBAQCB2b2lkIFZpZGVvRnJhbWU6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
Ym9vbCBWaWRlb0ZyYW1lOjppc0RpdmlzYWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8UmVmUHRyPFdlYkNv
cmU6Ok1lZGlhU2FtcGxlPiwgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPj4gVmlkZW9GcmFt
ZTo6ZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9OwotfQotCiBSZWY8
V2ViQ29yZTo6TWVkaWFTYW1wbGU+IFZpZGVvRnJhbWU6OmNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5
KCkgY29uc3QKIHsKICAgICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5o
CmluZGV4IDY0MTFkZjdkNjQwY2NkZWQxZDFlM2UxMWZkMWE0MjhhMjkxYjMxZWQuLjIyODVlOGFj
N2JmMDIxNDJmOTJhOTFmNzgwZTc1OTEwMjQyYWE2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9W
aWRlb0ZyYW1lLmgKQEAgLTcyLDggKzcyLDYgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVk
aWFUaW1lJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBm
bGFncygpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcApp
bmRleCBiNzAzY2ZlY2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4
ZjBkZmYwYjM0YzY4YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3Bw
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1E
YXRhPiBBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXIt
PmFwcGVuZERhdGEoV1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsK
KyAgICBwYXJzZXItPmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtl
VW5pcXVlPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7
IFdURk1vdmUoYnVmZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlv
biksIFdURk1vdmUoc2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgK
aW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBlMzM5NDQ1Yy4uYWZjMzEyNTRl
YjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBTbXB0ZTE3
MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGaWxtLAorICAgIEJ0MjAyMCwK
KyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAgIFNtcHRlRWc0MzIsCisgICAg
SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4gewogICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5MDczNWM4OGQ3ZmU1MWYzNzc1
NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkxMWViMDA4Yjc1NmM4ZGVhNzc0
ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKQEAgLTM0LDYgKzM0
LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyA6IHVpbnQ4
X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUxNzBtLAorICAgIFNtcHRl
MjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgVW5zcGVjaWZpZWQsCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1MiwxMyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM+
IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6Umdi
LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcw
OSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0
NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhD
b2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVu
c3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFlNjJhYjI0NDYyODhhODQwZDRl
Yi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2JjMmFiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAgLTMzLDYgKzMzLDIwIEBAIGVu
dW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIDogdWludDhfdCB7
CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYxOTY2MjEsCisgICAgR2FtbWEy
MmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0MG0sCisgICAgTGluZWFyLAor
ICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQsCisgICAgQnQxMzYxRXh0ZW5k
ZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAgQnQyMDIwXzEyYml0LAorICAg
IFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFyaWJTdGRCNjdIbGcsCisgICAg
VW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcgKzU4LDIx
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0sCi0gICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMQorICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2
MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0
LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQsCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIw
XzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGcsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQK
ICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMu
aAppbmRleCA2Y2NmZmIwZDZhOTJlZjA2YWU3NmY4OGEwYjI4NTY5NzVkYTNiMmY3Li4wMjVkMGQz
NDRmM2FlYTQyOGE2ZWQ4NzY4Njg4Y2NhYmZkMzdhMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAg
UGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0
Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9CiAgICAgc3RkOjpvcHRp
b25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KaW5kZXggZTgz
OGVjZTMxN2U5MDQ0YmJhYzllYzc3MGI4OTFmYzlhZDMxY2RmMC4uOWNhZDg5ZDFjNzZjOWNjMTE4
YjQ3MTIyYTU2Y2JkNTdhMTMxMmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQpAQCAtMjQ1LDExICsyNDUsNiBAQCBGbG9hdFNpemUgTWVkaWFTYW1w
bGVBVkZPYmpDOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRTaXpl
KFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucyhm
b3JtYXREZXNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSkpOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQVZG
T2JqQzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgie1BU
UygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVy
YXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNl
bnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0
aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKLX0KLQogdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6
Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKIHsKICAgICBDTUl0
ZW1Db3VudCBpdGVtQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUzOTNlMGIyZDAxN2Nk
NGM5YWRkN2Q1NGJlYmY1YjI5YzRjMmRlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciogQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTYW1wbGVz
QmxvY2s7CitzdHJ1Y3QgVHJhY2tJbmZvOworCitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZv
KGNvbnN0IFRyYWNrSW5mbyYpOworLy8gQ29udmVydCBNZWRpYVNhbXBsZXNCbG9jayB0byB0aGUg
ZXF1aXZhbGVudCBDTVNhbXBsZUJ1ZmZlclJlZi4gSWYgQ01Gb3JtYXREZXNjcmlwdGlvblJlZgor
Ly8gaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY3JlYXRlZCBm
cm9tIHRoZSBNZWRpYVNhbXBsZXNCbG9jaydzIFRyYWNrSW5mby4KK1dFQkNPUkVfRVhQT1JUIEV4
cGVjdGVkPFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIENTdHJpbmc+IHRvQ01TYW1wbGVC
dWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZik7CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9DTVV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0NNVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxODJjMDRiN2JkODE3ODYwMWU4MTFkNDlh
ZDA3NWY4NTJlZTIzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDTVV0aWxpdGllcy5oIgor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBv
cnQgIk1lZGlhVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQg
IldlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgiCisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXRE
ZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5k
YXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9TY29wZS5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0
c0NGLmg+CisKKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisjaW1wb3J0ICJWaWRlb1Rv
b2xib3hTb2Z0TGluay5oIgorI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
Lmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9j
Zi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lm
IEVOQUJMRShPUFVTKSB8fCBFTkFCTEUoVk9SQklTKQorCitzdGF0aWMgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVk
aW9JbmZvJiBpbmZvKQoreworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsg
fTsKKyAgICBhc2JkLm1Gb3JtYXRJRCA9IGluZm8uY29kZWNOYW1lLnZhbHVlOworICAgIFVJbnQz
MiBzaXplID0gc2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBQQUw6OkF1ZGlvRm9ybWF0
R2V0UHJvcGVydHkoa0F1ZGlvRm9ybWF0UHJvcGVydHlfRm9ybWF0SW5mbywgaW5mby5jb29raWVE
YXRhLT5zaXplKCksIGluZm8uY29va2llRGF0YS0+ZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3Is
IChjaGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
cmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGFzYmQpLCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRh
KCkpOworfQorCisjZW5kaWYKKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQ
cmltYXJpZXMoUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIHByaW1hcmllcykKK3sKKyAgICBz
d2l0Y2ggKHByaW1hcmllcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRV
X1JfNzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIy
UGhvc3Bob3JzOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19F
QlVfMzIxMzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBt
OgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG06CisgICAg
ICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2Fz
ZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzE6CisgICAgICAgIHJldHVy
biBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNh
c2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOgorICAgICAgICByZXR1
cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAgICBj
YXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwOgorICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisKK3N0YXRpYyBD
RlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJh
Y3RlcmlzdGljcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1
bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6U21wdGVTdDIwODQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ6CisgICAg
Y2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDoK
KyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlNtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGc6CisgICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYy
MToKKyAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3Jp
cHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RhdGlj
IENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50cyBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0
YW50THVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllD
YkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZp
Y2llbnRzOjpCdDQ3MGJnOgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6U21wdGUxNzBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9J
VFVfUl82MDFfNDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0
NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlf
MjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbToK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mIGluZm8pCit7CisgICAgQVNTRVJUKGluZm8uaXNW
aWRlbygpIHx8IGluZm8uaXNBdWRpbygpKTsKKworICAgIGlmIChpbmZvLmlzQXVkaW8oKSkgewor
ICAgICAgICBhdXRvJiBhdWRpb0luZm8gPSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KGluZm8p
OworICAgICAgICBpZiAoIWF1ZGlvSW5mby5jb29raWVEYXRhIHx8ICFhdWRpb0luZm8uY29va2ll
RGF0YS0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3dp
dGNoIChhdWRpb0luZm8uY29kZWNOYW1lLnZhbHVlKSB7CisjaWYgRU5BQkxFKE9QVVMpCisgICAg
ICAgIGNhc2UgJ29wdXMnOgorICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihhdWRpb0luZm8pOworI2VuZGlmCisjaWYgRU5B
QkxFKFZPUkJJUykKKyAgICAgICAgY2FzZSAndm9yYic6CisgICAgICAgICAgICBpZiAoIWlzVm9y
YmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oYXVkaW9JbmZv
KTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvJiB2aWRlb0luZm8gPSBkb3duY2FzdDxjb25z
dCBWaWRlb0luZm8+KGluZm8pOworCisgICAgYXV0byBkYXRhID0gdmlkZW9JbmZvLmF0b21EYXRh
LT5jcmVhdGVDRkRhdGEoKTsKKyAgICBBU1NFUlQodmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAw
OScgfHwgdmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAwOCcpOworICAgIENGVHlwZVJlZiBjb25m
aWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZp
Z3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlv
bkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBj
b25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChj
b25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4
dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVE
ZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07CisgICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5z
aW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKworICAgIGlmICh2aWRl
b0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2UgJiYgKnZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxS
YW5nZSkgeworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoUEFMOjprQ01Gb3JtYXREZXNj
cmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1
ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKKyAgICB9CisKKyAgICBpZiAodmlkZW9JbmZvLmNv
bG9yU3BhY2UucHJpbWFyaWVzKSB7CisgICAgICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKCp2aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJp
ZXMpKSB7CisgICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJD
b2xvclByaW1hcmllc0tleSk7CisgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChj
bUNvbG9yUHJpbWFyaWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmlkZW9JbmZvLmNv
bG9yU3BhY2UudHJhbnNmZXIpIHsKKyAgICAgICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9u
ID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKCp2aWRlb0luZm8uY29sb3JTcGFjZS50cmFu
c2ZlcikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZl
clRyYW5zZmVyRnVuY3Rpb25LZXkpOworICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBl
bmQoY21UcmFuc2ZlckZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRl
b0luZm8uY29sb3JTcGFjZS5tYXRyaXgpIHsKKyAgICAgICAgaWYgKGF1dG8gY21NYXRyaXggPSBj
b252ZXJ0VG9DTVlDYkNSTWF0cml4KCp2aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgpKSB7Cisg
ICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJp
eEtleSk7CisgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4
dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRlbnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51
bGxwdHI7CisgICAgQ01WaWRlb0NvZGVjVHlwZSBjb2RlYyA9IHZpZGVvSW5mby5jb2RlY05hbWUg
PT0gInZwMDkiID8ga0NNVmlkZW9Db2RlY1R5cGVfVlA5IDogJ3ZwMDgnOworICAgIGlmIChub0Vy
ciAhPSBQQUw6OkNNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb2RlYywgdmlkZW9JbmZvLnNpemUud2lkdGgoKSwgdmlkZW9JbmZvLnNpemUuaGVpZ2h0
KCksIGV4dGVuc2lvbnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQor
CitFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBDU3RyaW5nPiB0b0NNU2Ft
cGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcywgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoIXNhbXBsZXMuaW5mbygpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vIFRyYWNrSW5mbyBmb3VuZCIpOworCisgICAg
YXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIHNhbXBsZXMuY2xl
YXIoKTsKKyAgICB9KTsKKworICAgIGF1dG8gZm9ybWF0ID0gZm9ybWF0RGVzY3JpcHRpb24gPyBy
ZXRhaW5QdHIoZm9ybWF0RGVzY3JpcHRpb24pIDogY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VHJhY2tJbmZvKCpzYW1wbGVzLmluZm8oKSk7CisgICAgaWYgKCFmb3JtYXQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm8gQ01Gb3JtYXREZXNjcmlwdGlvbiBhdmFpbGFibGUiKTsK
KworICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjb21wbGV0ZUJsb2NrQnVmZmVyczsK
KyAgICBpZiAoc2FtcGxlcy5zaXplKCkgPiAxKSB7CisgICAgICAgIC8vIE9wdGltaXNhdGlvbiBz
byB0aGF0IHdlIGFsbG9jYXRlIHRoZSBlbnRpcmUgQ01CbG9ja0J1ZmZlciBhdCBvbmNlIGlmIHdl
IGhhdmUgbW9yZSB0aGFuIG9uZSB0byByZXR1cm4uCisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYg
cmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHNhbXBsZXMuc2l6ZSgpLCAw
LCAmcmF3QmxvY2tCdWZmZXIpOworICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9F
cnIgfHwgIXJhd0Jsb2NrQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIik7CisgICAgICAgIGNvbXBsZXRlQmxv
Y2tCdWZmZXJzID0gcmF3QmxvY2tCdWZmZXI7CisgICAgfQorCisgICAgVmVjdG9yPENNU2FtcGxl
VGltaW5nSW5mbz4gcGFja2V0VGltaW5nczsKKyAgICBwYWNrZXRUaW1pbmdzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2FtcGxlcy5zaXplKCkpOworICAgIFZlY3RvcjxzaXplX3Q+IHBhY2tldFNp
emVzOworICAgIHBhY2tldFNpemVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2FtcGxlcy5zaXpl
KCkpOworICAgIGZvciAoYXV0byYgc2FtcGxlIDogc2FtcGxlcykgeworICAgICAgICBpZiAoIXN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+Pihz
YW1wbGUuZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQg
TWVkaWFTYW1wbGVzQmxvY2sgdHlwZSIpOworICAgICAgICBhdXRvJiBkYXRhID0gc3RkOjpnZXQ8
UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PihzYW1wbGUuZGF0YSk7CisgICAgICAg
IGF1dG8gYmxvY2tCdWZmZXIgPSBkYXRhLT5jcmVhdGVDTUJsb2NrQnVmZmVyKCk7CisgICAgICAg
IGlmICghYmxvY2tCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNv
dWxkbid0IGNyZWF0ZSBDTUJsb2NrQnVmZmVyIik7CisKKyAgICAgICAgaWYgKCFjb21wbGV0ZUJs
b2NrQnVmZmVycykKKyAgICAgICAgICAgIGNvbXBsZXRlQmxvY2tCdWZmZXJzID0gV1RGTW92ZShi
bG9ja0J1ZmZlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6
OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UoY29tcGxldGVCbG9ja0J1ZmZlcnMu
Z2V0KCksIGJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChlcnIg
IT0ga0NNQmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgZmFpbGVkIik7CisgICAg
ICAgIH0KKyAgICAgICAgcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OnRvQ01UaW1lKHNhbXBs
ZS5kdXJhdGlvbiksIFBBTDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUpLCBQQUw6
OnRvQ01UaW1lKHNhbXBsZS5kZWNvZGVUaW1lKSB9KTsKKyAgICAgICAgcGFja2V0U2l6ZXMuYXBw
ZW5kKGRhdGEtPnNpemUoKSk7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2Ft
cGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVm
ZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVCbG9ja0J1ZmZlcnMu
Z2V0KCksIGZvcm1hdC5nZXQoKSwgcGFja2V0U2l6ZXMuc2l6ZSgpLCBwYWNrZXRUaW1pbmdzLnNp
emUoKSwgcGFja2V0VGltaW5ncy5kYXRhKCksIHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0U2l6
ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZDogT09NIik7CisKKyAgICBpZiAo
c2FtcGxlcy5pc1ZpZGVvKCkgJiYgc2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byBhdHRh
Y2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJy
YXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJy
YXkpOworICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk5vIHNhbXBsZSBhdHRhY2htZW50IGZvdW5kIik7CisgICAgICAgIEFT
U0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBzYW1wbGVz
LnNpemUoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0
Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0
YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJh
eSwgaSkpOworICAgICAgICAgICAgaWYgKCEoc2FtcGxlc1tpXS5mbGFncyAmIE1lZGlhU2FtcGxl
OjpTYW1wbGVGbGFnczo6SXNTeW5jKSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtD
RkJvb2xlYW5UcnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKHJh
d1NhbXBsZUJ1ZmZlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBh
MTVmNzFhNGM4NmRkYmVmMjcyNzI3MDczOWZlNjJlZDQ5OTI3YzM3Li45NGJiMmVkNmM1NmU3ODQ1
MTBkMmY0MWUyNzhiOGNhMzk5OGYzYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJDTVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTM5LDIxICs0MCwxNSBAQAogI2luY2x1ZGUg
IlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVXZWJNLmgi
CiAjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9EYXRhVmlldy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaD4KICNpbmNsdWRlIDx3ZWJtL3dlYm1fcGFyc2VyLmg+CiAjaW5j
bHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0
c0NGLmg+CiAjaW5jbHVkZSA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL09TVmFyaWFudFNQSS5oPgogCiAjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExp
bmsuaCIKLSNpbmNsdWRlICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgotI2luY2x1ZGUgPHBhbC9j
Zi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCiBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3ZWJt
Ojpzd2FwKTsKIApAQCAtMjM0LDI1ICsyMjksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1
bWVudDx3ZWJtOjpJZD4gewogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3Vt
ZW50PFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlPiB7Ci0gICAgc3RhdGlj
IEFTQ0lJTGl0ZXJhbCB0b1N0cmluZyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpT
dGF0ZSBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6Tm9uZTogcmV0dXJuICJO
b25lIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0
YXRlOjpSZWFkaW5nRWJtbDogcmV0dXJuICJSZWFkaW5nRWJtbCJfczsKLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEVibWw6IHJldHVybiAi
UmVhZEVibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRpbmdTZWdtZW50OiByZXR1cm4gIlJlYWRpbmdTZWdtZW50Il9zOwotICAg
ICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5n
SW5mbzogcmV0dXJuICJSZWFkaW5nSW5mbyJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEluZm86IHJldHVybiAiUmVhZEluZm8iX3M7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJl
YWRpbmdUcmFja3M6IHJldHVybiAiUmVhZGluZ1RyYWNrcyJfczsKLSAgICAgICAgY2FzZSBXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1RyYWNrOiByZXR1cm4g
IlJlYWRpbmdUcmFjayJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpTdGF0ZTo6UmVhZFRyYWNrOiByZXR1cm4gIlJlYWRUcmFjayJfczsKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0NsdXN0
ZXI6IHJldHVybiAiUmVhZGluZ0NsdXN0ZXIiX3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICJVbmtub3duIl9zOwotICAgIH0KLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0yNzYsMTQgKzI1MiwxNCBAQCBzdGF0aWMgU3RhdHVzIHNlZ21lbnRS
ZWFkRXJyb3JUb1dlYm1TdGF0dXMoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJy
bwogewogICAgIHN3aXRjaCAoZXJyb3IpIHsKICAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6
U2VnbWVudDo6UmVhZEVycm9yOjpFbmRPZkZpbGU6IHJldHVybiBTdGF0dXMoU3RhdHVzOjprRW5k
T2ZGaWxlKTsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm9y
OjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOworICAgIGNhc2UgU291cmNlQnVmZmVy
UGFyc2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkZhdGFsRXJyb3I6IHJldHVybiBTdGF0dXMoU3Rh
dHVzOjpDb2RlKFdlYk1QYXJzZXI6OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVkKSk7CiAgICAgfQog
fQogCi1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTZWdtZW50UmVhZGVyIGZpbmFsIDog
cHVibGljIHdlYm06OlJlYWRlciB7CitjbGFzcyBXZWJNUGFyc2VyOjpTZWdtZW50UmVhZGVyIGZp
bmFsIDogcHVibGljIHdlYm06OlJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRTZWdtZW50KFNlZ21lbnQmJiBzZWdtZW50KQorICAg
IHZvaWQgYXBwZW5kU2VnbWVudChTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdtZW50
KQogICAgIHsKICAgICAgICAgbV9kYXRhLnB1c2hfYmFjayhXVEZNb3ZlKHNlZ21lbnQpKTsKICAg
ICAgICAgaWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9kYXRhLmVuZCgpKQpAQCAtNDYwLDggKzQz
Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ID0gMDsKICAg
ICB9CiAKLSAgICBTdGRMaXN0PFNlZ21lbnQ+IG1fZGF0YTsKLSAgICBTdGRMaXN0PFNlZ21lbnQ+
OjppdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CisgICAgU3RkTGlz
dDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+IG1fZGF0YTsKKyAgICBTdGRMaXN0PFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQgeyBtX2Rh
dGEuZW5kKCkgfTsKICAgICBzaXplX3QgbV9wb3NpdGlvbiB7IDAgfTsKICAgICBzaXplX3QgbV9w
b3NpdGlvbldpdGhpblNlZ21lbnQgeyAwIH07CiB9OwpAQCAtNTUzLDEzOSArNTI5LDQ5IEBAIHN0
YXRpYyBib29sIGNhbkxvYWRGb3JtYXRSZWFkZXIoKQogI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzV2ViTUZvcm1h
dFJlYWRlckF2YWlsYWJsZSgpCitXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKENhbGxiYWNrJiBjYWxs
YmFjaykKKyAgICA6IG1fcGFyc2VyKG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdl
Ym1QYXJzZXI+KCkpCisgICAgLCBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+
KCkpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewotICAgIHJldHVybiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9hZEZv
cm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOwogfQogCi1NZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50VHlw
ZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK1dlYk1QYXJzZXI6On5XZWJNUGFy
c2VyKCkKIHsKLSNpZiBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BV
UykKLSAgICBpZiAoIWlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGF1dG8g
Y29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVyVHlwZSgpOwotICAgIGJvb2wgaXNBdWRpb0Nv
bnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRp
by93ZWJtIik7Ci0gICAgYm9vbCBpc1ZpZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVvL3dlYm0iKTsKLSAgICBpZiAoIWlzQXVkaW9D
b250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFpbmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgCi0gICAg
Ym9vbCBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoVk9SQklT
KQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShPUFVTKQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWls
YWJsZSB8PSBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmIChpc0F1
ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQotICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQot
ICAgIGJvb2wgaXNBbnlDb2RlY0F2YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsK
LSNpZiBFTkFCTEUoVlA5KQotICAgIGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKLSAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0
ZWQ7Ci0KLSAgICBhdXRvIGNvZGVjcyA9IHR5cGUuY29kZWNzKCk7Ci0gICAgaWYgKGNvZGVjcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
Ok1heUJlU3VwcG9ydGVkOwotCi0gICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgewotI2lm
IEVOQUJMRShWUDkpCi0gICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29k
ZWMuc3RhcnRzV2l0aCgidnAwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29k
ZWMsICJ2cDkiKSkgewotCi0gICAgICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBh
cnNlVlBDb2RlY1BhcmFtZXRlcnMoY29kZWMpOwotICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFt
ZXRlcnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRz
VHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZCgqY29kZWNQYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
LQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoVlA5
KQotCi0jaWYgRU5BQkxFKFZPUkJJUykKLSAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJM
RShWT1JCSVMpCi0KLSNpZiBFTkFCTEUoT1BVUykKLSAgICAgICAgaWYgKGNvZGVjID09ICJvcHVz
IikgewotICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBw
b3J0ZWQ7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKE9QVVMpCi0KLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlw
ZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNTdXBwb3J0ZWQ7Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5
cGUpOwotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RT
dXBwb3J0ZWQ7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiB9CiAKLVJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCi17Ci0gICAgaWYg
KGlzQ29udGVudFR5cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNKCkpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKLSAgICA6IG1fcmVhZGVy
KG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKK3ZvaWQgV2ViTVBhcnNlcjo6cmVzZXRT
dGF0ZSgpCiB7Ci0gICAgaWYgKGlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQotICAgICAgICBtX3Bh
cnNlciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdlYm1QYXJzZXI+KCk7Cisg
ICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgaWYgKG1fcGFyc2Vy
KQorICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOworICAgIG1fcmVhZGVyLT5yZXNldCgpOwor
ICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/IFN0YXRlOjpS
ZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOworICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50
ID0gbnVsbHB0cjsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFs
c2U7CisgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpCisgICAgICAgIHRyYWNrLT5yZXNldCgpOwogfQogCi1Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjp+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCit2b2lkIFdlYk1QYXJzZXI6OnJlc2V0
KCkKIHsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3BhcnNlci0+RGlkU2VlaygpOwog
fQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYmIHNl
Z21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgQXBw
ZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCitFeGNlcHRpb25PcjxpbnQ+IFdlYk1QYXJzZXI6OnBhcnNl
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKCFtX3Bh
cnNlcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIs
IGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVp
dHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIpOworICAgIGlmICghbV9w
YXJzZXIpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7Ci0g
ICAgICAgIG1fcmVhZGVyLT5yZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwot
ICAgIH0KICAgICBtX3JlYWRlci0+YXBwZW5kU2VnbWVudChXVEZNb3ZlKHNlZ21lbnQpKTsKIAog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG1fc3RhdHVzID0gbV9wYXJzZXItPkZlZWQodGhp
cywgJm1fcmVhZGVyKTsKICAgICAgICAgaWYgKG1fc3RhdHVzLm9rKCkgfHwgbV9zdGF0dXMuY29k
ZSA9PSBTdGF0dXM6OmtFbmRPZkZpbGUgfHwgbV9zdGF0dXMuY29kZSA9PSBTdGF0dXM6OmtXb3Vs
ZEJsb2NrKSB7CiAgICAgICAgICAgICBtX3JlYWRlci0+cmVjbGFpbVNlZ21lbnRzKCk7Ci0KLSAg
ICAgICAgICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBv
ZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1TYW1wbGVEdXJhdGlvbi4KLSAgICAg
ICAgICAgIC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwgbm8gbW9yZSBhdWRpbyBkYXRhIG1h
eSBiZSBpbmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55IHBlbmRpbmcKLSAgICAgICAgICAg
IC8vIGF1ZGlvIGJ1ZmZlcnMuCi0gICAgICAgICAgICBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMo
KTsKLQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fc3Rh
dHVzLmNvZGUgIT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oRXJyb3JDb2RlOjpSZWNlaXZlZEVibWxJ
bnNpZGVTZWdtZW50KSkKQEAgLTcxMCw2MSArNTk2LDI0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pCiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIEVSUk9SX0xPR19JRl9QT1NTSUJM
RShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwgbV9zdGF0dXMuY29kZSwgIikiKTsKLSAg
ICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgY29kZSA9IG1fc3RhdHVzLmNvZGVdIHsKLSAgICAgICAgaWYgKG1fZGlkRW5j
b3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCi0gICAgICAgICAgICBtX2RpZEVuY291
bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKGNvZGUpOwotICAgIH0pOwotCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVz
aFBlbmRpbmdNZWRpYURhdGEoKQotewotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fc3RhdHVzLmNvZGU7CiB9CiAKLWJv
b2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNr
SUQodWludDY0X3QpCit2b2lkIFdlYk1QYXJzZXI6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxv
Z2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpy
ZXNldFBhcnNlclN0YXRlKCkKLXsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSKTsKLSAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0g
ICAgbV9yZWFkZXItPnJlc2V0KCk7Ci0gICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7Ci0gICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwotICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwot
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKLSAgICAgICAgdHJhY2stPnJlc2V0KCk7
CisgICAgbV9sb2dnZXIgPSAmbG9nZ2VyOworICAgIG1fbG9nSWRlbnRpZmllciA9IGxvZ0lkZW50
aWZpZXI7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aW52YWxpZGF0ZSgpCit2
b2lkIFdlYk1QYXJzZXI6OmludmFsaWRhdGUoKQogewotICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwotCiAgICAgbV9wYXJzZXIgPSBudWxscHRyOwogICAgIG1fdHJhY2tz
LmNsZWFyKCk7CiAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgIG1f
Y3VycmVudEJsb2NrLnJlc2V0KCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KQotewotICAgIG1fbG9nZ2VyID0gJmxvZ2dlcjsKLSAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJ
ZGVudGlmaWVyOwotfQotCi1hdXRvIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZv
clRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAtPiBUcmFja0RhdGEqCithdXRvIFdl
Yk1QYXJzZXI6OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAt
PiBUcmFja0RhdGEqCiB7CiAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CiAgICAg
ICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNr
LT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQpAQCAtNzczLDcg
KzYyMiw3IEBAIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tO
dW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBF
bGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFy
c2VyOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rp
b24qIGFjdGlvbikKIHsKICAgICBBU1NFUlQoYWN0aW9uKTsKICAgICBpZiAoIWFjdGlvbikKQEAg
LTg0NSw3ICs2OTQsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQQogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCitTdGF0
dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRh
dGEpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTg2
MSwyNCArNzEwLDIwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRF
bmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBJTkZPX0xPR19JRl9QT1NT
SUJMRShMT0dJREVOVElGSUVSLCAic3RhdGUoIiwgb2xkU3RhdGUsICItPiIsIG1fc3RhdGUsICIp
LCBpZCgiLCBtZXRhZGF0YS5pZCwgIiksIHNpemUoIiwgbWV0YWRhdGEuc2l6ZSwgIikiKTsKIAog
ICAgIGlmIChtZXRhZGF0YS5pZCA9PSBJZDo6a1RyYWNrcykgewotICAgICAgICBpZiAoIW1fa2V5
SWRzLmlzRW1wdHkoKSAmJiAhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXph
dGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFtX2tleUlkcy5pc0Vt
cHR5KCkgJiYgIW1fY2FsbGJhY2suY2FuRGVjcnlwdCgpKSB7CiAgICAgICAgICAgICBFUlJPUl9M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkVuY291bnRlcmVkIGVuY3J5cHRlZCBjb250
ZW50IHdpdGhvdXQgYW4ga2V5IHJlcXVlc3QgY2FsbGJhY2siKTsKICAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6Q29udGVudEVuY3J5cHRlZCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQp
IHsKLSAgICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3Zl
KCptX2luaXRpYWxpemF0aW9uU2VnbWVudCldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjaykKLSAgICAgICAgICAgICAg
ICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFdURk1vdmUoaW5pdGlh
bGl6YXRpb25TZWdtZW50KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAobV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCkKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2sucGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25T
ZWdtZW50KSk7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSBm
YWxzZTsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgICAg
ICBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA9IHRydWU7CiAKICAgICAgICAgaWYg
KCFtX2tleUlkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYga2V5SWRQYWly
IDogbV9rZXlJZHMpCi0gICAgICAgICAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJZFBhaXIu
c2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLmNv
bnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChXVEZNb3ZlKGtleUlk
UGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3QpOwogICAgICAgICB9CiAgICAgICAgIG1fa2V5
SWRzLmNsZWFyKCk7CiAgICAgfQpAQCAtODg2LDcgKzczMSw3IEBAIFN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSkKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBFYm1sJiBlYm1sKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWJtbChjb25zdCBFbGVtZW50
TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwogCkBAIC04OTQsNyArNzM5LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBl
Ym1sKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShFcnJvckNvZGU6OkludmFs
aWREb2NUeXBlKSk7CiAKICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0g
dHJ1ZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFz
dE1hbGxvY0NoZWNrPEluaXRpYWxpemF0aW9uU2VnbWVudD4oKTsKKyAgICBtX2luaXRpYWxpemF0
aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFNvdXJjZUJ1ZmZl
clBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PigpOwogICAgIC8vIFRPRE86IFNldHRpbmcg
dGhpcyB0byBmYWxzZSBoZXJlLCB3aWxsIHByZXZlbnQgYWRkaW5nIGEgbmV3IG1lZGlhIHNlZ21l
bnQgc2hvdWxkIGEKICAgICAvLyBwYXJ0aWFsIGluaXQgc2VnbWVudCBiZSBlbmNvdW50ZXJlZCBh
ZnRlciBhIGNhbGwgdG8gc291cmNlQnVmZmVyLmFib3J0KCkuCiAgICAgLy8gSXQncyBwcm9iYWJs
eSBmaW5lIGFzIG5vLW9uZSBpbiB0aGVpciByaWdodCBtaW5kIHNob3VsZCBzZW5kIHBhcnRpYWwg
aW5pdCBzZWdtZW50IG9ubHkKQEAgLTkwNSw3ICs3NTAsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVi
bWwpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpPblNlZ21lbnRCZWdp
bihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTIyLDcgKzc2Nyw3IEBAIFN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbklu
Zm8oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKIHsKICAgICBJTkZP
X0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTM4LDcgKzc4Myw3IEBAIFN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgSW5mbyYgaW5mbykKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiog
YWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiogYWN0aW9uKQogewogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05NTQsNyArNzk5LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXMKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tF
bnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5
KQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5KQogewogICAgIGlmICghdHJhY2tFbnRyeS50
cmFja190eXBlLmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50
KCkpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwpAQCAtMTAx
OSwxNCArODY0LDE0IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFCiAKICNpZiBFTkFCTEUoVk9S
QklTKQogICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2Rl
ckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6
Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0Rh
dGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoT1BVUykKICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNP
cHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1Ry
YWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWlu
aW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcykpOwog
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKICAgICB9CiAjZW5k
aWYKQEAgLTEwMzUsNyArODgwLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
VHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0UKICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1QYXJz
ZXI6Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYgYmxv
Y2ssIEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIpOwogCkBAIC0xMDUwLDcgKzg5NSw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QKICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgQmxvY2smKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tFbmQoY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smKQogewogICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMDU5LDcgKzkwNCw3IEBAIHdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IEJsCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrQmVn
aW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smIGJsb2NrLCBBY3Rp
b24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrQmVnaW4o
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smIGJsb2NrLCBBY3Rpb24q
IGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApA
QCAtMTA3NCw3ICs5MTksNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsCiAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IFNpbXBsZUJsb2NrJikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2Nr
RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNpbXBsZUJsb2NrJikKIHsKICAgICBJ
TkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA4Myw3ICs5MjgsNyBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0VuZChj
b25zdCBFbGVtZW50TWV0YWRhdGEmLCBjbwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tD
b21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25C
bG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9u
KiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0dyb3VwQmVnaW4oY29u
c3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKiBhY3Rpb24pCiB7CiAgICAg
SU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwOTUsNyArOTQwLDcg
QEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2lu
KGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGEKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
QmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3ZWJtOjpC
bG9ja0dyb3VwJiBibG9ja0dyb3VwKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tH
cm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3ZWJtOjpCbG9ja0dy
b3VwJiBibG9ja0dyb3VwKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJ
RVIpOwogICAgIGlmIChibG9ja0dyb3VwLmJsb2NrLmlzX3ByZXNlbnQoKSAmJiBibG9ja0dyb3Vw
LmRpc2NhcmRfcGFkZGluZy5pc19wcmVzZW50KCkpIHsKQEAgLTExMDUsMTcgKzk1MCwxMyBAQCB3
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0
IHdlYm06OkVsZW1lbnRNZXRhZGF0YQogICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIsICJJZ25vcmluZyB1bmtub3duIHRyYWNrIG51bWJlciAiLCB0cmFja051
bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsK
ICAgICAgICAgfQotICAgICAgICBpZiAodHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC5pc19w
cmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSA+IDApIHsKLSAg
ICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCB0cmFja0lEID0gdHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3Vp
ZC52YWx1ZSgpLCBwYWRkaW5nID0gTWVkaWFUaW1lKGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5n
LnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcyldKCkgewotICAgICAgICAgICAgICAgIGlmIChtX2Rp
ZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIG1fZGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBwYWRkaW5nKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLmlz
X3ByZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpID4gMCkKKyAg
ICAgICAgICAgIG1fY2FsbGJhY2sucGFyc2VkVHJpbW1pbmdEYXRhKHRyYWNrRGF0YS0+dHJhY2so
KS50cmFja191aWQudmFsdWUoKSwgTWVkaWFUaW1lKGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5n
LnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcykpOwogICAgIH0KICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWRlciogcmVh
ZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6
T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVp
bnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKICAgICBBU1NFUlQocmVhZGVyKTsKICAgICBpZiAo
IXJlYWRlcikKQEAgLTExNTIsMzIgKzk5MywyMCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZAog
ICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBi
eXRlc1JlbWFpbmluZywgUEFMOjpDTVRpbWVNYWtlKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVu
dFRpbWVjb2RlLCBtX3RpbWVzY2FsZSksIGJsb2NrLT5udW1fZnJhbWVzKTsKKyAgICByZXR1cm4g
dHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFp
bmluZywgTWVkaWFUaW1lKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3Rp
bWVzY2FsZSksIGJsb2NrLT5udW1fZnJhbWVzKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2Ft
cGxlQnVmZmVyLCB1aW50NjRfdCB0cmFja0lELCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJh
bmdlT2Zmc2V0KQotewotICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzYW1wbGVCdWZmZXIgPSBXVEZNb3ZlKHNhbXBs
ZUJ1ZmZlciksIHRyYWNrSUQsIGJ5dGVSYW5nZU9mZnNldF0gKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRl
KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAgICAgIGlmIChieXRlUmFuZ2VPZmZz
ZXQpCi0gICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpieXRlUmFu
Z2VPZmZzZXQpOwotICAgICAgICBtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3Zl
KG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmcoKSk7Ci0gICAgfSk7Ci19CiAKICNk
ZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSguLi4pIGlmIChwYXJzZXIoKS5sb2dn
ZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRyKCktPmVycm9yKGxvZ0NoYW5uZWwoKSwgTG9nZ2Vy
OjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxv
Z0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQogCi1SZWZQdHI8U2hhcmVkQnVmZmVyPiBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVy
KHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKG9mZnNldCAr
IGxlbmd0aCA+IG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuc2l6ZSgpKQorICAgIGlmIChvZmZzZXQg
KyBsZW5ndGggPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCktPmdldENv
bnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VHJhY2tE
YXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIGlm
IChtX2NvbXBsZXRlUGFja2V0U2l6ZSAmJiAqbV9jb21wbGV0ZVBhY2tldFNpemUgIT0gbWV0YWRh
dGEuc2l6ZSkgewogICAgICAgICAvLyBUaGUgcGFja2V0J3MgbWV0YWRhdGEgZG9lc24ndCBtYXRj
aCB0aGUgY3VycmVudGx5IHBlbmRpbmcgY29tcGxldGUgcGFja2V0OyByZXN0YXJ0LgpAQCAtMTE5
MCw3ICsxMDE5LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKIAogICAgIHdoaWxlICgqYnl0
ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOwotICAgICAgICBhdXRv
IHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFk
ZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZm
ZXIsICZieXRlc1JlYWQpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFdlYk1Q
YXJzZXI6OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywg
bV9jdXJyZW50QmxvY2tCdWZmZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5p
bmcgLT0gYnl0ZXNSZWFkOwogICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFk
OwogCkBAIC0xMjAyLDk4ICsxMDMxLDY2IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAg
aWYgKG1fcGFydGlhbEJ5dGVzUmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAg
cmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgbV9j
b21wbGV0ZUJsb2NrQnVmZmVycy5hcHBlbmQobV9jdXJyZW50QmxvY2tCdWZmZXIudGFrZSgpKTsK
KyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBtX2N1cnJlbnRCbG9ja0J1ZmZlci50YWtlKCk7
CisgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgbV9wYXJ0aWFs
Qnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0
YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFu
Z2VPZmZzZXQpCi17Ci0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMgPSBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXJzLnRha2UoKS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOwotICAgIGlmICghY29tcGxl
dGVDTUJsb2NrQnVmZmVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGVyciA9IFBBTDo6Q01TYW1w
bGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb21wbGV0ZUNNQmxvY2tC
dWZmZXJzLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldFNpemVzLnNp
emUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9w
YWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVy
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggJWQiLCBlcnIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFByb2Nlc3MocmF3U2FtcGxlQnVmZmVyKTsKLQot
ICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2Vy
KCkucHJvdmlkZU1lZGlhRGF0YShhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxh
dGVzdEJ5dGVSYW5nZU9mZnNldCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQordm9pZCBXZWJNUGFy
c2VyOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAg
bV9rZXlGcmFtZXMuY2xlYXIoKTsKICAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVz
U3RhdGUoKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBG
cmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBD
TVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29u
c3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkK
ICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNS
ZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1
cm4gc3RhdHVzOwogCisgICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKKwog
ICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBs
ZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0
ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KLSAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9
IHN0ZDo6bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAgYXV0
byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJy
ZW50UGFja2V0Qnl0ZU9mZnNldCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CisgICAgc2l6ZV90IHNl
Z21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXItPnNpemUoKSk7CisgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91
c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CiAgICAgaWYgKCFj
b250aWd1b3VzQnVmZmVyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIgZmFpbGVkIHRvIGNyZWF0ZSBjb250
aWd1b3VzIGRhdGEgYmxvY2siKTsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiVmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEgZmFpbGVkIHRvIGNyZWF0ZSBjb250
aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwogICAgIH0KICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBj
b250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7Ci0gICAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAg
IGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQ
YXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVh
ZGVyTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWlu
aW5nKTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKICAgICAgICAgICAg
IGlzS2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVh
dGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRy
YWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNj
cmlwdGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
ImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9y
bWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0
ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlk
ZW8udmFsdWUoKS5jb2xvdXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9
PSBDb2RlY1R5cGU6OlZQOCkgewogICAgICAgICBhdXRvIGhlYWRlciA9IHBhcnNlVlA4RnJhbWVI
ZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKICAgICAgICAgaWYg
KGhlYWRlciAmJiBoZWFkZXItPmtleWZyYW1lKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7
Ci0gICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3Jp
cHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIp
OwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRl
c2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNl
dEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAg
ICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoKmhl
YWRlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfQog
CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgbV9jb21w
bGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9uKCkpOworICAgIGVsc2Ug
aWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29t
cGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CisKICAgICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKLSAgICAvLyBGSVhNRTogQSBibG9j
ayBtaWdodCBjb250YWluIG1vcmUgdGhhbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IHRoaXMgZnJhbWUg
aGFzIGJlZW4gcmVhZCBpbnRvIGBjb21wbGV0ZUJsb2NrQnVmZmVyYC4KLSAgICAvLyBCZWxvdyB3
ZSBjcmVhdGUgc2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxv
Y2sncyB0aW1lY29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgotICAgIC8vIFNob3VsZG4ndCB3
ZSBjcmVhdGUganVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFt
ZXMgaGF2ZSBiZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KIAogICAgIHVpbnQ2
NF90IGR1cmF0aW9uID0gMDsKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVz
ZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgp
ICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CisgICAgICAg
IGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9u
VGltZS50aW1lU2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIG1fa2V5RnJhbWVzLmFw
cGVuZChpc0tleSk7Ci0gICAgbV9wYWNrZXRTaXplcy5hcHBlbmQoKm1fY29tcGxldGVQYWNrZXRT
aXplKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjpDTVRpbWVNYWtlKGR1cmF0
aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNl
bnRhdGlvblRpbWUgfSk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCArPSAqbV9jb21w
bGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7
CisgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBw
cmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGlt
ZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaXNLZXkg
PyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVG
bGFnczo6Tm9uZSB9KTsKIAogICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIApAQCAtMTMwNyw0
NSArMTEwNCwxOSBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogI2VuZGlmCiB9CiAKLXZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKENNU2Ft
cGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlcikKLXsKLSAgICBhdXRvIGF0dGFjaG1lbnRzQXJy
YXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShyYXdTYW1w
bGVCdWZmZXIsIHRydWUpOwotICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKLSAgICBpZiAo
IWF0dGFjaG1lbnRzQXJyYXkpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdl
dENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBtX2tleUZyYW1lcy5zaXplKCkpOwotICAgIGZv
ciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJh
eSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0
YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgIGlmICghbV9r
ZXlGcmFtZXNbaV0pCi0gICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50
cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQordm9pZCBXZWJNUGFyc2VyOjpBdWRpb1RyYWNr
RGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAgbU51bUZyYW1lc0luQ29t
cGxldGVCbG9jayA9IDA7CiAgICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRl
KCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit3ZWJtOjpTdGF0dXMgV2ViTVBh
cnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFk
ZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5p
bmcsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50KQogewotICAgIGlmICht
X3BhY2tldFRpbWluZ3Muc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8mIGxhc3RUaW1pbmcgPSBtX3Bh
Y2tldFRpbWluZ3MubGFzdCgpOwotICAgICAgICBpZiAoUEFMOjpDTVRpbWVDb21wYXJlKFBBTDo6
Q01UaW1lQWRkKGxhc3RUaW1pbmcuZHVyYXRpb24sIGxhc3RUaW1pbmcucHJlc2VudGF0aW9uVGlt
ZVN0YW1wKSwgcHJlc2VudGF0aW9uVGltZSkpIHsKLSAgICAgICAgICAgIC8vIERpc2NvbnRpbnVp
dHkgZW5jb3VudGVyZWQsIGVtaXQgdGhlIHByZXZpb3VzbHkgZGVtdXhlZCBzYW1wbGVzLgotICAg
ICAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAg
YXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWlu
aW5nKTsKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0
YXR1czsKIAotICAgIGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zYW1w
bGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICBtX2xhc3RQb3NpdGlv
biA9IG1ldGFkYXRhLnBvc2l0aW9uOwogCiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7
CiAgICAgICAgIGlmICghdHJhY2soKS5jb2RlY19wcml2YXRlLmlzX3ByZXNlbnQoKSkgewpAQCAt
MTM1MywxOSArMTEyNCwxOCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9CiAKLSAgICAg
ICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwor
ICAgICAgICBSZWZQdHI8QXVkaW9JbmZvPiBmb3JtYXREZXNjcmlwdGlvbjsKICAgICAgICAgYXV0
byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKICAgICAgICAg
aWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCi0gICAgICAgICAgICBmb3JtYXREZXNj
cmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEu
c2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVWb3JiaXNBdWRpb0luZm8ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0
YS5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykg
ewotICAgICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRl
QmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRT
aXplKTsKKyAgICAgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21w
bGV0ZUJsb2NrQnVmZmVyKDAsIGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICAg
ICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJs
ZSB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+
ZGF0YSgpOwogICAgICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwot
ICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCks
IHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRh
dGEsIGNvb2tpZUNvbnRlbnRzKSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRl
RGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1
ZmZlci0+c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKSkg
ewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0
byBwYXJzZSBPcHVzIHByaXZhdGUgZGF0YSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KQEAgLTEzNzUsMzUgKzEx
NDUsMjkgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1fZnJhbWVzUGVyUGFja2V0ID0gY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0Owog
ICAgICAgICAgICAgbV9mcmFtZUR1cmF0aW9uID0gY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlv
bjsKLSAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0
RGVzY3JpcHRpb24oY29va2llQ29udGVudHMpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvb2tpZUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZy
b20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lG
X1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIEF1ZGlvSW5mbyBmcm9tIGF1ZGlvIHRyYWNrIGhl
YWRlciIpOwogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBzdHJlYW1EZXNjcmlwdGlvbiA9IFBBTDo6Q01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNj
cmlwdGlvbi5nZXQoKSk7Ci0gICAgICAgIGlmICghc3RyZWFtRGVzY3JpcHRpb24pIHsKLSAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9w
YWNrZXREdXJhdGlvbiA9IFBBTDo6Q01UaW1lTWFrZShzdHJlYW1EZXNjcmlwdGlvbi0+bUZyYW1l
c1BlclBhY2tldCwgc3RyZWFtRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlKTsKKyAgICAgICAgbV9w
YWNrZXREdXJhdGlvbiA9IE1lZGlhVGltZShmb3JtYXREZXNjcmlwdGlvbi0+ZnJhbWVzUGVyUGFj
a2V0LCBmb3JtYXREZXNjcmlwdGlvbi0+cmF0ZSk7CiAKLSAgICAgICAgc2V0Rm9ybWF0RGVzY3Jp
cHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICBzZXRGb3JtYXREZXNj
cmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9IGVsc2Ug
aWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpPcHVzKSB7CiAgICAgICAgIC8vIE9wdXMgdGVjaG5p
Y2FsbHkgYWxsb3dzIHRoZSBmcmFtZSBkdXJhdGlvbiBhbmQgZnJhbWVzLXBlci1wYWNrZXQgdmFs
dWVzIHRvIGNoYW5nZSBmcm9tIHBhY2tldCB0byBwYWNrZXQuCiAgICAgICAgIC8vIENvcmVBdWRp
byBkb2Vzbid0IHN1cHBvcnQgQVNCRCB2YWx1ZXMgbGlrZSB0aGVzZSB0byBjaGFuZ2Ugb24gYSBw
ZXItcGFja2V0IGJhc2lzLCBzbyB0aHJvdyBhbiBlcnJvciB3aGVuCiAgICAgICAgIC8vIHRoYXQg
a2luZCBvZiB2YXJpYWJpbGl0eSBpcyBlbmNvdW50ZXJlZC4KICAgICAgICAgT3B1c0Nvb2tpZUNv
bnRlbnRzIGNvb2tpZUNvbnRlbnRzOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNr
KCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgpOwotICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIg
PSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0
LCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIg
PSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmltdW1GcmFtZURhdGFT
aXplKTsKICAgICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAg
IHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQotICAgICAg
ICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRh
KCk7Ci0gICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgp
LCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJE
YXRhLCBjb29raWVDb250ZW50cykKKyAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShw
cml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1ZmZlci0+
c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKQogICAgICAg
ICAgICAgfHwgY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0ICE9IG1fZnJhbWVzUGVyUGFj
a2V0CiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uICE9IG1fZnJh
bWVEdXJhdGlvbikgewogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
T3B1cyBmcmFtZXMtcGVyLXBhY2tldCBjaGFuZ2VkIHdpdGhpbiBhIHRyYWNrOyBlcnJvciIpOwpA
QCAtMTQxMSw0MSArMTE3NSwyOTMgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fcGFja2V0U2l6ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6
ZSk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmFwcGVuZCh7IG1fcGFja2V0RHVyYXRpb24sIHByZXNl
bnRhdGlvblRpbWUsIFBBTDo6a0NNVGltZUludmFsaWQgfSk7Ci0gICAgbV9jdXJyZW50UGFja2V0
Qnl0ZU9mZnNldCArPSAqbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0ZVBhY2tl
dFNpemUgPSBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmlu
Zm8oKSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2Ny
aXB0aW9uKCkpOworICAgIGVsc2UgaWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERl
c2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBk
cmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpD
TVRpbWVHZXRTZWNvbmRzKFBBTDo6Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9z
YW1wbGVQcmVzZW50YXRpb25UaW1lKSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXRE
dXJhdGlvbikgKiBzYW1wbGVDb3VudDsKKyAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVu
ZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNrZXRE
dXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIE1lZGlhU2Ft
cGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOwogCi0gICAgaWYgKHNhbXBsZUR1cmF0aW9uID49
IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5p
bmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVm
ZmVycygpCisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRWaWRlb0NvZGVjKFN0cmluZ1Zp
ZXcgbmFtZSkKIHsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAg
aWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OlR5cGU6OkF1ZGlvKQotICAgICAgICAgICAgdHJhY2stPmRyYWluUGVuZGluZ1NhbXBsZXMo
KTsKKyAgICByZXR1cm4gbmFtZSA9PSAiVl9WUDgiIHx8IG5hbWUgPT0gIlZfVlA5IjsKK30KKwor
Ym9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQor
eworICAgIHJldHVybiBuYW1lID09ICJBX1ZPUkJJUyIgfHwgbmFtZSA9PSAiQV9PUFVTIjsKK30K
KworU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCisgICAg
OiBtX3BhcnNlcigqdGhpcykKK3sKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpp
c1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQoreworICAgIHJldHVybiBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9hZEZvcm1h
dFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOworfQorCitNZWRpYVBsYXllckVu
dW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1
cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyNpZiBFTkFCTEUoVlA5KSB8fCBF
TkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKKyAgICBpZiAoIWlzV2VibVBhcnNlckF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJ
c05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVy
VHlwZSgpOworICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7CisgICAgYm9vbCBpc1ZpZGVvQ29u
dGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVv
L3dlYm0iKTsKKyAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFp
bmVyVHlwZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZh
bHNlOworI2lmIEVOQUJMRShWT1JCSVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9
IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisjaWYgRU5BQkxFKE9QVVMpCisg
ICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsK
KyNlbmRpZgorCisgICAgaWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29k
ZWNBdmFpbGFibGUpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYm9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNB
bnlBdWRpb0NvZGVjQXZhaWxhYmxlOworI2lmIEVOQUJMRShWUDkpCisgICAgaXNBbnlDb2RlY0F2
YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKCFp
c0FueUNvZGVjQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3Vw
cG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2Rl
Y3MoKTsKKyAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7CisKKyAgICBmb3IgKGF1dG8m
IGNvZGVjIDogY29kZWNzKSB7CisjaWYgRU5BQkxFKFZQOSkKKyAgICAgICAgaWYgKGNvZGVjLnN0
YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29k
ZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywgInZwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICgh
aXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGF1
dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlYyk7CisgICAg
ICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAg
ICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFt
ZXRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBp
ZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworI2lmIEVOQUJMRShPUFVTKQorICAg
ICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29k
ZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKworICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKKworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8
fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50
VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNh
bXBsZXNCbG9jayYmIHNhbXBsZXMsIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIG1fY2FsbGJh
Y2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcyksIHBvc2l0aW9uKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlh
bGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQoreworICAgIG1fY2FsbE9u
Q2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCld
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2Fs
bGJhY2spCisgICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2so
V1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBz
YW1wbGVzQmxvY2ssIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIGlmICghc2FtcGxlc0Jsb2Nr
LmluZm8oKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwg
Ik5vIFRyYWNrSW5mbyBzZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICBpZiAo
c2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgeworICAgICAgICBpZiAobV92aWRlb0luZm8gIT0gc2Ft
cGxlc0Jsb2NrLmluZm8oKSkgeworICAgICAgICAgICAgbV92aWRlb0luZm8gPSBzYW1wbGVzQmxv
Y2suaW5mbygpOworICAgICAgICAgICAgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpzYW1wbGVzQmxvY2suaW5mbygpKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IG1fdmlkZW9Gb3JtYXREZXNjcmlw
dGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdWRpb0luZm8gIT0gc2FtcGxlc0Js
b2NrLmluZm8oKSkgeworICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7Cisg
ICAgICAgICAgICBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21UcmFja0luZm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICAgICAgbV9h
dWRpb0luZm8gPSBzYW1wbGVzQmxvY2suaW5mbygpOworICAgICAgICB9CisgICAgICAgIGZvcm1h
dERlc2NyaXB0aW9uID0gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOwogICAgIH0KKworICAgIGlm
IChzYW1wbGVzQmxvY2suaXNWaWRlbygpKSB7CisgICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92
ZShzYW1wbGVzQmxvY2spLCBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFBhY2sgYXVkaW8gaWYgbmVlZGVk
LgorICAgIGlmIChtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYg
bGFzdFNhbXBsZSA9IG1fcXVldWVkQXVkaW9TYW1wbGVzLmxhc3QoKTsKKyAgICAgICAgaWYgKGxh
c3RTYW1wbGUuZHVyYXRpb24gKyBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUgIT0gc2FtcGxl
c0Jsb2NrLmZpcnN0KCkucHJlc2VudGF0aW9uVGltZSkKKyAgICAgICAgICAgIGZsdXNoUGVuZGlu
Z0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAgfQorICAgIGZvciAoYXV0byYgc2FtcGxlIDog
c2FtcGxlc0Jsb2NrKQorICAgICAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1
cmF0aW9uOworICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNC
bG9jaykpOworICAgIGlmIChtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1w
bGVzKHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5p
bXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrLCBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmIGRlc2NyaXB0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
b3NpdGlvbikKIHsKLSAgICBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uID0gZHVyYXRpb247
CisgICAgaWYgKGJsb2NrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBl
eHBlY3RlZEJ1ZmZlciA9IHRvQ01TYW1wbGVCdWZmZXIoV1RGTW92ZShibG9jayksIGRlc2NyaXB0
aW9uKTsKKyAgICBpZiAoIWV4cGVjdGVkQnVmZmVyKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSLCAidG9DTVNhbXBsZUJ1ZmZlciBlcnJvcjoiLCBleHBlY3Rl
ZEJ1ZmZlci5lcnJvcigpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgdHJhY2tJRCA9IGJsb2NrLmluZm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0g
V1RGTW92ZShleHBlY3RlZEJ1ZmZlci52YWx1ZSgpKSwgcG9zaXRpb25dICgpIG11dGFibGUgewor
ICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6
OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOworICAgICAgICBpZiAocG9zaXRp
b24pCisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpwb3NpdGlv
bik7CisKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRp
YVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0pOwogfQogCi1ib29sIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5h
bWUpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZFRyaW1taW5nRGF0YSh1aW50
NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIHBhZGRpbmcpCiB7Ci0gICAgcmV0dXJuIG5h
bWUgPT0gIlZfVlA4IiB8fCBuYW1lID09ICJWX1ZQOSI7CisgICAgbV9jYWxsT25DbGllbnRUaHJl
YWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQs
IHBhZGRpbmddICgpIHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFj
aykKKyAgICAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBw
YWRkaW5nKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1N1
cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiBrZXlJRCwgdWludDY0X3QgdHJhY2tJRCkKIHsKLSAgICByZXR1cm4g
bmFtZSA9PSAiQV9WT1JCSVMiIHx8IG5hbWUgPT0gIkFfT1BVUyI7CisgICAgaWYgKG1fZGlkUHJv
dmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNr
KQorICAgICAgICBtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0
YUZvclRyYWNrSURDYWxsYmFjayhXVEZNb3ZlKGtleUlEKSwgdHJhY2tJRCk7Cit9CisKK3ZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9uKQoreworICAgIGlmICghbV9hdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fYXVkaW9JbmZvKTsKKyAgICBt
X3F1ZXVlZEF1ZGlvU2FtcGxlcy5zZXRJbmZvKG1fYXVkaW9JbmZvLmNvcHlSZWYoKSk7CisgICAg
cmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVkaW9TYW1wbGVzKSwgbV9hdWRpb0Zvcm1h
dERlc2NyaXB0aW9uLmdldCgpLCBwb3NpdGlvbik7CisKKyAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxl
cyA9IHsgfTsKKyAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPSB7IH07Cit9CisKK3ZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFncyBhcHBl
bmRGbGFncykKK3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiZmxh
Z3MoIiwgYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkgPyAiRGlzY29u
dGludWl0eSIgOiAiIiwgIiksIHNpemUoIiwgc2VnbWVudC5zaXplKCksICIpIik7CisKKyAgICBp
ZiAoYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpCisgICAgICAgIG1f
cGFyc2VyLnJlc2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFyc2VyLnBhcnNlKFdURk1v
dmUoc2VnbWVudCkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChy
ZXN1bHQucmV0dXJuVmFsdWUoKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUiwgInN0YXR1cy5jb2RlKCIsIHJlc3VsdC5yZXR1cm5WYWx1ZSgpLCAiKSIpOwor
CisgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0gcmVzdWx0LnJldHVyblZhbHVlKCldIHsKKyAgICAg
ICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKQorICAg
ICAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soY29k
ZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBl
ZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1T
YW1wbGVEdXJhdGlvbi4KKyAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5vIG1vcmUg
YXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBlbWl0IGFueSBwZW5kaW5n
CisgICAgLy8gYXVkaW8gYnVmZmVycy4KKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsK
KworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFEYXRhKCkKK3sKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29sLCB1aW50
NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmludmFsaWRhdGUoKQoreworICAgIElORk9fTE9HX0lGX1BPU1NJ
QkxFKExPR0lERU5USUZJRVIpOworICAgIG1fcGFyc2VyLmludmFsaWRhdGUoKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIs
IGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCit7CisgICAgbV9wYXJzZXIuc2V0TG9nZ2VyKGxv
Z2dlciwgbG9nSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9t
aW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KGR1
cmF0aW9uKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGFmZGJm
NDliMmY0NjkyMTZlMWI5ZGY3ZWQxODIxYjNhYTIyNzdmOWEuLmZmY2VkMzQyNWQ2ZTUyNTQyYTBh
ZmZhYWU4NzcwZjVjMmM2MTA4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAg
LTI3LDE1ICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUg
IkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU291
cmNlQnVmZmVyUGFyc2VyLmgiCiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
Ci0jaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29y
ZU1lZGlhU1BJLmg+CiAjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3ZWJtL2NhbGxiYWNr
Lmg+CiAjaW5jbHVkZSA8d2VibS9zdGF0dXMuaD4KICNpbmNsdWRlIDx3ZWJtL3ZwOV9oZWFkZXJf
cGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ3LDQyICs0OCwzNiBAQCBj
bGFzcyBXZWJtUGFyc2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06
OkNhbGxiYWNrIHsKK2NsYXNzIFdlYk1QYXJzZXIgOiBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjbGFzcyBTZWdtZW50
UmVhZGVyOwotCi0gICAgc3RhdGljIGJvb2wgaXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCk7
Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBl
U3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7Ci0gICAgc3RhdGljIFNwYW48Y29uc3QgQVND
SUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlwZXMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlw
ZSYpOworICAgIGNsYXNzIENhbGxiYWNrIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRh
KHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9u
U2VnbWVudCYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVk
aWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bkRlY3J5cHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRC
dWZmZXI+JiYsIHVpbnQ2NF90KSB7IH0KKyAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSA9IGRl
ZmF1bHQ7CisgICAgfTsKIAotICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKLSAgICB+U291
cmNlQnVmZmVyUGFyc2VyV2ViTSgpOworICAgIFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKKyAgICB+
V2ViTVBhcnNlcigpOwogCi0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBjbGFz
cyBTZWdtZW50UmVhZGVyOwogCisgICAgRXhjZXB0aW9uT3I8aW50PiBwYXJzZShTb3VyY2VCdWZm
ZXJQYXJzZXI6OlNlZ21lbnQmJik7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGNvbnN0IHdlYm06OlN0YXR1cyYg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFR5cGU6OldlYk07IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVu
ZERhdGEoU2VnbWVudCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0sIEFw
cGVuZEZsYWdzID0gQXBwZW5kRmxhZ3M6Ok5vbmUpIGZpbmFsOwotICAgIHZvaWQgZmx1c2hQZW5k
aW5nTWVkaWFEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRh
Rm9yVHJhY2tJRChib29sLCB1aW50NjRfdCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRQcm92aWRl
TWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCByZXNldFBhcnNl
clN0YXRlKCkgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CisgICAgdm9pZCBw
cm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KTsKIAotICAgIHZv
aWQgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9T
YW1wbGVEdXJhdGlvbihmbG9hdCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRM
b2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7Ci0KLSAg
ICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgdWlu
dDY0X3QsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBieXRlUmFuZ2VPZmZzZXQpOwotICAgIHVzaW5n
IERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHRy
YWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgZGlzY2FyZFBhZGRpbmcpPjsKLSAgICB2b2lkIHNldERp
ZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2soRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayYm
IGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExv
Z2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIGNvbnN0IExvZ2dlciogbG9nZ2Vy
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CiAKICAgICBl
bnVtIGNsYXNzIEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtOTQsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENvbnRlbnRFbmNyeXB0ZWQsCiAgICAgICAgIFZhcmlhYmxlRnJhbWVEdXJhdGlvbiwK
ICAgICAgICAgUmVhZGVyRmFpbGVkLAorICAgICAgICBQYXJzZXJTaHV0ZG93biwKICAgICB9Owog
CiAgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewpAQCAtMTIwLDE4ICsxMTYsMTIgQEAg
cHVibGljOgogICAgIGNsYXNzIFRyYWNrRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KKyAgICAgICAg
c3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNr
RGF0YT4KICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tE
YXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlVua25vd24sIHBhcnNlcik7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tF
bnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6OlVua25vd24sIHBhcnNlcik7CiAgICAgICAgIH0K
IAotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgVW5rbm93biwKLSAgICAg
ICAgICAgIEF1ZGlvLAotICAgICAgICAgICAgVmlkZW8sCi0gICAgICAgIH07Ci0KLSAgICAgICAg
VHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRy
YWNrRW50cnksIFR5cGUgdHJhY2tUeXBlLCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIp
CisgICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFj
a0VudHJ5JiB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUsIFdlYk1Q
YXJzZXImIHBhcnNlcikKICAgICAgICAgICAgIDogbV9jb2RlYyB7IGNvZGVjVHlwZSB9CiAgICAg
ICAgICAgICAsIG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5IHsgdHJhY2tFbnRyeSB9IH0KICAg
ICAgICAgICAgICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUgfQpAQCAtMTQyLDE0ICsxMzIsMTgg
QEAgcHVibGljOgogCiAgICAgICAgIENvZGVjVHlwZSBjb2RlYygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZWM7IH0KICAgICAgICAgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2soKSB7IHJldHVybiBtX3Ry
YWNrOyB9Ci0gICAgICAgIFR5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5
cGU7IH0KKyAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFja1R5cGU7IH0KIAotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9u
OyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+JiYgZGVzY3JpcHRpb24pIHsgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdU
Rk1vdmUoZGVzY3JpcHRpb24pOyB9CisgICAgICAgIFJlZlB0cjxUcmFja0luZm8+IGZvcm1hdERl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbi5jb3B5UmVmKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihSZWY8VHJhY2tJbmZvPiYmIGRl
c2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uLT50
cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICAgICAgfQogCi0gICAgICAg
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2Vy
OyB9CisgICAgICAgIFdlYk1QYXJzZXImIHBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2Vy
OyB9CiAKLSAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBD
TVRpbWUmLCBpbnQpCisgICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90Kiwg
Y29uc3QgTWVkaWFUaW1lJiwgaW50KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVz
OjprSW52YWxpZEVsZW1lbnRJZCk7CkBAIC0xNTcsMTEgKzE1MSwxMCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBtX3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BhY2tldFRpbWluZ3MuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOworICAgICAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fY29t
cGxldGVNZWRpYVNhbXBsZXMgPSB7IH07CiAgICAgICAgIH0KKwogICAgICAgICB2b2lkIHJlc2V0
KCkKICAgICAgICAgewogICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwpA
QCAtMTcwLDUxICsxNjMsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tC
dWZmZXIucmVzZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFpblBl
bmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQg
PSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHZvaWQgZHJhaW5QZW5kaW5nU2FtcGxlcygpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihsYXRlc3RCeXRlUmFuZ2VPZmZz
ZXQpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX3BhcnNlci5wcm92aWRlTWVkaWFE
YXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcyksIG1fbGFzdFBvc2l0aW9uKTsKICAg
ICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFs
PHNpemVfdD4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2Nlc3MoQ01TYW1wbGVCdWZm
ZXJSZWYpIHsgfTsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29udGlndW91c0NvbXBs
ZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CiAgICAg
ICAgIHdlYm06OlN0YXR1cyByZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06
OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICBTaGFy
ZWRCdWZmZXJCdWlsZGVyIG1fY29tcGxldGVCbG9ja0J1ZmZlcnM7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAgc2l6ZV90IG1fY3Vy
cmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFj
a2V0U2l6ZXM7Ci0gICAgICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGlt
aW5nczsKKyAgICAgICAgUmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IG1fY29tcGxldGVC
bG9ja0J1ZmZlcjsKKyAgICAgICAgTWVkaWFTYW1wbGVzQmxvY2sgbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlczsKKyAgICAgICAgdWludDY0X3QgbV9sYXN0UG9zaXRpb24geyAwIH07CiAKICAgICBwcml2
YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKICAgICAgICAgd2VibTo6VHJhY2tFbnRy
eSBtX3RyYWNrOwotICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOwotICAgICAgICBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgY29u
c3QgVHJhY2tJbmZvOjpUcmFja1R5cGUgbV90cmFja1R5cGU7CisgICAgICAgIFJlZlB0cjxUcmFj
a0luZm8+IG1fZm9ybWF0RGVzY3JpcHRpb247CiAgICAgICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIg
bV9jdXJyZW50QmxvY2tCdWZmZXI7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1f
cGFyc2VyOworICAgICAgICBXZWJNUGFyc2VyJiBtX3BhcnNlcjsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwogICAgICAgICAvLyBTaXplIG9mIHRo
ZSBjdXJyZW50bHkgaW5jb21wbGV0ZSBwYXJzZWQgcGFja2V0LgogICAgICAgICBzaXplX3QgbV9w
YXJ0aWFsQnl0ZXNSZWFkIHsgMCB9OwogICAgIH07CiAKICAgICBjbGFzcyBWaWRlb1RyYWNrRGF0
YSA6IHB1YmxpYyBUcmFja0RhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8g
Y3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNr
RW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVv
VHJhY2tEYXRhPgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlw
ZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2Vy
KSAtPiBVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnks
IHBhcnNlcik7CiAgICAgICAgIH0KIAotICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUg
Y29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNJiBwYXJzZXIpCi0gICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUs
IHRyYWNrRW50cnksIFR5cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIFZpZGVvVHJhY2tEYXRh
KENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnks
IFdlYk1QYXJzZXImIHBhcnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhKGNvZGVjVHlwZSwg
dHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6OlZpZGVvLCBwYXJzZXIpCiAgICAgICAg
IHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xh
c3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQotICAgICAgICB3ZWJt
OjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotICAgICAg
ICB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSBmaW5hbDsKKyAgICAgICAgd2Vi
bTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJh
bWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKICAg
ICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CisKICNpZiBFTkFC
TEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJz
ZXI7CiAgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKQEAgLTIyMywzOSArMjE1LDI5
IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0
YSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1
ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJz
ZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPgogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0
cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1TYW1wbGVEdXJhdGlvbik7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5
LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBl
IGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCi0gICAg
ICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVkaW8s
IHBhcnNlciB9Ci0gICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWluaW11
bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVj
VHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFy
c2VyKQorICAgICAgICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRy
YWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbywgcGFyc2VyIH0KICAgICAgICAgewogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25z
dCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3Qq
LCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOwogICAgICAgICB2b2lkIHJlc2V0Q29tcGxl
dGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1l
KCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCi0gICAgICAgIENNVGltZSBt
X3NhbXBsZVByZXNlbnRhdGlvblRpbWU7Ci0gICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9u
OworICAgICAgICBNZWRpYVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKICAgICAgICAgdWludDhfdCBt
X2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24g
eyAwX3MgfTsKICAgICAgICAgc2l6ZV90IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07
Ci0gICAgICAgIC8vIEZJWE1FOiAwLjUgLSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlv
biBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZp
cnN0Ci0gICAgICAgIC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRp
YVNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29y
YC4KLSAgICAgICAgZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsK
IAotICAgIGNvbnN0IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIu
Z2V0KCk7IH0KLSAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9sb2dJZGVudGlmaWVyOyB9Ci0KIHByaXZhdGU6Ci0KICAgICBUcmFja0RhdGEqIHRyYWNrRGF0
YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKLQogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVk
VmlkZW9Db2RlYyhTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF1ZGlv
Q29kZWMoU3RyaW5nVmlldyk7CiAKQEAgLTI3NSw3ICsyNTcsNyBAQCBwcml2YXRlOgogICAgIHdl
Ym06OlN0YXR1cyBPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwg
Y29uc3Qgd2VibTo6QmxvY2tHcm91cCYpOwogICAgIHdlYm06OlN0YXR1cyBPbkZyYW1lKGNvbnN0
IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB3ZWJtOjpSZWFkZXIqLCB1aW50NjRfdCogYnl0ZXNSZW1h
aW5pbmcpIGZpbmFsOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxpemF0aW9uU2VnbWVu
dD4gbV9pbml0aWFsaXphdGlvblNlZ21lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1
ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVu
dDsKICAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWY8U2hhcmVkQnVmZmVyPj4+IG1f
a2V5SWRzOwogICAgIHdlYm06OlN0YXR1cyBtX3N0YXR1czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
d2VibTo6V2VibVBhcnNlcj4gbV9wYXJzZXI7CkBAIC0yOTIsMTIgKzI3NCw2OCBAQCBwcml2YXRl
OgogICAgIHVzaW5nIEJsb2NrVmFyaWFudCA9IHN0ZDo6dmFyaWFudDx3ZWJtOjpCbG9jaywgd2Vi
bTo6U2ltcGxlQmxvY2s+OwogICAgIHN0ZDo6b3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJl
bnRCbG9jazsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247
Ci0gICAgZmxvYXQgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIFJl
ZlB0cjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRp
ZmllciB7IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAw
IH07CisgICAgQ2FsbGJhY2smIG1fY2FsbGJhY2s7Cit9OworCitjbGFzcyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgV2ViTVBhcnNlcjo6Q2FsbGJh
Y2sgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpOworICAgIHN0YXRpYyBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGUgaXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50
VHlwZSYpOworICAgIHN0YXRpYyBTcGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlN
RVR5cGVzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKKworICAgIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0oKTsKKyAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpID0gZGVmYXVsdDsK
KworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBUeXBlOjpXZWJNOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmRE
YXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBl
bmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoUGVuZGlu
Z01lZGlhRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZv
clRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1l
ZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcmVzZXRQYXJzZXJT
dGF0ZSgpIGZpbmFsIHsgbV9wYXJzZXIucmVzZXRTdGF0ZSgpOyB9CisgICAgdm9pZCBpbnZhbGlk
YXRlKCkgZmluYWw7CisKKyAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0g
RnVuY3Rpb248dm9pZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQ
YWRkaW5nKT47CisgICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1fZGlk
UGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBM
b2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsKKyAgICBjb25zdCBMb2dnZXIq
IGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qg
dm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQor
Citwcml2YXRlOgorICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBwYXJzZWRJ
bml0aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21l
bnQmJikgZmluYWw7CisgICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2sm
JiwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICEhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFG
b3JUcmFja0lEQ2FsbGJhY2s7IH0KKyAgICB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgZmluYWw7
CisgICAgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYp
IGZpbmFsOworICAgIAorICAgIHZvaWQgcmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYm
LCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90Pik7CisKICAg
ICBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxs
YmFjazsKKyAgICBXZWJNUGFyc2VyIG1fcGFyc2VyOworICAgIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0
IFRyYWNrSW5mbz4gbV9hdWRpb0luZm87CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgVHJhY2tJ
bmZvPiBtX3ZpZGVvSW5mbzsKKyAgICBNZWRpYVRpbWUgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbiB7IDk2MDAwLCA0ODAwMCB9OworICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fcXVldWVkQXVk
aW9TYW1wbGVzOworICAgIE1lZGlhVGltZSBtX3F1ZXVlZEF1ZGlvRHVyYXRpb247CisgICAgUmVm
UHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlm
aWVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpAQCAtMzA2LDEyICszNDQsMTIgQEAgU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKQogICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXImIHBh
cnNlcikgeyByZXR1cm4gcGFyc2VyLnR5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXI6OlR5cGU6OldlYk07IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YSkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNr
RGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OlR5cGU6OlZpZGVvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4g
dHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpW
aWRlbzsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNr
VHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlw
ZTo6QXVkaW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBh
cnNlcjo6QXVkaW9UcmFja0RhdGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEu
dHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tJbmZvOjpUcmFja1R5cGU6OkF1ZGlvOyB9CiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09V
UkNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTU0NGQ5YzI1N2ZlMGJkNTU4MjgwM2FlMWE4
MDg0NTAxNzNjNTBiNS4uZDAwNDFiZjg5YjMwYzJjYzYxODc5MDhmNGJlNzZhM2FiZmY0MjY0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiVlA5VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d2VibS9kb21fdHlwZXMuaD4KIAotdHlwZWRlZiBjb25zdCBz
dHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsK
LQogbmFtZXNwYWNlIHZwOV9wYXJzZXIgewogY2xhc3MgVnA5SGVhZGVyUGFyc2VyOwogfQpAQCAt
NDAsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBNZWRpYUNhcGFiaWxp
dGllc0luZm87CiBzdHJ1Y3QgVmlkZW9Db25maWd1cmF0aW9uOworc3RydWN0IFZpZGVvSW5mbzsK
IAogV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlcldlYktpdFZQOURlY29kZXIoKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDhEZWNvZGVyKCk7CkBAIC01MCw3ICs0OSw3
IEBAIGJvb2wgaXNWUDhEZWNvZGVyQXZhaWxhYmxlKCk7CiBib29sIGlzVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmRTdXBwb3J0ZWQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsK
IHN0ZDo6b3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVy
cyhjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJh
dGlvbiYpOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0
RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRl
clBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworUmVmPFZpZGVv
SW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2Vy
OjpWcDlIZWFkZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsK
IAogc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29sIGtleWZyYW1lIHsgZmFsc2UgfTsK
QEAgLTY2LDcgKzY1LDcgQEAgc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKIH07CiAKIHN0ZDo6b3B0
aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCog
ZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJh
bWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKK1JlZjxWaWRl
b0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXIm
LCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgVlA5VGVzdGluZ092ZXJyaWRlcyB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
CmluZGV4IGRkMTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQzMGIyNmMuLmNmOGM5YjIx
MjhjMDE0OGQ1YTkwZDlkNTE1NmRmNjlmNGEwZmJkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
CkBAIC0zMSwxMSArMzEsMTIgQEAKICNpbXBvcnQgIkZvdXJDQy5oIgogI2ltcG9ydCAiTGliV2Vi
UlRDUHJvdmlkZXIuaCIKICNpbXBvcnQgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2ltcG9y
dCAiTWVkaWFTYW1wbGUuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJT
Y3JlZW5Qcm9wZXJ0aWVzLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN5
c3RlbUJhdHRlcnkuaCIKICNpbXBvcnQgIlZpZGVvQ29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCA8
Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CiAjaW1wb3J0IDx3ZWJtL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CkBAIC0zNTAsMjUgKzM1MSwz
NSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJp
ZXMmIGNvZWZmaWNpZW50cykKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0
VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQorc3RhdGljIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllcyBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXModWlu
dDhfdCBwcmltYXJpZXMpCiB7CiAgICAgc3dpdGNoIChwcmltYXJpZXMpIHsKICAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOgotICAgICAgICByZXR1cm4g
a0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVfMzIxMzsKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25Db2xvclByaW1hcmllczo6QlRfNDcwXzZfTToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpCdDQ3MGJnOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzYwMV83OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01Q
VEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19T
TVBURV9DOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0
ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6RmlsbTsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWlu
YW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIw
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8x
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4
MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFf
MjoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmll
c19EQ0lfUDM7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNt
cHRlUnA0MzE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVf
RUdfNDMyXzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQ
cmltYXJpZXNfUDNfRDY1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6
OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4gUEFMOjprQ01G
b3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzI7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpKZWRlY1AyMlBob3NwaG9yczsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpVbnNwZWNp
ZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3Qg
Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MmIGNoYXJhY3RlcmlzdGljcykKQEAgLTQxMSwyOSArNDIyLDQ1IEBAIHN0YXRpYyB1aW50
OF90IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzJiBjCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01U
cmFuc2ZlckZ1bmN0aW9uKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQorc3RhdGljIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3ModWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCiB7CiAgICAgc3dpdGNo
IChjaGFyYWN0ZXJpc3RpY3MpIHsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJh
bnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZfTToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyMmN1cnZlOworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JHOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTI4
Y3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QlRfNjAxXzc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlMTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BR
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpT
bXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TGluZWFyOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpMaW5lYXI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6TG9ncml0aG1pYzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6TG9nOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3FydDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9nU3FydDsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2NjI0Owor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzEzNjFf
MDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2NjIxOwogICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8x
MGJpdDsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
VF8yMDIwXzEyYml0OgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEyYml0OworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJl
dHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0Owog
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzQyOF8xOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVy
RnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxOwogICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOgotICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjEwMF9ITEc7
Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYx
OTY2XzJfMToKLSAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0
RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9r
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0g
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9M
aW5lYXI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkFyaWJTdGRCNjdIbGc7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7CiAgICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJp
eENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNvZWZmaWNpZW50cykKQEAg
LTQ2MiwyMSArNDg5LDMxIEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNp
ZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNvZWZmaWNpZW50CiAgICAgfQogfQogCi1z
dGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeCh1aW50OF90IGNvZWZmaWNp
ZW50cykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzIGNvbnZlcnRUb1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHModWludDhfdCBjb2VmZmljaWVudHMpCiB7CiAg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJl
dHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpSZ2I7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ3MDk7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkZjYzsKICAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDQ3MGJnOwogICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1h
Z2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6WUNnQ287CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwTm9uY29u
c3RhbnRMdW1pbmFuY2U7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpV
bnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVp
bnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgs
IHVpbnQ2NF90IHkpCkBAIC00OTEsNyArNTI4LDcgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFN1
YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCiAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180
MjBfQ29sb2NhdGVkOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
KGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiByZWNvcmQsIGludDMyX3Qgd2lkdGgs
IGludDMyX3QgaGVpZ2h0KQorc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJl
Y29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKIHsKICAgICAvLyBS
ZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0w
My0zMSIKICAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgpAQCAt
NTIwLDEyICs1NTcsMTQgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmkKICAgICAvLyBGSVhNRTog
Q29udmVydCBleGlzdGluZyBzdHJ1Y3QgdG8gYW4gSVNPQm94IGFuZCByZXBsYWNlIHRoZSB3cml0
aW5nIGNvZGUgYmVsb3cKICAgICAvLyB3aXRoIGEgc3ViY2xhc3Mgb2YgSVNPRnVsbEJveC4KIAor
ICAgIGF1dG8gdmlkZW9JbmZvID0gVmlkZW9JbmZvOjpjcmVhdGUoKTsKKyAgICB2aWRlb0luZm8t
PnNpemUgPSB2aWRlb0luZm8tPmRpc3BsYXlTaXplID0geyBmbG9hdCh3aWR0aCksIGZsb2F0KGhl
aWdodCkgfTsKKwogICAgIGNvbnN0ZXhwciBzaXplX3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250
ZW50c1NpemUgPSAxMjsKIAogICAgIHVpbnQzMl90IHZlcnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7
CiAgICAgdWludDhfdCBiaXREZXB0aENocm9tYUFuZFJhbmdlID0gKDB4RiAmIHJlY29yZC5iaXRE
ZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgx
ICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyk7CiAgICAgdWludDE2X3QgY29kZWNJbnRpYWxp
emF0aW9uRGF0YVNpemUgPSAwOwotCiAgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3Jl
YXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUs
IDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSk7CiAgICAgdmlldy0+c2V0
KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2UpOwogICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJv
ZmlsZSwgZmFsc2UpOwpAQCAtNTM1LDQ2ICs1NzQsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZv
cm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29u
ZmkKICAgICB2aWV3LT5zZXQoOCwgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxz
ZSk7CiAgICAgdmlldy0+c2V0KDksIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsK
ICAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7Ci0K
LSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAoY29uc3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOwotCi0g
ICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKLSAg
ICBDRlR5cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07Ci0gICAg
YXV0byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgVmVj
dG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9u
RXh0ZW5zaW9uX1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKLSAgICBWZWN0b3I8
Q0ZUeXBlUmVmPiBleHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9
OwotCi0gICAgaWYgKHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoUEFMOjpr
Q01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4
dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICBpZiAo
YXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ01Db2xvclByaW1hcmllcyhyZWNvcmQu
Y29sb3JQcmltYXJpZXMpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFn
ZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBl
bmQoY21Db2xvclByaW1hcmllcyk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1
bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJh
Y3RlcmlzdGljcykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVm
ZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5k
KGNtVHJhbnNmZXJGdW5jdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBj
b252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAg
ICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsK
LSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOwotICAgIH0KLQotICAg
IGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCks
IGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjID0gcmVjb3JkLmNvZGVjTmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVj
VHlwZV9WUDkgOiAndnAwOCc7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb2RlYywgd2lkdGgsIGhlaWdodCwgZXh0
ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIHZpZGVvSW5m
by0+YXRvbURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1aW50OF90Kj4o
dmlldy0+ZGF0YSgpKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICB2aWRlb0luZm8tPmNvbG9y
U3BhY2UuZnVsbFJhbmdlID0gcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3Vy
YXRpb25SYW5nZTo6RnVsbFJhbmdlOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5wcmltYXJp
ZXMgPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJp
bWFyaWVzKTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UudHJhbnNmZXIgPSBjb252ZXJ0VG9Q
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MocmVjb3JkLnRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzKTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UubWF0cml4ID0gY29udmVydFRv
UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyhyZWNvcmQubWF0cml4Q29lZmZpY2llbnRz
KTsKKyAgICB2aWRlb0luZm8tPmNvZGVjTmFtZSA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDki
ID8gJ3ZwMDknIDogJ3ZwMDgnOworICAgIHJldHVybiB2aWRlb0luZm87CiB9CiAKLVJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlI
ZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNv
bnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCitSZWY8VmlkZW9JbmZvPiBjcmVhdGVW
aWRlb0luZm9Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBh
cnNlciYgcGFyc2VyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQogewogICAg
IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKIApAQCAtNjA2LDcgKzYxNSw3IEBA
IFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDlIZWFkZXJQYXJzZXIoY29uCiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJp
ZXMgPSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWlu
dDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQpAQCAtNjcxLDcgKzY4MCw3IEBAIHN0
ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWlu
dDhfdCogZnJhbWVEYXRhLCBzaXplCiAgICAgcmV0dXJuIGhlYWRlcjsKIH0KIAotUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhl
YWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENv
bG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRl
cihjb25zdCBWUDhGcmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91
cj4mIGNvbG9yKQogewogICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKICAg
ICByZWNvcmQuY29kZWNOYW1lID0gInZwMDgiOwpAQCAtNzAxLDcgKzcxMCw3IEBAIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhI
ZWFkZXIoY29uc3QgVlA4CiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252
ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmQocmVjb3JkLCBoZWFkZXIud2lkdGgsIGhlYWRlci5oZWlnaHQpOworICAgIHJl
dHVybiBjcmVhdGVWaWRlb0luZm9Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3Jk
LCBoZWFkZXIud2lkdGgsIGhlYWRlci5oZWlnaHQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2Nv
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EuaAppbmRleCA4NzEwNGQ4YjdiMzU3YzE2MGI2ZGNjYzQxYmZlMWY4OWUwYTZj
MjcxLi5hOTgwOThjNWEzOWZjYjQ1MGIyZmY5Yzc2MTBkOTc0ZTgyNDZkNGQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
Yk1BdWRpb1V0aWxpdGllc0NvY29hLmgKQEAgLTI3LDE2ICsyNywxNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOwotdHlwZWRlZiBjb25zdCBz
dHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQXVkaW9JbmZvOworCiBXRUJDT1JFX0VY
UE9SVCBib29sIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9v
bCByZWdpc3RlclZvcmJpc0RlY29kZXJJZk5lZWRlZCgpOwotUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBj
b25zdCB2b2lkKik7CitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3JiaXNBdWRpb0luZm8oc2l6
ZV90LCBjb25zdCB2b2lkKik7CiAKIHN0cnVjdCBPcHVzQ29va2llQ29udGVudHMgewogICAgIHVp
bnQ4X3QgdmVyc2lvbiB7IDAgfTsKQEAgLTU1LDggKzU2LDEwIEBAIHN0cnVjdCBPcHVzQ29va2ll
Q29udGVudHMgewogCiBXRUJDT1JFX0VYUE9SVCBib29sIGlzT3B1c0RlY29kZXJBdmFpbGFibGUo
KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2RlcklmTmVlZGVkKCk7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBrT3B1c0hlYWRlclNpemUgPSAxOTsKK3N0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUgPSAyOwogYm9vbCBwYXJzZU9w
dXNQcml2YXRlRGF0YShzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRl
RGF0YSwgc2l6ZV90IGZyYW1lRGF0YVNpemUsIGNvbnN0IHZvaWQqIGZyYW1lRGF0YSwgT3B1c0Nv
b2tpZUNvbnRlbnRzJik7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
T3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJik7CitS
ZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0IE9wdXNDb29raWVDb250
ZW50cyYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KaW5kZXggN2Uw
YWZiMjkwZGQ4NWE3N2Y5YmVmZmY0OTQ3YTQ3Yjc1MzVlYjJmNC4uNjYwOWY0YWViNjdhMmRmNjQx
ZjA3MmU1ODE2MGY5YWY1ZDM2ZGY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
bW0KQEAgLTMwLDEyICszMCwxMyBAQAogCiAjaW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlLmgiCiAjaW1w
b3J0ICJNZWRpYVV0aWxpdGllcy5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9B
dWRpb0NvZGVjLmg+CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Db21wb25lbnQuaD4KICNp
bXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0Zvcm1hdC5oPgotI2ltcG9ydCA8Q29yZU1lZGlhL0NN
Rm9ybWF0RGVzY3JpcHRpb24uaD4KICNpbXBvcnQgPGRsZmNuLmg+CiAjaW1wb3J0IDx3dGYvRmxp
cEJ5dGVzLmg+CiAjaW1wb3J0IDx3dGYvU2Vjb25kcy5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0
aWMgYm9vbCByZWdpc3RlckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBP
U1R5cGUgZGVjb2RlclR5cGUpCiAjZW5kaWYKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE9T
VHlwZSBmb3JtYXRJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYgbWFnaWNDb29raWUpCitzdGF0aWMgUmVm
UHRyPEF1ZGlvSW5mbz4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KE9TVHlwZSBmb3JtYXRJRCwg
VmVjdG9yPHVpbnQ4X3Q+JiYgbWFnaWNDb29raWUpCiB7CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uIGFzYmQgeyB9OwogICAgIGFzYmQubUZvcm1hdElEID0gZm9ybWF0SUQ7CkBAIC04
Nyw4ICs4OCwxNiBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNy
ZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoTwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWND
b29raWUuZGF0YSgpKTsKKyAgICBhdXRvIGF1ZGlvSW5mbyA9IEF1ZGlvSW5mbzo6Y3JlYXRlKCk7
CisgICAgYXVkaW9JbmZvLT5jb2RlY05hbWUgPSBmb3JtYXRJRDsKKyAgICBhdWRpb0luZm8tPnJh
dGUgPSBhc2JkLm1TYW1wbGVSYXRlOworICAgIGF1ZGlvSW5mby0+Y2hhbm5lbHMgPSBhc2JkLm1D
aGFubmVsc1BlckZyYW1lOworICAgIGF1ZGlvSW5mby0+ZnJhbWVzUGVyUGFja2V0ID0gYXNiZC5t
RnJhbWVzUGVyUGFja2V0OworICAgIGF1ZGlvSW5mby0+Yml0RGVwdGggPSAxNjsKKyAgICBhdWRp
b0luZm8tPmNvb2tpZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKG1hZ2ljQ29v
a2llKSk7CisgICAgcmV0dXJuIGF1ZGlvSW5mbzsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShWT1JC
SVMpIHx8IEVOQUJMRShPUFVTKQogCiAjaWYgRU5BQkxFKE9QVVMpCkBAIC0yMDAsNyArMjA5LDcg
QEAgYm9vbCBwYXJzZU9wdXNQcml2YXRlRGF0YShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29u
c3Qgdm9pZCogY29kZWNQcml2YXRlRGF0YSwKIAogICAgIGF1dG8qIHByaXZhdGVEYXRhUHRyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNvZGVjUHJpdmF0ZURhdGEpOwogCi0gICAgaWYg
KGNvZGVjUHJpdmF0ZVNpemUgPCAxOSkKKyAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA8IGtPcHVz
SGVhZGVyU2l6ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDEuIE1hZ2ljIFNpZ25h
dHVyZToKQEAgLTM2Miw3ICszNzEsNyBAQCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5lZWRl
ZCgpCiAjZW5kaWYKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYgY29v
a2llQ29udGVudHMpCitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0
IE9wdXNDb29raWVDb250ZW50cyYgY29va2llQ29udGVudHMpCiB7CiAjaWYgRU5BQkxFKE9QVVMp
CiAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCkBAIC0zNzIsNyArMzgxLDcgQEAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERl
c2NyaXB0aW9uKGNvbnN0IE9wdXNDb28KICAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uRm9yRm9ybWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRhKSk7CisgICAgcmV0dXJu
IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29va2llQ29udGVudHMpOwogICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNDY1LDcgKzQ3NCw3IEBAIGJvb2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVk
ZWQoKQogI2VuZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNv
bnN0IHZvaWQqIHByaXZhdGVEYXRhKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVk
aW9JbmZvKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQog
ewogI2lmIEVOQUJMRShWT1JCSVMpCiAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUo
KSkKQEAgLTQ3NSw3ICs0ODQsNyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdgogICAgIGlmICgh
Y29va2llRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ3ZvcmInLCBXVEZNb3ZlKGNv
b2tpZURhdGEpKTsKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KCd2b3JiJywg
V1RGTW92ZShjb29raWVEYXRhKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0
YVNpemUpOwogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNh
bXBsZUdTdHJlYW1lci5oCmluZGV4IGZmOGMxYThiNDgxZDdmMzNjYzI0N2I2NGRmMWI4ZmFjNzBj
YmRkZDIuLjJiN2RkNDQ0YzUzZDJkNmJkMDdhOWI4MzhkNjc5YjY0YjM3NDlhZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCkBAIC01Nyw4ICs1Nyw2IEBAIHB1YmxpYzoKICAg
ICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cHJlc2VudGF0aW9uU2l6ZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICBib29sIGlzRGl2aXNhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVmUHRyPE1l
ZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYs
IFVzZUVuZFRpbWUpIG92ZXJyaWRlICB7IHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsgfQog
ICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBvdmVy
cmlkZTsKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwYTk0YWNm
MWExZTEzNjZmNmE1NzI1ODhiNzcwNDFlNGMzYzY0NzMyLi4zY2Y3ZWU2NTNlYzgxM2RmYmFlMzNl
ZjkzYTBjMzNmZTJjNjM5NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRl
LmNwcApAQCAtNjcsOCArNjcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYgb2Zmc2V0KSBvdmVycmlkZSB7IG1fYm94Lm9mZnNldFRpbWVzdGFtcHNCeShvZmZz
ZXQpOyB9CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0
aW9uVGltZXN0YW1wLCBjb25zdCBNZWRpYVRpbWUmIGRlY29kZVRpbWVzdGFtcCkgb3ZlcnJpZGUg
eyBtX2JveC5zZXRUaW1lc3RhbXBzKHByZXNlbnRhdGlvblRpbWVzdGFtcCwgZGVjb2RlVGltZXN0
YW1wKTsgfQotICAgIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFT
YW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSkgb3ZlcnJpZGUgeyBy
ZXR1cm4ge251bGxwdHIsIG51bGxwdHJ9OyB9CiAgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVhdGVO
b25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdW5zaWduZWQgZ2VuZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYm94LmdlbmVyYXRpb24oKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0
ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMxMzRjZTZhN2EyMTRjZGM5ZGUwNWM0
NzUzNzJlMTdjOWEzZC4uODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJjNGU3NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zNCw4ICszNCw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBN
VFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICA6
IE1lZGlhU2FtcGxlQVZGT2JqQyhudWxscHRyKQotICAgICwgbV9wcmVzZW50YXRpb25UaW1lKHNh
bXBsZS5wcmVzZW50YXRpb25UaW1lKCkpCisgICAgOiBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxl
LnByZXNlbnRhdGlvblRpbWUoKSkKICAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGlt
ZSgpKQogICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKICAgICAsIG1fYnl0ZVJh
bmdlKCpzYW1wbGUuYnl0ZVJhbmdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5o
CmluZGV4IGI2NmYzYTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLjVkYTI4ODVk
NDVkMTc4ODgzNjIyOTE3ZTVlNGFjYjk3ZjhlY2FlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBs
ZUJ5dGVSYW5nZS5oCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNh
bXBsZUFWRk9iakMgeworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6TWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1w
bGVCeXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdp
bkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKICAgICB7CkBAIC01
NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVNhbXBsZTo6VHlwZSBw
bGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpQbGF0Zm9y
bVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1w
c0J5KGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKyAgICBSZWY8TWVkaWFTYW1w
bGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgeyByZXR1cm4gKmNvbnN0X2Nhc3Q8
TWVkaWFTYW1wbGVCeXRlUmFuZ2UqPih0aGlzKTsgfQogCiBwcml2YXRlOgogICAgIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50NjRf
dCB0cmFja0lEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MDA3MzM1OTBlZjg2YjM2NjNjNDhiMWZkZjI5NmRmNjVkOWIzNzkxLi41OGQ0YTc1
MDc3YWZiYWZmMjE4NmZkMDFmMjA3MjY4MGM0ZjgzZmIwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMDUg
IEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3Mgor
ICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Nh
bXBsZU1hcC5jcHA6CisKIDIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KIAogICAgICAgICBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkgY29udmVyc2lvbiB0byBD
TVRpbWUgaW5jb3JyZWN0bHkgY3JlYXRlcyBhIHZhbGlkIHRpbWUuCkBAIC0xMyw2ICsyMyw3IEBA
CiAgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKICAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvY29jb2EvQ29yZU1lZGlhVXRpbGl0aWVzLm1tOiBBZGRlZC4KICAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9TYW1wbGVNYXAuY3BwOiBVcGRhdGUgZm9sbG93aW5nIGJhc2UgY2xhc3MgZGVmaW5p
dGlvbiBjaGFuZ2UuCiAKIDIwMjItMDItMjMgIEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxl
LmNvbT4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Nh
bXBsZU1hcC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFw
LmNwcAppbmRleCA1YTY1MzU4MzAxNWQyODhkZWY0N2JjYjQ3OTJjMjRjOGQyZjlhN2VmLi43MTIw
NThhMzY4ODg3NzZiMTc3OGU0ZGNkOWQ4YTkwYzAyMDZhZWE4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2FtcGxlTWFwLmNwcApAQCAtNjQsOCArNjQsNiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7CiAg
ICAgICAgIG1fZGVjb2RlVGltZSA9IGRlY29kZVRpbWU7CiAgICAgfTsKLSAgICBib29sIGlzRGl2
aXNhYmxlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVm
UHRyPE1lZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlh
VGltZSYsIFVzZUVuZFRpbWUpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogICAgIFJlZjxNZWRpYVNh
bXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBmaW5hbCB7CiAgICAgICAgIHJl
dHVybiBjcmVhdGUobV9wcmVzZW50YXRpb25UaW1lLCBtX2RlY29kZVRpbWUsIG1fZHVyYXRpb24s
IHN0YXRpY19jYXN0PFNhbXBsZUZsYWdzPihtX2ZsYWdzIHwgSXNOb25EaXNwbGF5aW5nKSk7CiAg
ICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453951</attachid>
            <date>2022-03-07 02:30:42 -0800</date>
            <delta_ts>2022-03-08 18:26:40 -0800</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-237472-20220307213040.patch</filename>
            <type>text/plain</type>
            <size>144009</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWY4Yzk4NzMyNzRiODNm
MTEzZmNkNmFjOWJmMGVhMWEzMWIyNzQwOC4uYzg0ZjhlOWM0OGFhMTk2NDViZTVlZDU5NDliYjBm
MzA4YWM1MTUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OSBAQAorMjAyMi0wMy0wNCAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gYW5kIGhhdmUgcGxhdGZvcm0gYWdub3N0aWMgV2ViTVBhcnNlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NDcyCisgICAg
ICAgIHJkYXI6Ly9wcm9ibGVtLzg5ODEwOTY5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgcmF3IFdlYk1QYXJzZXIgZnJvbSBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNIGFuZCBpbnRyb2R1Y2UgcGxhdGZvcm0KKyAgICAgICAgYWdub3N0aWMgTWVk
aWFTYW1wbGVzQmxvY2sgb2JqZWN0cyBhbmQgVHJhY2tJbmZvCisKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9NZWRpYVNh
bXBsZS5oOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1wbGU6OmR1bXAgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjppc0F1ZGlvIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNrSW5mbzo6aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja0lu
Zm86OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tJbmZvOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrSW5mbzo6b3BlcmF0b3IhPSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFja0luZm86OlRyYWNrSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpWaWRlb0luZm86OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0luZm86OlZp
ZGVvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0luZm86OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0luZm86OkF1ZGlvSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6c2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNC
bG9jazo6aW5mbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6
aXNWaWRlbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6aXNB
dWRpbyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6YXBwZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVNhbXBsZXNCbG9jazo6dGFrZVNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6Om9wZXJhdG9yW10gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTYW1w
bGVzQmxvY2s6OmZpcnN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Js
b2NrOjpsYXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU2FtcGxlc0Jsb2NrOjpi
ZWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNhbXBsZXNCbG9jazo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2Ev
QXVkaW9GaWxlUmVhZGVyQ29jb2EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpkZW11eFdlYk1EYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFT
YW1wbGVBVkZPYmpDLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRp
bGl0aWVzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0NNVXRpbGl0aWVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01Db2xv
clByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21UcmFja0luZm8pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6c2VnbWVudFJlYWRFcnJvclRvV2VibVN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6On5XZWJNUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OnJl
c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cmVzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBh
cnNlcjo6c2V0TG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OmludmFsaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50QmVnaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYk1QYXJzZXI6Ok9uRWJtbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
blNlZ21lbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPbkluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6T25DbHVzdGVyQmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViTVBhcnNlcjo6T25UcmFja0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
Yk1QYXJzZXI6Ok9uQmxvY2tCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpP
bkJsb2NrRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uU2ltcGxlQmxvY2tC
ZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEJlZ2luKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6Ok9uQmxvY2tHcm91cEVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJNUGFyc2VyOjpPbkZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6
OlRyYWNrRGF0YTo6Y29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VHJhY2tEYXRhOjpyZWFkRnJhbWVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZy
YW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OkF1ZGlv
VHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYk1QYXJzZXI6OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYk1QYXJzZXI6OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1dlYk1Gb3JtYXRSZWFk
ZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
aXNDb250ZW50VHlwZVN1cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6cHJvdmlk
ZU1lZGlhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpw
YXJzZWRJbml0aWFsaXphdGlvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cGFyc2VkTWVkaWFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJldHVyblNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6cGFyc2VkVHJpbW1pbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25E
YXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdNZWRpYURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZvclRyYWNr
SUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJv
dmlkZU1lZGlhZGF0YUZvclRyYWNrSUQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYk1QYXJzZXI6OkNhbGxiYWNrOjpwYXJzZWRUcmltbWluZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNhbkRlY3J5cHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6Q2FsbGJhY2s6OmNvbnRlbnRLZXlSZXF1ZXN0SW5p
dGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2Vy
Ojpsb2dnZXJQdHIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6bG9nSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OlRyYWNr
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OnRyYWNrVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmZvcm1h
dERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1QYXJzZXI6OlRyYWNr
RGF0YTo6c2V0Rm9ybWF0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpwYXJzZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNl
cjo6VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYk1Q
YXJzZXI6OlRyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmRyYWluUGVuZGluZ1NhbXBsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpWaWRlb1RyYWNrRGF0YTo6VmlkZW9UcmFja0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViTVBhcnNlcjo6QXVkaW9UcmFja0RhdGE6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJNUGFyc2VyOjpBdWRpb1RyYWNrRGF0YTo6QXVkaW9UcmFj
a0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHlwZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjphcHBlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6bG9nZ2VyUHRyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmxvZ0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoaXNUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5mb0Zyb21WUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVWaWRlb0lu
Zm9Gcm9tVlA5SGVhZGVyUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVZpZGVvSW5m
b0Zyb21WUDhIZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRp
b0luZm9Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VPcHVzUHJpdmF0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvSW5mbyk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVWb3JiaXNBdWRpb0luZm8pOgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZl
bmFyZCAgPGp5YUBhcHBsZS5jb20+CiAKICAgICAgICAgTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
IGNvbnZlcnNpb24gdG8gQ01UaW1lIGluY29ycmVjdGx5IGNyZWF0ZXMgYSB2YWxpZCB0aW1lLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L1BBTC9DaGFuZ2VMb2cKaW5kZXggOTkxOTdlMjQ1YjBhYzg4MDU1Y2Y0OWI3N2U5YTBkYTU4NDdk
NDZlZC4uNzM4M2ZlZTAxYTMxODc5ZmZiNDYxMWRiOTQ5OTY2MTNhNDc4OWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjItMDMtMDQgIEplYW4tWXZlcyBBdmVuYXJk
ICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
IGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3MgorICAgICAgICByZGFyOi8vcHJv
YmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmNwcDoKKyAgICAgICAgKiBwYWwvY2Yv
Q29yZU1lZGlhU29mdExpbmsuaDogTWV0aG9kIENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgd2Fz
bid0IHNvZnQtbGlua2VkLgorCiAyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNzQ3MwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCAwZWM1Y2MyOTA0YWY0N2YzODc3NmZjMTJhYTE3YWYxOWI5
NzM0Zjk2Li4zODVhZmY2NjYyYjBkYmJiMjI5MDBiNzQ5NzA4ZTA0OWYyZDQwNWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAzLTA0ICBKZWFuLVl2ZXMgQXZlbmFyZCAgPGp5YUBh
cHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSBhbmQgaGF2
ZSBwbGF0Zm9ybSBhZ25vc3RpYyBXZWJNUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzc0NzIKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODk4
MTA5NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpNZWRpYVNhbXBsZUJ5dGVSYW5nZTo6TWVkaWFTYW1wbGVCeXRlUmFu
Z2UpOgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVC
eXRlUmFuZ2UuaDogTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorICAgICAgICBkaWRuJ3QgbmVlZCB0
byBpbmhlcml0IGZyb20gTWVkaWFTYW1wbGVBVkZPYmpDLiAKKwogMjAyMi0wMy0wNCAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTGliV2ViUlRDQ29kZWNzOjpz
ZXRFbmNvZGVSYXRlcyBzaG91bGQgc2VuZCBMaWJXZWJSVENDb2RlY3NQcm94eTo6U2V0RW5jb2Rl
UmF0ZXMgb25seSB3aGVuIHRoZSBlbmNvZGVyIGlzIGxpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5jcHAKaW5kZXggODdiNTYyMDdlODRkZjNmNDk5
OWIzNmY1NWYyZGY2ZjhjOTlkNTc2Yi4uZDc0YjhkNWI2YzMzODVmM2Q4M2M5M2RmMjMxMGY3Y2Rh
MmIyNjUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0
TGluay5jcHAKQEAgLTE2OSw2ICsxNjksNyBAQCBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJD
RV9XSVRIX0VYUE9SVChQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVJlbW92ZVRpbWVyRAogU09G
VF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQoUEFMLCBDb3JlTWVkaWEsIENN
VGltZWJhc2VTZXRUaW1lckRpc3BhdGNoU291cmNlTmV4dEZpcmVUaW1lLCBPU1N0YXR1cywgKENN
VGltZWJhc2VSZWYgdGltZWJhc2UsIGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlLCBDTVRp
bWUgZmlyZVRpbWUsIHVpbnQzMl90IGZsYWdzKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSwgZmly
ZVRpbWUsIGZsYWdzKSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNF
X1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNv
dXJjZVRvRmlyZUltbWVkaWF0ZWx5LCBPU1N0YXR1cywgKENNVGltZWJhc2VSZWYgdGltZWJhc2Us
IGRpc3BhdGNoX3NvdXJjZV90IHRpbWVyU291cmNlKSwgKHRpbWViYXNlLCB0aW1lclNvdXJjZSks
IFBBTF9FWFBPUlQpCiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX1NPVVJDRV9XSVRIX0VYUE9SVChQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
LCBQQUxfRVhQT1JUKQorU09GVF9MSU5LX0ZVTkNUSU9OX0ZPUl9TT1VSQ0VfV0lUSF9FWFBPUlQo
UEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZSwgT1NTdGF0dXMs
IChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENNVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBp
bnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCwgQ0ZEaWN0aW9uYXJ5UmVmIGV4dGVuc2lvbnMs
IENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogZm9ybWF0RGVzY3JpcHRpb25PdXQpLCAoYWxs
b2NhdG9yLCBjb2RlY1R5cGUsIHdpZHRoLCBoZWlnaHQsIGV4dGVuc2lvbnMsIGZvcm1hdERlc2Ny
aXB0aW9uT3V0KSwgUEFMX0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJ
VEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVG
b3JJbWFnZUJ1ZmZlciwgT1NTdGF0dXMsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENWSW1h
Z2VCdWZmZXJSZWYgaW1hZ2VCdWZmZXIsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiogb3V0
RGVzYyksIChhbGxvY2F0b3IsIGltYWdlQnVmZmVyLCBvdXREZXNjKSwgUEFMX0VYUE9SVCkKIFNP
RlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwgQ29yZU1lZGlhLCBD
TVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywg
KENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSwgUEFM
X0VYUE9SVCkKIFNPRlRfTElOS19GVU5DVElPTl9GT1JfU09VUkNFX1dJVEhfRVhQT1JUKFBBTCwg
Q29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNp
b25zLCBDR1NpemUsIChDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYgdmlkZW9EZXNjLCBCb29s
ZWFuIHVzZVBpeGVsQXNwZWN0UmF0aW8sIEJvb2xlYW4gdXNlQ2xlYW5BcGVydHVyZSksICh2aWRl
b0Rlc2MsIHVzZVBpeGVsQXNwZWN0UmF0aW8sIHVzZUNsZWFuQXBlcnR1cmUpLCBQQUxfRVhQT1JU
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oCmluZGV4
IDU3MGE2YTk4NTNjNDQ4MTY4Yjk5MDIyMDQyMzAwOTZkZmU4ZmViMDEuLjMzY2ExYjI2ZjNkMzdl
NTkyNWEyNWI2YWNmYmQxNThhNDMyZTdhYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmgKQEAgLTI2Myw2ICsyNjMsOCBAQCBTT0ZUX0xJTktfRlVO
Q1RJT05fRk9SX0hFQURFUihQQUwsIENvcmVNZWRpYSwgQ01UaW1lYmFzZVNldFRpbWVyRGlzcGF0
Y2hTb3VyY2VUbwogI2RlZmluZSBDTVRpbWViYXNlU2V0VGltZXJEaXNwYXRjaFNvdXJjZVRvRmly
ZUltbWVkaWF0ZWx5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRpbWViYXNlU2V0VGltZXJEaXNwYXRj
aFNvdXJjZVRvRmlyZUltbWVkaWF0ZWx5CiBTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQ
QUwsIENvcmVNZWRpYSwgQ01UaW1lQ29weUFzRGljdGlvbmFyeSwgQ0ZEaWN0aW9uYXJ5UmVmLCAo
Q01UaW1lIHRpbWUsIENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciksICh0aW1lLCBhbGxvY2F0b3Ip
KQogI2RlZmluZSBDTVRpbWVDb3B5QXNEaWN0aW9uYXJ5IHNvZnRMaW5rX0NvcmVNZWRpYV9DTVRp
bWVDb3B5QXNEaWN0aW9uYXJ5CitTT0ZUX0xJTktfRlVOQ1RJT05fRk9SX0hFQURFUihQQUwsIENv
cmVNZWRpYSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlLCBPU1N0YXR1cywgKENGQWxs
b2NhdG9yUmVmIGFsbG9jYXRvciwgQ01WaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGludDMyX3Qg
d2lkdGgsIGludDMyX3QgaGVpZ2h0LCBDRkRpY3Rpb25hcnlSZWYgZXh0ZW5zaW9ucywgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBmb3JtYXREZXNjcmlwdGlvbk91dCksIChhbGxvY2F0b3Is
IGNvZGVjVHlwZSwgd2lkdGgsIGhlaWdodCwgZXh0ZW5zaW9ucywgZm9ybWF0RGVzY3JpcHRpb25P
dXQpKQorI2RlZmluZSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUgc29mdExpbmtfQ29y
ZU1lZGlhX0NNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZQogU09GVF9MSU5LX0ZVTkNUSU9O
X0ZPUl9IRUFERVIoUEFMLCBDb3JlTWVkaWEsIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0
ZUZvckltYWdlQnVmZmVyLCBPU1N0YXR1cywgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ1ZJ
bWFnZUJ1ZmZlclJlZiBpbWFnZUJ1ZmZlciwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmKiBv
dXREZXNjKSwgKGFsbG9jYXRvciwgaW1hZ2VCdWZmZXIsIG91dERlc2MpKQogI2RlZmluZSBDTVZp
ZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGVGb3JJbWFnZUJ1ZmZlciBzb2Z0TGlua19Db3JlTWVk
aWFfQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlRm9ySW1hZ2VCdWZmZXIKIFNPRlRfTElO
S19GVU5DVElPTl9GT1JfSEVBREVSKFBBTCwgQ29yZU1lZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3Jp
cHRpb25HZXREaW1lbnNpb25zLCBDTVZpZGVvRGltZW5zaW9ucywgKENNVmlkZW9Gb3JtYXREZXNj
cmlwdGlvblJlZiB2aWRlb0Rlc2MpLCAodmlkZW9EZXNjKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKaW5kZXggOThiMDM1NzkxYTZlYmIwZDlmMTU3MWE1N2E0MmVjZDVmMTU1Y2ZiOS4uNWRlZTc1
NDA1MzU3OWY1NWI1NWYyZmU0YWQwZGQwYTY5ZGViZmQ0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKQEAgLTMxMiw2ICszMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvQ01VdGlsaXRpZXMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9h
dFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EuY3Bw
CkBAIC02NDksNiArNjUwLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaAogCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Nv
bG9yQ29jb2EuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGFhNDRmNWY1MzE2N2I5YmMwZjE0
MjNmMjdiZmMyNGQ3MTdlYmFjZmEuLmY5ZTBhYmFmNGI5MjJiODkzNzJmOWJhOTcyNTQwOWZiYzdi
N2Y4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzgxLDYgKzM4MSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
VVRJUmVnaXN0cnkuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9BdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbSBAbm8tdW5p
ZnkKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FjaGVDb3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhYTIyN2Q1OThlNDI5ZDg1NWJiM2RlZWRhOWIxZDQ3Mjgw
ZDYyNDNiLi4xODE5NzQ0OWVlZDY0OTM3OWZmMWY0MjcxNjhkYWI1ZGY4N2Q5ZmQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NTc5LDYgKzE1NzksOCBAQAogCQk1MTRDNzY3QjBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NjYwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlSGFuZGxlSW50ZXJuYWwu
aCAqLzsgfTsKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3
NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0YwQ0U5MjNBMTAw
N0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3Vy
Y2VSZXNwb25zZUJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk1MTUwQjVERDI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNTBCNURDMjdDREYy
RTAwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNTBCNURGMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxp
dGllcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLzsgfTsKIAkJNTE1MUYw
N0UyNjE1NDM1QTAwRkRCMkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1MUYwN0IyNjE1MzYzRjAwRkRC
MkI0IC8qIE1lZGlhVW5pcXVlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0
eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVy
LmggKi87IH07CiAJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThC
MUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTc3Nyw2ICs5Nzc5LDggQEAKIAkJNTE0
Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRD
NzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1MEI1REMyN0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0
aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENNVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNTBCNURFMjdDREY0OTkwMDRGQzgxRSAvKiBDTVV0aWxpdGllcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IENNVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MTUxRjA3QjI2MTUzNjNGMDBGREIyQjQgLyogTWVkaWFVbmlxdWVJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhVW5pcXVlSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVCRTE4ODFENTRGNUY2MDBERDdD
NjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRW1wdHlHYW1lcGFkUHJvdmlk
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5Mjg5LDYgKzI5MjkzLDggQEAK
IAkJCQk3QkNENDJEQzI3MDVDOTQ5MDBFQjIxMjcgLyogQU5HTEVVdGlsaXRpZXNDb2NvYS5oICov
LAogCQkJCUNERjk5NTAxMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0ZVdlYk0u
Y3BwICovLAogCQkJCUNERjk5NTAwMjRDMjgxNDkwMDJFQTA2MiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZVdlYk0uaCAqLywKKwkJCQk1MTUwQjVEQzI3Q0RGMkUwMDA0RkM4MUUgLyogQ01VdGlsaXRpZXMu
aCAqLywKKwkJCQk1MTUwQjVERTI3Q0RGNDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gKi8s
CiAJCQkJRjQ4RDJBQTMyMTU5NzQwRDAwQzY3NTJCIC8qIENvbG9yQ29jb2EuaCAqLywKIAkJCQlG
NDhEMkFBNDIxNTk3NDBEMDBDNjc1MkIgLyogQ29sb3JDb2NvYS5tbSAqLywKIAkJCQlCMjc1MzU0
QzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q29jb2EubW0gKi8sCkBAIC0zMzg5Nyw2ICsz
MzkwMyw3IEBACiAJCQkJRjREMDc1NTkyMzREODIzMzAwODgxRTczIC8qIENsaXBib2FyZEl0ZW1Q
YXN0ZWJvYXJkRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTgwMzcxNjIxQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQxMzE0RkEw
OUQ1MDA3NDU3QUUgLyogQ2xvc2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1MEI1REQy
N0NERjJFMDAwNEZDODFFIC8qIENNVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMw
NTRDQjExMThDOEU0MDBDRTI2MzYgLyogQ29kZUdlbmVyYXRvci5wbSBpbiBIZWFkZXJzICovLAog
CQkJCUJDNUVCNURGMEU4MUI5QUIwMEIyNTk2NSAvKiBDb2xsYXBzZWRCb3JkZXJWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxlY3Rpb25J
bmRleENhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTM4ODA0LDYgKzM4ODExLDcgQEAKIAkJCQlD
REY0QjcxNTFFMDBCN0U1MDBFMjM1QTIgLyogQ0RNLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNE
QjcwNDVCMUY3NDY1QTEwMDM5MjNERiAvKiBDRE1GYWlyUGxheVN0cmVhbWluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDREMyMjQyODFGNzU2OTY2MDA1RjA3N0IgLyogQ0RNSW5zdGFuY2VGYWly
UGxheVN0cmVhbWluZ0FWRk9iakMubW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTUwQjVERjI3Q0RG
NDk5MDA0RkM4MUUgLyogQ01VdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQwOTBG
QjFBQTUxRTFEMDA5MTE5MUEgLyogQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQk0NkM2OTZDQzFFNzIwNUZDMDA1OTc5MzcgLyogQ1BVTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUJBNzZDQTExRDIwRTUwMDA0QzIwMUMgLyogQ1NT
UHJvcGVydHlOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZWRp
YVNhbXBsZS5oCmluZGV4IDBhNmYyOGEyMDEzMTM1NTM1OGI2ZTdmOWNkYzEyNmE0ZDVjMGU2YWMu
LmExMjgyNzNhNTc2ZjgzYmZhZTE3YjU3MjgwODE1MjRmNmRiYTUyMzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lZGlhU2FtcGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vTWVkaWFTYW1wbGUuaApAQCAtMjYsNiArMjYsOSBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb3VyQ0MuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVZpZGVvQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8d3RmL0VudW1U
cmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+CkBAIC00MCw4ICs0MywxMCBAQCB0
eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZvcm1hdERl
c2NyaXB0aW9uUmVmOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZyYWdtZW50ZWRT
aGFyZWRCdWZmZXI7CiBjbGFzcyBNb2NrU2FtcGxlQm94OwogY2xhc3MgUHJvY2Vzc0lkZW50aXR5
OworY2xhc3MgU2hhcmVkQnVmZmVyOwogCiBzdHJ1Y3QgUGxhdGZvcm1TYW1wbGUgewogICAgIGVu
dW0gVHlwZSB7CkBAIC03MiwxMyArNzcsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRT
aXplIHByZXNlbnRhdGlvblNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG9mZnNl
dFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJikgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNEaXZpc2FibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfTsKICAgICBlbnVtIERpdmlkZUZs
YWdzIHsgQmVmb3JlUHJlc2VudGF0aW9uVGltZSwgQWZ0ZXJQcmVzZW50YXRpb25UaW1lIH07CiAg
ICAgZW51bSBjbGFzcyBVc2VFbmRUaW1lIDogYm9vbCB7CiAgICAgICAgIERvTm90VXNlLAogICAg
ICAgICBVc2UsCiAgICAgfTsKLSAgICB2aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpID0gMDsKKyAgICB2
aXJ0dWFsIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+
PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSA9IFVzZUVuZFRpbWU6OkRvTm90
VXNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB9CiAgICAgdmlydHVhbCBSZWY8TWVkaWFTYW1w
bGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gZ2V0UkdCQUltYWdlRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KQEAgLTExOSw3ICsxMjgsMTEgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgSGFzQWxwaGE7IH0KICAgICBib29s
IGhhc1N5bmNJbmZvKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIEhhc1N5bmNJbmZvOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgb3V0
LnByaW50KCJ7UFRTKCIsIHByZXNlbnRhdGlvblRpbWUoKSwgIiksIERUUygiLCBkZWNvZGVUaW1l
KCksICIpLCBkdXJhdGlvbigiLCBkdXJhdGlvbigpLCAiKSwgZmxhZ3MoIiwgKGludClmbGFncygp
LCAiKSwgcHJlc2VudGF0aW9uU2l6ZSgiLCBwcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgIngi
LCBwcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksICIpfSIpOworICAgIH0KKwogICAgIFN0cmlu
ZyB0b0pTT05TdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgYXV0byBvYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwpAQCAtMTM0LDggKzE0NywxMjggQEAgcHVibGljOgogICAgIH0K
IH07CiAKK3N0cnVjdCBBdWRpb0luZm87CitzdHJ1Y3QgVmlkZW9JbmZvOworCitzdHJ1Y3QgVHJh
Y2tJbmZvIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFRyYWNrSW5mbz4geworICAgIGVu
dW0gY2xhc3MgVHJhY2tUeXBlIHsgVW5rbm93biwgQXVkaW8sIFZpZGVvIH07CisKKyAgICBib29s
IGlzQXVkaW8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHJhY2tUeXBlOjpBdWRpbzsgfQor
ICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUcmFja1R5cGU6OlZp
ZGVvOyB9CisKKyAgICBUcmFja1R5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYWNrSW5mbyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSB8fCBjb2RlY05hbWUgIT0gb3Ro
ZXIuY29kZWNOYW1lIHx8IHRyYWNrSUQgIT0gb3RoZXIudHJhY2tJRCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGVxdWFsVG8ob3RoZXIpOworICAgIH0KKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVHJhY2tJbmZvJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIEZvdXJDQyBjb2RlY05hbWU7CisgICAgdWludDY0X3Qg
dHJhY2tJRCB7IDAgfTsKKworICAgIHZpcnR1YWwgflRyYWNrSW5mbygpID0gZGVmYXVsdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3Ro
ZXIpIGNvbnN0ID0gMDsKKyAgICBUcmFja0luZm8oVHJhY2tUeXBlIHR5cGUpCisgICAgICAgIDog
bV90eXBlKHR5cGUpIHsgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFRyYWNrVHlwZSBtX3R5cGUg
eyBUcmFja1R5cGU6OlVua25vd24gfTsKK307CisKK3N0cnVjdCBWaWRlb0luZm8gOiBwdWJsaWMg
VHJhY2tJbmZvIHsKKyAgICBzdGF0aWMgUmVmPFZpZGVvSW5mbz4gY3JlYXRlKCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBWaWRlb0luZm8oKSk7IH0KKworICAgIEZsb2F0U2l6ZSBzaXplOworICAg
IC8vIFNpemUgaW4gcGl4ZWxzIGF0IHdoaWNoIHRoZSB2aWRlbyBpcyByZW5kZXJlZC4gVGhpcyBp
cyBhZnRlciBpdCBoYXMKKyAgICAvLyBiZWVuIHNjYWxlZCBieSBpdHMgYXNwZWN0IHJhdGlvLgor
ICAgIEZsb2F0U2l6ZSBkaXNwbGF5U2l6ZTsKKyAgICB1aW50OF90IGJpdERlcHRoIHsgOCB9Owor
ICAgIFBsYXRmb3JtVmlkZW9Db2xvclNwYWNlIGNvbG9yU3BhY2U7CisgICAgTWVkaWFTYW1wbGU6
OlZpZGVvUm90YXRpb24gcm90YXRpb24geyBNZWRpYVNhbXBsZTo6VmlkZW9Sb3RhdGlvbjo6Tm9u
ZSB9OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXRvbURhdGE7CisKK3ByaXZhdGU6Cisg
ICAgVmlkZW9JbmZvKCkKKyAgICAgICAgOiBUcmFja0luZm8oVHJhY2tUeXBlOjpWaWRlbykgeyB9
CisgICAgYm9vbCBlcXVhbFRvKGNvbnN0IFRyYWNrSW5mbyYgb3RoZXJWaWRlb0luZm8pIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICBhdXRvJiBvdGhlciA9IGRvd25jYXN0PGNvbnN0IFZpZGVv
SW5mbz4ob3RoZXJWaWRlb0luZm8pOworICAgICAgICByZXR1cm4gc2l6ZSA9PSBvdGhlci5zaXpl
ICYmIGRpc3BsYXlTaXplID09IG90aGVyLmRpc3BsYXlTaXplICYmIGJpdERlcHRoID09IG90aGVy
LmJpdERlcHRoICYmIGNvbG9yU3BhY2UgPT0gb3RoZXIuY29sb3JTcGFjZSAmJiByb3RhdGlvbiA9
PSBvdGhlci5yb3RhdGlvbiAmJiAoKCFhdG9tRGF0YSAmJiAhb3RoZXIuYXRvbURhdGEpIHx8IChh
dG9tRGF0YSAmJiBvdGhlci5hdG9tRGF0YSAmJiAqYXRvbURhdGEgPT0gKm90aGVyLmF0b21EYXRh
KSk7CisgICAgfQorfTsKKworc3RydWN0IEF1ZGlvSW5mbyA6IHB1YmxpYyBUcmFja0luZm8gewor
ICAgIHN0YXRpYyBSZWY8QXVkaW9JbmZvPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IEF1ZGlvSW5mbygpKTsgfQorCisgICAgdWludDMyX3QgcmF0ZSB7IDAgfTsKKyAgICB1aW50MzJf
dCBjaGFubmVscyB7IDAgfTsKKyAgICB1aW50MzJfdCBmcmFtZXNQZXJQYWNrZXQgeyAwIH07Cisg
ICAgdWludDMyX3QgYml0RGVwdGggeyAxNiB9OworICAgIGludDhfdCBwcm9maWxlIHsgMCB9Owor
ICAgIGludDhfdCBleHRlbmRlZFByb2ZpbGUgeyAwIH07CisKKyAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBjb29raWVEYXRhOworCitwcml2YXRlOgorICAgIEF1ZGlvSW5mbygpCisgICAgICAgIDog
VHJhY2tJbmZvKFRyYWNrVHlwZTo6QXVkaW8pIHsgfQorICAgIGJvb2wgZXF1YWxUbyhjb25zdCBU
cmFja0luZm8mIG90aGVyQXVkaW9JbmZvKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgYXV0
byYgb3RoZXIgPSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KG90aGVyQXVkaW9JbmZvKTsKKyAg
ICAgICAgcmV0dXJuIHJhdGUgPT0gb3RoZXIucmF0ZSAmJiBjaGFubmVscyA9PSBvdGhlci5jaGFu
bmVscyAmJiBiaXREZXB0aCA9PSBvdGhlci5iaXREZXB0aCAmJiBmcmFtZXNQZXJQYWNrZXQgPT0g
b3RoZXIuZnJhbWVzUGVyUGFja2V0ICYmIHByb2ZpbGUgPT0gb3RoZXIucHJvZmlsZSAmJiBleHRl
bmRlZFByb2ZpbGUgPT0gb3RoZXIuZXh0ZW5kZWRQcm9maWxlICYmICgoIWNvb2tpZURhdGEgJiYg
IW90aGVyLmNvb2tpZURhdGEpIHx8IChjb29raWVEYXRhICYmIG90aGVyLmNvb2tpZURhdGEgJiYg
KmNvb2tpZURhdGEgPT0gKm90aGVyLmNvb2tpZURhdGEpKTsKKyAgICB9Cit9OworCitjbGFzcyBN
ZWRpYVNhbXBsZXNCbG9jayB7CitwdWJsaWM6CisgICAgc3RydWN0IE1lZGlhU2FtcGxlSXRlbSB7
CisgICAgICAgIE1lZGlhVGltZSBwcmVzZW50YXRpb25UaW1lOworICAgICAgICBNZWRpYVRpbWUg
ZGVjb2RlVGltZTsKKyAgICAgICAgTWVkaWFUaW1lIGR1cmF0aW9uOworICAgICAgICBzdGQ6OnZh
cmlhbnQ8TWVkaWFTYW1wbGU6OkJ5dGVSYW5nZSwgUmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRC
dWZmZXI+PiBkYXRhOworICAgICAgICBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3MgZmxhZ3M7Cisg
ICAgfTsKKworICAgIHZvaWQgc2V0SW5mbyhSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiYmIGluZm8p
IHsgbV9pbmZvID0gV1RGTW92ZShpbmZvKTsgfQorICAgIGNvbnN0IFRyYWNrSW5mbyogaW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1faW5mby5nZXQoKTsgfQorICAgIGJvb2wgaXNWaWRlbygpIGNvbnN0
IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzVmlkZW8oKTsgfQorICAgIGJvb2wgaXNBdWRp
bygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbyAmJiBtX2luZm8tPmlzQXVkaW8oKTsgfQorICAgIFRy
YWNrSW5mbzo6VHJhY2tUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2luZm8gPyBtX2luZm8t
PnR5cGUoKSA6IFRyYWNrSW5mbzo6VHJhY2tUeXBlOjpVbmtub3duOyB9CisgICAgdm9pZCBhcHBl
bmQoTWVkaWFTYW1wbGVJdGVtJiYgaXRlbSkgeyBtX3NhbXBsZXMuYXBwZW5kKFdURk1vdmUoaXRl
bSkpOyB9CisgICAgdm9pZCBhcHBlbmQoTWVkaWFTYW1wbGVzQmxvY2smJiBibG9jaykgeyBtX3Nh
bXBsZXMuYXBwZW5kVmVjdG9yKHN0ZDo6ZXhjaGFuZ2UoYmxvY2subV9zYW1wbGVzLCB7IH0pKTsg
fQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLnNpemUoKTsgfTsK
KyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuaXNFbXB0eSgpOyB9
CisgICAgdm9pZCBjbGVhcigpIHsgbV9zYW1wbGVzLmNsZWFyKCk7IH0KKyAgICB1c2luZyBTYW1w
bGVzVmVjdG9yID0gVmVjdG9yPE1lZGlhU2FtcGxlSXRlbT47CisgICAgU2FtcGxlc1ZlY3RvciB0
YWtlU2FtcGxlcygpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9zYW1wbGVzLCB7IH0pOyB9CisK
KyAgICBjb25zdCBNZWRpYVNhbXBsZUl0ZW0mIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZXNbaW5kZXhdOyB9CisgICAgY29uc3QgTWVkaWFTYW1wbGVJdGVt
JiBmaXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlcy5maXJzdCgpOyB9CisgICAgY29uc3Qg
TWVkaWFTYW1wbGVJdGVtJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzLmxhc3QoKTsg
fQorICAgIFNhbXBsZXNWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9zYW1wbGVzLmJlZ2luKCk7IH0KKyAgICBTYW1wbGVzVmVjdG9yOjpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZXMuZW5kKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8Y29uc3QgVHJhY2tJbmZvPiBtX2luZm87CisgICAgU2FtcGxlc1ZlY3RvciBtX3Nh
bXBsZXM7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6VmlkZW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNWaWRlbygpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6QXVkaW9JbmZvKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpUcmFja0luZm8mIGluZm8pIHsgcmV0dXJuIGluZm8uaXNBdWRpbygpOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6Ok1lZGlhU2FtcGxlOjpWaWRlb1JvdGF0aW9uPiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9WaWRlb0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCmluZGV4IGE1NDljMWE1YzQ4ZWIy
M2Q2NGJhM2ZkMzUzODQwOGJkMTU1MjM0ZjAuLmEyMjE4YzVkZDc0MWZmYzQ2ODg1NzcxZWRkNTE5
NGJjMzEyYTdmZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuY3BwCkBAIC05
OCwxOCArOTgsNiBAQCB2b2lkIFZpZGVvRnJhbWU6OnNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgTWVkaWFUaW1lJikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAot
Ym9vbCBWaWRlb0ZyYW1lOjppc0RpdmlzYWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGQ6OnBhaXI8UmVmUHRyPFdlYkNv
cmU6Ok1lZGlhU2FtcGxlPiwgUmVmUHRyPFdlYkNvcmU6Ok1lZGlhU2FtcGxlPj4gVmlkZW9GcmFt
ZTo6ZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYsIFVzZUVuZFRpbWUpCi17Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgbnVsbHB0ciwgbnVsbHB0ciB9OwotfQotCiBSZWY8
V2ViQ29yZTo6TWVkaWFTYW1wbGU+IFZpZGVvRnJhbWU6OmNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5
KCkgY29uc3QKIHsKICAgICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVmlkZW9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVmlkZW9GcmFtZS5o
CmluZGV4IDY0MTFkZjdkNjQwY2NkZWQxZDFlM2UxMWZkMWE0MjhhMjkxYjMxZWQuLjIyODVlOGFj
N2JmMDIxNDJmOTJhOTFmNzgwZTc1OTEwMjQyYWE2YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1ZpZGVvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9W
aWRlb0ZyYW1lLmgKQEAgLTcyLDggKzcyLDYgQEAgcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9S
VCBzaXplX3Qgc2l6ZUluQnl0ZXMoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIG9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRpbWVzdGFtcHMoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVk
aWFUaW1lJikgZmluYWw7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0RpdmlzYWJsZSgpIGNv
bnN0IGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1w
bGU+LCBSZWZQdHI8TWVkaWFTYW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50
YXRpb25UaW1lLCBVc2VFbmRUaW1lID0gVXNlRW5kVGltZTo6RG9Ob3RVc2UpIGZpbmFsOwogICAg
IFdFQkNPUkVfRVhQT1JUIFJlZjxXZWJDb3JlOjpNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxh
eWluZ0NvcHkoKSBjb25zdCBmaW5hbDsKICAgICBXRUJDT1JFX0VYUE9SVCBTYW1wbGVGbGFncyBm
bGFncygpIGNvbnN0IGZpbmFsOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0ZDo6b3B0aW9uYWw8Qnl0
ZVJhbmdlPiBieXRlUmFuZ2UoKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmNwcApp
bmRleCBiNzAzY2ZlY2QzMTZjNjI3YzY5NGU2NGI4ZTY5NzYyMDY4NjdmN2FiLi5iZDg3ZTQ2OGY4
ZjBkZmYwYjM0YzY4YTVmNDliNDZlM2RiMDBjNTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuY3Bw
CkBAIC0yMTksNyArMjE5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRmlsZVJlYWRlcldlYk1E
YXRhPiBBdWRpb0ZpbGVSZWFkZXI6OmRlbXV4V2ViTURhdGEoY29uc3QgdWkKICAgICBwYXJzZXIt
PmFwcGVuZERhdGEoV1RGTW92ZShzZWdtZW50KSk7CiAgICAgaWYgKCF0cmFjaykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcGFyc2VyLT5mbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsK
KyAgICBwYXJzZXItPmZsdXNoUGVuZGluZ0F1ZGlvU2FtcGxlcygpOwogICAgIHJldHVybiBtYWtl
VW5pcXVlPEF1ZGlvRmlsZVJlYWRlcldlYk1EYXRhPihBdWRpb0ZpbGVSZWFkZXJXZWJNRGF0YSB7
IFdURk1vdmUoYnVmZmVyKSwgdHJhY2sucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShkdXJhdGlv
biksIFdURk1vdmUoc2FtcGxlcykgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgK
aW5kZXggMDg0NGIxZThkY2FjZmNhNjA2ZDAxYWZkYzljNmY3MjBlMzM5NDQ1Yy4uYWZjMzEyNTRl
YjU0ZmFkZjNmMTIxOTk2NWU4MjVlZDMyNjNkNGJiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFy
aWVzLmgKQEAgLTMzLDYgKzMzLDE1IEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb0NvbG9yUHJp
bWFyaWVzIDogdWludDhfdCB7CiAgICAgQnQ3MDksCiAgICAgQnQ0NzBiZywKICAgICBTbXB0ZTE3
MG0sCisgICAgQnQ0NzBtLAorICAgIFNtcHRlMjQwbSwKKyAgICBGaWxtLAorICAgIEJ0MjAyMCwK
KyAgICBTbXB0ZVN0NDI4MSwKKyAgICBTbXB0ZVJwNDMxLAorICAgIFNtcHRlRWc0MzIsCisgICAg
SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgVW5zcGVjaWZpZWQsCiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkBAIC00NCw3ICs1MywxNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllcz4gewogICAgICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMsCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3Jt
VmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDksCiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0KKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTE3MG0sCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlMjQwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRl
b0NvbG9yUHJpbWFyaWVzOjpGaWxtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvQ29s
b3JQcmltYXJpZXM6OkJ0MjAyMCwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpTbXB0ZVN0NDI4MSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb0Nv
bG9yUHJpbWFyaWVzOjpTbXB0ZVJwNDMxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVv
Q29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzIsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6SmVkZWNQMjJQaG9zcGhvcnMsCisgICAgICAgIFdlYkNvcmU6OlBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQKICAgICA+OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb01h
dHJpeENvZWZmaWNpZW50cy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cy5oCmluZGV4IGU5MDczNWM4OGQ3ZmU1MWYzNzc1
NWJkOGMwNzQ0ZmE2YjUzYzZmZTkuLjM5MWFkZWNhZDIyY2E2ZDkxMWViMDA4Yjc1NmM4ZGVhNzc0
ZjIyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzLmgKQEAgLTM0LDYgKzM0
LDEyIEBAIGVudW0gY2xhc3MgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyA6IHVpbnQ4
X3QgewogICAgIEJ0NzA5LAogICAgIEJ0NDcwYmcsCiAgICAgU21wdGUxNzBtLAorICAgIFNtcHRl
MjQwbSwKKyAgICBGY2MsCisgICAgWUNnQ28sCisgICAgQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2UsCisgICAgVW5zcGVjaWZpZWQsCiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkBAIC00Niw3ICs1MiwxMyBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM+
IHsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6Umdi
LAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDcw
OSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ0
NzBiZywKLSAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6
U21wdGUxNzBtCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVu
dHM6OlNtcHRlMTcwbSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZm
aWNpZW50czo6U21wdGUyNDBtLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpGY2MsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhD
b2VmZmljaWVudHM6OllDZ0NvLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvTWF0cml4
Q29lZmZpY2llbnRzOjpCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZSwKKyAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFu
Y2UsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlVu
c3BlY2lmaWVkCiAgICAgPjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzLmgKaW5kZXggY2M3ZjFlYTIxNGU0YTlhYjVlYzFlNjJhYjI0NDYyODhhODQwZDRl
Yi4uYmIxODNjMDMwNjMwMWIzNzA3OGZkY2Q1NDAyM2ZmZTc0M2JjMmFiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLmgKQEAgLTMzLDYgKzMzLDIwIEBAIGVu
dW0gY2xhc3MgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzIDogdWludDhfdCB7
CiAgICAgQnQ3MDksCiAgICAgU21wdGUxNzBtLAogICAgIEllYzYxOTY2MjEsCisgICAgR2FtbWEy
MmN1cnZlLAorICAgIEdhbW1hMjhjdXJ2ZSwKKyAgICBTbXB0ZTI0MG0sCisgICAgTGluZWFyLAor
ICAgIExvZywKKyAgICBMb2dTcXJ0LAorICAgIEllYzYxOTY2MjQsCisgICAgQnQxMzYxRXh0ZW5k
ZWRDb2xvdXJHYW11dCwKKyAgICBCdDIwMjBfMTBiaXQsCisgICAgQnQyMDIwXzEyYml0LAorICAg
IFNtcHRlU3QyMDg0LAorICAgIFNtcHRlU3Q0MjgxLAorICAgIEFyaWJTdGRCNjdIbGcsCisgICAg
VW5zcGVjaWZpZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKQEAgLTQ0LDcgKzU4LDIx
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzPiB7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcywKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1Ry
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDcwOSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTE3MG0sCi0gICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYyMQorICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkllYzYxOTY2
MjEsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6R2FtbWEyMmN1cnZlLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkdhbW1hMjhjdXJ2ZSwKKyAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1W
aWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTbXB0ZTI0MG0sCisgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyLAorICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dTcXJ0
LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkllYzYxOTY2MjQsCisgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dCwKKyAgICAgICAgV2ViQ29yZTo6
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQsCisgICAg
ICAgIFdlYkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIw
XzEyYml0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlU3QyMDg0LAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxLAorICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGcsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQK
ICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMu
aAppbmRleCA2Y2NmZmIwZDZhOTJlZjA2YWU3NmY4OGEwYjI4NTY5NzVkYTNiMmY3Li4wMjVkMGQz
NDRmM2FlYTQyOGE2ZWQ4NzY4Njg4Y2NhYmZkMzdhMzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9i
akMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVNhbXBsZUFWRk9iakMuaApAQCAtNjUsNyArNjUsNiBAQCBwdWJsaWM6CiAgICAg
UGxhdGZvcm1TYW1wbGUgcGxhdGZvcm1TYW1wbGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBQbGF0
Zm9ybVNhbXBsZTo6VHlwZSBwbGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBQbGF0Zm9ybVNhbXBsZTo6Q01TYW1wbGVCdWZmZXJUeXBlOyB9CiAgICAgc3RkOjpvcHRp
b25hbDxCeXRlUmFuZ2U+IGJ5dGVSYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
b2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
c2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzRGl2aXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNhbXBsZUFWRk9iakMubW0KaW5kZXggZTgz
OGVjZTMxN2U5MDQ0YmJhYzllYzc3MGI4OTFmYzlhZDMxY2RmMC4uOWNhZDg5ZDFjNzZjOWNjMTE4
YjQ3MTIyYTU2Y2JkNTdhMTMxMmQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTYW1wbGVBVkZPYmpDLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
U2FtcGxlQVZGT2JqQy5tbQpAQCAtMjQ1LDExICsyNDUsNiBAQCBGbG9hdFNpemUgTWVkaWFTYW1w
bGVBVkZPYmpDOjpwcmVzZW50YXRpb25TaXplKCkgY29uc3QKICAgICByZXR1cm4gRmxvYXRTaXpl
KFBBTDo6Q01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucyhm
b3JtYXREZXNjcmlwdGlvbiwgdHJ1ZSwgdHJ1ZSkpOwogfQogCi12b2lkIE1lZGlhU2FtcGxlQVZG
T2JqQzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgie1BU
UygiLCBwcmVzZW50YXRpb25UaW1lKCksICIpLCBEVFMoIiwgZGVjb2RlVGltZSgpLCAiKSwgZHVy
YXRpb24oIiwgZHVyYXRpb24oKSwgIiksIGZsYWdzKCIsIChpbnQpZmxhZ3MoKSwgIiksIHByZXNl
bnRhdGlvblNpemUoIiwgcHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksICJ4IiwgcHJlc2VudGF0
aW9uU2l6ZSgpLmhlaWdodCgpLCAiKX0iKTsKLX0KLQogdm9pZCBNZWRpYVNhbXBsZUFWRk9iakM6
Om9mZnNldFRpbWVzdGFtcHNCeShjb25zdCBNZWRpYVRpbWUmIG9mZnNldCkKIHsKICAgICBDTUl0
ZW1Db3VudCBpdGVtQ291bnQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvQ01VdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWUzOTNlMGIyZDAxN2Nk
NGM5YWRkN2Q1NGJlYmY1YjI5YzRjMmRlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NNVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK3R5
cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY7Cit0eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciogQ01TYW1w
bGVCdWZmZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFTYW1wbGVz
QmxvY2s7CitzdHJ1Y3QgVHJhY2tJbmZvOworCitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZv
KGNvbnN0IFRyYWNrSW5mbyYpOworLy8gQ29udmVydCBNZWRpYVNhbXBsZXNCbG9jayB0byB0aGUg
ZXF1aXZhbGVudCBDTVNhbXBsZUJ1ZmZlclJlZi4gSWYgQ01Gb3JtYXREZXNjcmlwdGlvblJlZgor
Ly8gaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY3JlYXRlZCBm
cm9tIHRoZSBNZWRpYVNhbXBsZXNCbG9jaydzIFRyYWNrSW5mby4KK1dFQkNPUkVfRVhQT1JUIEV4
cGVjdGVkPFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIENTdHJpbmc+IHRvQ01TYW1wbGVC
dWZmZXIoTWVkaWFTYW1wbGVzQmxvY2smJiwgQ01Gb3JtYXREZXNjcmlwdGlvblJlZik7CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9DTVV0aWxpdGllcy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0NNVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxODJjMDRiN2JkODE3ODYwMWU4MTFkNDlh
ZDA3NWY4NTJlZTIzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9DTVV0aWxpdGllcy5tbQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJDTVV0aWxpdGllcy5oIgor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFTYW1wbGUuaCIKKyNpbXBv
cnQgIk1lZGlhVXRpbGl0aWVzLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKKyNpbXBvcnQg
IldlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgiCisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXRE
ZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8cGFsL2F2Zm91bmRhdGlvbi9NZWRpYVRpbWVBVkZvdW5k
YXRpb24uaD4KKyNpbXBvcnQgPHd0Zi9TY29wZS5oPgorI2ltcG9ydCA8d3RmL2NmL1R5cGVDYXN0
c0NGLmg+CisKKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCisjaW1wb3J0ICJWaWRlb1Rv
b2xib3hTb2Z0TGluay5oIgorI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5r
Lmg+CisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9j
Zi9BdWRpb1Rvb2xib3hTb2Z0TGluay5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lm
IEVOQUJMRShPUFVTKSB8fCBFTkFCTEUoVk9SQklTKQorCitzdGF0aWMgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVk
aW9JbmZvJiBpbmZvKQoreworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsg
fTsKKyAgICBhc2JkLm1Gb3JtYXRJRCA9IGluZm8uY29kZWNOYW1lLnZhbHVlOworICAgIFVJbnQz
MiBzaXplID0gc2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBQQUw6OkF1ZGlvRm9ybWF0
R2V0UHJvcGVydHkoa0F1ZGlvRm9ybWF0UHJvcGVydHlfRm9ybWF0SW5mbywgaW5mby5jb29raWVE
YXRhLT5zaXplKCksIGluZm8uY29va2llRGF0YS0+ZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3Is
IChjaGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
cmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGFzYmQpLCBpbmZvLmNvb2tpZURhdGEtPnNpemUoKSwgaW5mby5jb29raWVEYXRhLT5kYXRh
KCkpOworfQorCisjZW5kaWYKKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNQ29sb3JQ
cmltYXJpZXMoUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzIHByaW1hcmllcykKK3sKKyAgICBz
d2l0Y2ggKHByaW1hcmllcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRV
X1JfNzA5XzI7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OkplZGVjUDIy
UGhvc3Bob3JzOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19F
QlVfMzIxMzsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6U21wdGUxNzBt
OgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZTI0MG06CisgICAg
ICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2Fz
ZSBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlUnA0MzE6CisgICAgICAgIHJldHVy
biBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNh
c2UgUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZUVnNDMyOgorICAgICAgICByZXR1
cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAgICBj
YXNlIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIwOgorICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCisKK3N0YXRpYyBD
RlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24oUGxhdGZvcm1WaWRlb1RyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJh
Y3RlcmlzdGljcykgeworICAgIGNhc2UgUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCdDcwOToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6U21wdGUyNDBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1
bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6U21wdGVTdDIwODQ6CisgICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1h
dERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROworICAgIGNhc2Ug
UGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCdDIwMjBfMTBiaXQ6CisgICAg
Y2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8xMmJpdDoK
KyAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlNtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVv
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkFyaWJTdGRCNjdIbGc6CisgICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SWVjNjE5NjYy
MToKKyAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3Jp
cHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNl
IFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOgorICAgICAgICBy
ZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworc3RhdGlj
IENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgoUGxhdGZvcm1WaWRlb01hdHJpeENv
ZWZmaWNpZW50cyBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsK
KyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0MjAyME5vbmNvbnN0
YW50THVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbllD
YkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZp
Y2llbnRzOjpCdDQ3MGJnOgorICAgIGNhc2UgUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50
czo6U21wdGUxNzBtOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9J
VFVfUl82MDFfNDsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkJ0
NzA5OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlf
MjsKKyAgICBjYXNlIFBsYXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMjQwbToK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworUmV0
YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJv
bVRyYWNrSW5mbyhjb25zdCBUcmFja0luZm8mIGluZm8pCit7CisgICAgQVNTRVJUKGluZm8uaXNW
aWRlbygpIHx8IGluZm8uaXNBdWRpbygpKTsKKworICAgIGlmIChpbmZvLmlzQXVkaW8oKSkgewor
ICAgICAgICBhdXRvJiBhdWRpb0luZm8gPSBkb3duY2FzdDxjb25zdCBBdWRpb0luZm8+KGluZm8p
OworICAgICAgICBpZiAoIWF1ZGlvSW5mby5jb29raWVEYXRhIHx8ICFhdWRpb0luZm8uY29va2ll
RGF0YS0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc3dp
dGNoIChhdWRpb0luZm8uY29kZWNOYW1lLnZhbHVlKSB7CisjaWYgRU5BQkxFKE9QVVMpCisgICAg
ICAgIGNhc2UgJ29wdXMnOgorICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihhdWRpb0luZm8pOworI2VuZGlmCisjaWYgRU5B
QkxFKFZPUkJJUykKKyAgICAgICAgY2FzZSAndm9yYic6CisgICAgICAgICAgICBpZiAoIWlzVm9y
YmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oYXVkaW9JbmZv
KTsKKyNlbmRpZgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvJiB2aWRlb0luZm8gPSBkb3duY2FzdDxjb25z
dCBWaWRlb0luZm8+KGluZm8pOworCisgICAgYXV0byBkYXRhID0gdmlkZW9JbmZvLmF0b21EYXRh
LT5jcmVhdGVDRkRhdGEoKTsKKyAgICBBU1NFUlQodmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAw
OScgfHwgdmlkZW9JbmZvLmNvZGVjTmFtZSA9PSAndnAwOCcpOworICAgIENGVHlwZVJlZiBjb25m
aWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZp
Z3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlv
bkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBj
b25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChj
b25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4
dGVuc2lvbnNLZXlzIHsgUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVE
ZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07CisgICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5z
aW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKworICAgIGlmICh2aWRl
b0luZm8uY29sb3JTcGFjZS5mdWxsUmFuZ2UgJiYgKnZpZGVvSW5mby5jb2xvclNwYWNlLmZ1bGxS
YW5nZSkgeworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoUEFMOjprQ01Gb3JtYXREZXNj
cmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1
ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKKyAgICB9CisKKyAgICBpZiAodmlkZW9JbmZvLmNv
bG9yU3BhY2UucHJpbWFyaWVzKSB7CisgICAgICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKCp2aWRlb0luZm8uY29sb3JTcGFjZS5wcmltYXJp
ZXMpKSB7CisgICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJD
b2xvclByaW1hcmllc0tleSk7CisgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChj
bUNvbG9yUHJpbWFyaWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmlkZW9JbmZvLmNv
bG9yU3BhY2UudHJhbnNmZXIpIHsKKyAgICAgICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9u
ID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKCp2aWRlb0luZm8uY29sb3JTcGFjZS50cmFu
c2ZlcikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZl
clRyYW5zZmVyRnVuY3Rpb25LZXkpOworICAgICAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBl
bmQoY21UcmFuc2ZlckZ1bmN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2aWRl
b0luZm8uY29sb3JTcGFjZS5tYXRyaXgpIHsKKyAgICAgICAgaWYgKGF1dG8gY21NYXRyaXggPSBj
b252ZXJ0VG9DTVlDYkNSTWF0cml4KCp2aWRlb0luZm8uY29sb3JTcGFjZS5tYXRyaXgpKSB7Cisg
ICAgICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJp
eEtleSk7CisgICAgICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGV4dGVuc2lvbnMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBleHRlbnNpb25zS2V5cy5kYXRhKCksIGV4
dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRlbnNpb25zS2V5cy5zaXplKCksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51
bGxwdHI7CisgICAgQ01WaWRlb0NvZGVjVHlwZSBjb2RlYyA9IHZpZGVvSW5mby5jb2RlY05hbWUg
PT0gInZwMDkiID8ga0NNVmlkZW9Db2RlY1R5cGVfVlA5IDogJ3ZwMDgnOworICAgIGlmIChub0Vy
ciAhPSBQQUw6OkNNVmlkZW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBjb2RlYywgdmlkZW9JbmZvLnNpemUud2lkdGgoKSwgdmlkZW9JbmZvLnNpemUuaGVpZ2h0
KCksIGV4dGVuc2lvbnMuZ2V0KCksICZmb3JtYXREZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQor
CitFeHBlY3RlZDxSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCBDU3RyaW5nPiB0b0NNU2Ft
cGxlQnVmZmVyKE1lZGlhU2FtcGxlc0Jsb2NrJiYgc2FtcGxlcywgQ01Gb3JtYXREZXNjcmlwdGlv
blJlZiBmb3JtYXREZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoIXNhbXBsZXMuaW5mbygpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vIFRyYWNrSW5mbyBmb3VuZCIpOworCisgICAg
YXV0byBzY29wZUV4aXQgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIHNhbXBsZXMuY2xl
YXIoKTsKKyAgICB9KTsKKworICAgIGF1dG8gZm9ybWF0ID0gZm9ybWF0RGVzY3JpcHRpb24gPyBy
ZXRhaW5QdHIoZm9ybWF0RGVzY3JpcHRpb24pIDogY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VHJhY2tJbmZvKCpzYW1wbGVzLmluZm8oKSk7CisgICAgaWYgKCFmb3JtYXQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm8gQ01Gb3JtYXREZXNjcmlwdGlvbiBhdmFpbGFibGUiKTsK
KworICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjb21wbGV0ZUJsb2NrQnVmZmVyczsK
KyAgICBpZiAoc2FtcGxlcy5zaXplKCkgPiAxKSB7CisgICAgICAgIC8vIE9wdGltaXNhdGlvbiBz
byB0aGF0IHdlIGFsbG9jYXRlIHRoZSBlbnRpcmUgQ01CbG9ja0J1ZmZlciBhdCBvbmNlIGlmIHdl
IGhhdmUgbW9yZSB0aGFuIG9uZSB0byByZXR1cm4uCisgICAgICAgIENNQmxvY2tCdWZmZXJSZWYg
cmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgICAgICBhdXRvIGVyciA9IFBBTDo6Q01CbG9j
a0J1ZmZlckNyZWF0ZUVtcHR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHNhbXBsZXMuc2l6ZSgpLCAw
LCAmcmF3QmxvY2tCdWZmZXIpOworICAgICAgICBpZiAoZXJyICE9IGtDTUJsb2NrQnVmZmVyTm9F
cnIgfHwgIXJhd0Jsb2NrQnVmZmVyKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJDTUJsb2NrQnVmZmVyQ3JlYXRlRW1wdHkgZmFpbGVkIik7CisgICAgICAgIGNvbXBsZXRlQmxv
Y2tCdWZmZXJzID0gcmF3QmxvY2tCdWZmZXI7CisgICAgfQorCisgICAgVmVjdG9yPENNU2FtcGxl
VGltaW5nSW5mbz4gcGFja2V0VGltaW5nczsKKyAgICBwYWNrZXRUaW1pbmdzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2FtcGxlcy5zaXplKCkpOworICAgIFZlY3RvcjxzaXplX3Q+IHBhY2tldFNp
emVzOworICAgIHBhY2tldFNpemVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2FtcGxlcy5zaXpl
KCkpOworICAgIGZvciAoYXV0byYgc2FtcGxlIDogc2FtcGxlcykgeworICAgICAgICBpZiAoIXN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+Pihz
YW1wbGUuZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQg
TWVkaWFTYW1wbGVzQmxvY2sgdHlwZSIpOworICAgICAgICBhdXRvJiBkYXRhID0gc3RkOjpnZXQ8
UmVmPGNvbnN0IEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PihzYW1wbGUuZGF0YSk7CisgICAgICAg
IGF1dG8gYmxvY2tCdWZmZXIgPSBkYXRhLT5jcmVhdGVDTUJsb2NrQnVmZmVyKCk7CisgICAgICAg
IGlmICghYmxvY2tCdWZmZXIpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNv
dWxkbid0IGNyZWF0ZSBDTUJsb2NrQnVmZmVyIik7CisKKyAgICAgICAgaWYgKCFjb21wbGV0ZUJs
b2NrQnVmZmVycykKKyAgICAgICAgICAgIGNvbXBsZXRlQmxvY2tCdWZmZXJzID0gV1RGTW92ZShi
bG9ja0J1ZmZlcik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBlcnIgPSBQQUw6
OkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UoY29tcGxldGVCbG9ja0J1ZmZlcnMu
Z2V0KCksIGJsb2NrQnVmZmVyLmdldCgpLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIGlmIChlcnIg
IT0ga0NNQmxvY2tCdWZmZXJOb0VycikKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkNNQmxvY2tCdWZmZXJBcHBlbmRCdWZmZXJSZWZlcmVuY2UgZmFpbGVkIik7CisgICAg
ICAgIH0KKyAgICAgICAgcGFja2V0VGltaW5ncy5hcHBlbmQoeyBQQUw6OnRvQ01UaW1lKHNhbXBs
ZS5kdXJhdGlvbiksIFBBTDo6dG9DTVRpbWUoc2FtcGxlLnByZXNlbnRhdGlvblRpbWUpLCBQQUw6
OnRvQ01UaW1lKHNhbXBsZS5kZWNvZGVUaW1lKSB9KTsKKyAgICAgICAgcGFja2V0U2l6ZXMuYXBw
ZW5kKGRhdGEtPnNpemUoKSk7CisgICAgfQorCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2Ft
cGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAoYXV0byBlcnIgPSBQQUw6OkNNU2FtcGxlQnVm
ZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29tcGxldGVCbG9ja0J1ZmZlcnMu
Z2V0KCksIGZvcm1hdC5nZXQoKSwgcGFja2V0U2l6ZXMuc2l6ZSgpLCBwYWNrZXRUaW1pbmdzLnNp
emUoKSwgcGFja2V0VGltaW5ncy5kYXRhKCksIHBhY2tldFNpemVzLnNpemUoKSwgcGFja2V0U2l6
ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZDogT09NIik7CisKKyAgICBpZiAo
c2FtcGxlcy5pc1ZpZGVvKCkgJiYgc2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byBhdHRh
Y2htZW50c0FycmF5ID0gUEFMOjpDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJy
YXkocmF3U2FtcGxlQnVmZmVyLCB0cnVlKTsKKyAgICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJy
YXkpOworICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk5vIHNhbXBsZSBhdHRhY2htZW50IGZvdW5kIik7CisgICAgICAgIEFT
U0VSVChzaXplX3QoQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBzYW1wbGVz
LnNpemUoKSk7CisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0
Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgICAgICBD
Rk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0PENGTXV0
YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVudHNBcnJh
eSwgaSkpOworICAgICAgICAgICAgaWYgKCEoc2FtcGxlc1tpXS5mbGFncyAmIE1lZGlhU2FtcGxl
OjpTYW1wbGVGbGFnczo6SXNTeW5jKSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRW
YWx1ZShhdHRhY2htZW50cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtD
RkJvb2xlYW5UcnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdENGKHJh
d1NhbXBsZUJ1ZmZlcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAppbmRleCBh
MTVmNzFhNGM4NmRkYmVmMjcyNzI3MDczOWZlNjJlZDQ5OTI3YzM3Li45NGJiMmVkNmM1NmU3ODQ1
MTBkMmY0MWUyNzhiOGNhMzk5OGYzYjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJDTVV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTM5LDIxICs0MCwxNSBAQAogI2luY2x1ZGUg
IlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVXZWJNLmgi
CiAjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9EYXRhVmlldy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dlbmVyaWNUeXBl
ZEFycmF5Vmlld0lubGluZXMuaD4KICNpbmNsdWRlIDx3ZWJtL3dlYm1fcGFyc2VyLmg+CiAjaW5j
bHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaXN0Lmg+Ci0jaW5jbHVkZSA8d3RmL2NmL1R5cGVDYXN0
c0NGLmg+CiAjaW5jbHVkZSA8d3RmL2Rhcndpbi9XZWFrTGlua2luZy5oPgogI2luY2x1ZGUgPHd0
Zi9zcGkvZGFyd2luL09TVmFyaWFudFNQSS5oPgogCiAjaW5jbHVkZSAiQ29yZVZpZGVvU29mdExp
bmsuaCIKLSNpbmNsdWRlICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgotI2luY2x1ZGUgPHBhbC9j
Zi9Db3JlTWVkaWFTb2Z0TGluay5oPgogCiBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3ZWJt
Ojpzd2FwKTsKIApAQCAtMjM0LDI1ICsyMjksNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1
bWVudDx3ZWJtOjpJZD4gewogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IExvZ0FyZ3Vt
ZW50PFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlPiB7Ci0gICAgc3RhdGlj
IEFTQ0lJTGl0ZXJhbCB0b1N0cmluZyhXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpT
dGF0ZSBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgY2Fz
ZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6Tm9uZTogcmV0dXJuICJO
b25lIl9zOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0
YXRlOjpSZWFkaW5nRWJtbDogcmV0dXJuICJSZWFkaW5nRWJtbCJfczsKLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEVibWw6IHJldHVybiAi
UmVhZEVibWwiX3M7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U3RhdGU6OlJlYWRpbmdTZWdtZW50OiByZXR1cm4gIlJlYWRpbmdTZWdtZW50Il9zOwotICAg
ICAgICBjYXNlIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlN0YXRlOjpSZWFkaW5n
SW5mbzogcmV0dXJuICJSZWFkaW5nSW5mbyJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZEluZm86IHJldHVybiAiUmVhZEluZm8iX3M7
Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU6OlJl
YWRpbmdUcmFja3M6IHJldHVybiAiUmVhZGluZ1RyYWNrcyJfczsKLSAgICAgICAgY2FzZSBXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ1RyYWNrOiByZXR1cm4g
IlJlYWRpbmdUcmFjayJfczsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpTdGF0ZTo6UmVhZFRyYWNrOiByZXR1cm4gIlJlYWRUcmFjayJfczsKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZTo6UmVhZGluZ0NsdXN0
ZXI6IHJldHVybiAiUmVhZGluZ0NsdXN0ZXIiX3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
ICJVbmtub3duIl9zOwotICAgIH0KLX07Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0yNzYsMTQgKzI1MiwxNCBAQCBzdGF0aWMgU3RhdHVzIHNlZ21lbnRS
ZWFkRXJyb3JUb1dlYm1TdGF0dXMoU291cmNlQnVmZmVyUGFyc2VyOjpTZWdtZW50OjpSZWFkRXJy
bwogewogICAgIHN3aXRjaCAoZXJyb3IpIHsKICAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6
U2VnbWVudDo6UmVhZEVycm9yOjpFbmRPZkZpbGU6IHJldHVybiBTdGF0dXMoU3RhdHVzOjprRW5k
T2ZGaWxlKTsKLSAgICBjYXNlIFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudDo6UmVhZEVycm9y
OjpGYXRhbEVycm9yOiByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpFcnJvckNvZGU6OlJlYWRlckZhaWxlZCkpOworICAgIGNhc2UgU291cmNlQnVmZmVy
UGFyc2VyOjpTZWdtZW50OjpSZWFkRXJyb3I6OkZhdGFsRXJyb3I6IHJldHVybiBTdGF0dXMoU3Rh
dHVzOjpDb2RlKFdlYk1QYXJzZXI6OkVycm9yQ29kZTo6UmVhZGVyRmFpbGVkKSk7CiAgICAgfQog
fQogCi1jbGFzcyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTZWdtZW50UmVhZGVyIGZpbmFsIDog
cHVibGljIHdlYm06OlJlYWRlciB7CitjbGFzcyBXZWJNUGFyc2VyOjpTZWdtZW50UmVhZGVyIGZp
bmFsIDogcHVibGljIHdlYm06OlJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRTZWdtZW50KFNlZ21lbnQmJiBzZWdtZW50KQorICAg
IHZvaWQgYXBwZW5kU2VnbWVudChTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQmJiBzZWdtZW50
KQogICAgIHsKICAgICAgICAgbV9kYXRhLnB1c2hfYmFjayhXVEZNb3ZlKHNlZ21lbnQpKTsKICAg
ICAgICAgaWYgKG1fY3VycmVudFNlZ21lbnQgPT0gbV9kYXRhLmVuZCgpKQpAQCAtNDYwLDggKzQz
Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcG9zaXRpb25XaXRoaW5TZWdtZW50ID0gMDsKICAg
ICB9CiAKLSAgICBTdGRMaXN0PFNlZ21lbnQ+IG1fZGF0YTsKLSAgICBTdGRMaXN0PFNlZ21lbnQ+
OjppdGVyYXRvciBtX2N1cnJlbnRTZWdtZW50IHsgbV9kYXRhLmVuZCgpIH07CisgICAgU3RkTGlz
dDxTb3VyY2VCdWZmZXJQYXJzZXI6OlNlZ21lbnQ+IG1fZGF0YTsKKyAgICBTdGRMaXN0PFNvdXJj
ZUJ1ZmZlclBhcnNlcjo6U2VnbWVudD46Oml0ZXJhdG9yIG1fY3VycmVudFNlZ21lbnQgeyBtX2Rh
dGEuZW5kKCkgfTsKICAgICBzaXplX3QgbV9wb3NpdGlvbiB7IDAgfTsKICAgICBzaXplX3QgbV9w
b3NpdGlvbldpdGhpblNlZ21lbnQgeyAwIH07CiB9OwpAQCAtNTUzLDEzOSArNTI5LDQ5IEBAIHN0
YXRpYyBib29sIGNhbkxvYWRGb3JtYXRSZWFkZXIoKQogI2VuZGlmIC8vICFVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQogfQogCi1ib29sIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzV2ViTUZvcm1h
dFJlYWRlckF2YWlsYWJsZSgpCitXZWJNUGFyc2VyOjpXZWJNUGFyc2VyKENhbGxiYWNrJiBjYWxs
YmFjaykKKyAgICA6IG1fcGFyc2VyKG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdl
Ym1QYXJzZXI+KCkpCisgICAgLCBtX3JlYWRlcihtYWtlVW5pcXVlUmVmPFNlZ21lbnRSZWFkZXI+
KCkpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQogewotICAgIHJldHVybiBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9hZEZv
cm1hdFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOwogfQogCi1NZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50VHlw
ZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK1dlYk1QYXJzZXI6On5XZWJNUGFy
c2VyKCkKIHsKLSNpZiBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BV
UykKLSAgICBpZiAoIWlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQotICAgIGF1dG8g
Y29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVyVHlwZSgpOwotICAgIGJvb2wgaXNBdWRpb0Nv
bnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRp
by93ZWJtIik7Ci0gICAgYm9vbCBpc1ZpZGVvQ29udGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVvL3dlYm0iKTsKLSAgICBpZiAoIWlzQXVkaW9D
b250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFpbmVyVHlwZSkKLSAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgCi0gICAg
Ym9vbCBpc0FueUF1ZGlvQ29kZWNBdmFpbGFibGUgPSBmYWxzZTsKLSNpZiBFTkFCTEUoVk9SQklT
KQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSB8PSBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShPUFVTKQotICAgIGlzQW55QXVkaW9Db2RlY0F2YWls
YWJsZSB8PSBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmIChpc0F1
ZGlvQ29udGFpbmVyVHlwZSAmJiAhaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlKQotICAgICAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKLQot
ICAgIGJvb2wgaXNBbnlDb2RlY0F2YWlsYWJsZSA9IGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZTsK
LSNpZiBFTkFCTEUoVlA5KQotICAgIGlzQW55Q29kZWNBdmFpbGFibGUgfD0gaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCk7Ci0jZW5kaWYKLQotICAgIGlmICghaXNBbnlDb2RlY0F2YWlsYWJsZSkKLSAg
ICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0
ZWQ7Ci0KLSAgICBhdXRvIGNvZGVjcyA9IHR5cGUuY29kZWNzKCk7Ci0gICAgaWYgKGNvZGVjcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
Ok1heUJlU3VwcG9ydGVkOwotCi0gICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgewotI2lm
IEVOQUJMRShWUDkpCi0gICAgICAgIGlmIChjb2RlYy5zdGFydHNXaXRoKCJ2cDA5IikgfHwgY29k
ZWMuc3RhcnRzV2l0aCgidnAwOCIpIHx8IGVxdWFsKGNvZGVjLCAidnA4IikgfHwgZXF1YWwoY29k
ZWMsICJ2cDkiKSkgewotCi0gICAgICAgICAgICBpZiAoIWlzVlA5RGVjb2RlckF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6
OklzTm90U3VwcG9ydGVkOwotCi0gICAgICAgICAgICBhdXRvIGNvZGVjUGFyYW1ldGVycyA9IHBh
cnNlVlBDb2RlY1BhcmFtZXRlcnMoY29kZWMpOwotICAgICAgICAgICAgaWYgKCFjb2RlY1BhcmFt
ZXRlcnMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRz
VHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0KLSAgICAgICAgICAgIGlmICghaXNWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZFN1cHBvcnRlZCgqY29kZWNQYXJhbWV0ZXJzKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsK
LQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoVlA5
KQotCi0jaWYgRU5BQkxFKFZPUkJJUykKLSAgICAgICAgaWYgKGNvZGVjID09ICJ2b3JiaXMiKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9y
dGVkOwotCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2VuZGlmIC8vIEVOQUJM
RShWT1JCSVMpCi0KLSNpZiBFTkFCTEUoT1BVUykKLSAgICAgICAgaWYgKGNvZGVjID09ICJvcHVz
IikgewotICAgICAgICAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBw
b3J0ZWQ7Ci0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYgLy8gRU5B
QkxFKE9QVVMpCi0KLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlw
ZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6
OlN1cHBvcnRzVHlwZTo6SXNTdXBwb3J0ZWQ7Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHR5
cGUpOwotCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RT
dXBwb3J0ZWQ7Ci0jZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiB9CiAKLVJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmIHR5cGUpCi17Ci0gICAgaWYg
KGlzQ29udGVudFR5cGVTdXBwb3J0ZWQodHlwZSkgIT0gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9y
dHNUeXBlOjpJc05vdFN1cHBvcnRlZCkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNKCkpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCkKLSAgICA6IG1fcmVhZGVy
KG1ha2VVbmlxdWVSZWY8U2VnbWVudFJlYWRlcj4oKSkKK3ZvaWQgV2ViTVBhcnNlcjo6cmVzZXRT
dGF0ZSgpCiB7Ci0gICAgaWYgKGlzV2VibVBhcnNlckF2YWlsYWJsZSgpKQotICAgICAgICBtX3Bh
cnNlciA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFdlYm1QYXJzZXI+KCk7Cisg
ICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgaWYgKG1fcGFyc2Vy
KQorICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOworICAgIG1fcmVhZGVyLT5yZXNldCgpOwor
ICAgIG1fc3RhdGUgPSBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA/IFN0YXRlOjpS
ZWFkaW5nU2VnbWVudCA6IFN0YXRlOjpOb25lOworICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50
ID0gbnVsbHB0cjsKKyAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0gZmFs
c2U7CisgICAgbV9jdXJyZW50QmxvY2sucmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bV90cmFja3MpCisgICAgICAgIHRyYWNrLT5yZXNldCgpOwogfQogCi1Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjp+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCit2b2lkIFdlYk1QYXJzZXI6OnJlc2V0
KCkKIHsKKyAgICBtX3JlYWRlci0+cmVzZXQoKTsKKyAgICBtX3BhcnNlci0+RGlkU2VlaygpOwog
fQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmFwcGVuZERhdGEoU2VnbWVudCYmIHNl
Z21lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlciwgQXBw
ZW5kRmxhZ3MgYXBwZW5kRmxhZ3MpCitFeGNlcHRpb25PcjxpbnQ+IFdlYk1QYXJzZXI6OnBhcnNl
KFNvdXJjZUJ1ZmZlclBhcnNlcjo6U2VnbWVudCYmIHNlZ21lbnQpCiB7Ci0gICAgaWYgKCFtX3Bh
cnNlcikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImZsYWdzKCIs
IGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5ID8gIkRpc2NvbnRpbnVp
dHkiIDogIiIsICIpLCBzaXplKCIsIHNlZ21lbnQuc2l6ZSgpLCAiKSIpOworICAgIGlmICghbV9w
YXJzZXIpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9Owog
Ci0gICAgaWYgKGFwcGVuZEZsYWdzID09IEFwcGVuZEZsYWdzOjpEaXNjb250aW51aXR5KSB7Ci0g
ICAgICAgIG1fcmVhZGVyLT5yZXNldCgpOwotICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwot
ICAgIH0KICAgICBtX3JlYWRlci0+YXBwZW5kU2VnbWVudChXVEZNb3ZlKHNlZ21lbnQpKTsKIAog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIG1fc3RhdHVzID0gbV9wYXJzZXItPkZlZWQodGhp
cywgJm1fcmVhZGVyKTsKICAgICAgICAgaWYgKG1fc3RhdHVzLm9rKCkgfHwgbV9zdGF0dXMuY29k
ZSA9PSBTdGF0dXM6OmtFbmRPZkZpbGUgfHwgbV9zdGF0dXMuY29kZSA9PSBTdGF0dXM6OmtXb3Vs
ZEJsb2NrKSB7CiAgICAgICAgICAgICBtX3JlYWRlci0+cmVjbGFpbVNlZ21lbnRzKCk7Ci0KLSAg
ICAgICAgICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBlZCBpbnRvIG1ldGEtc2FtcGxlcyBv
ZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1TYW1wbGVEdXJhdGlvbi4KLSAgICAg
ICAgICAgIC8vIEJ1dCBhdCB0aGUgZW5kIG9mIGEgZmlsZSwgbm8gbW9yZSBhdWRpbyBkYXRhIG1h
eSBiZSBpbmNvbWluZywgc28gZmx1c2ggYW5kIGVtaXQgYW55IHBlbmRpbmcKLSAgICAgICAgICAg
IC8vIGF1ZGlvIGJ1ZmZlcnMuCi0gICAgICAgICAgICBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMo
KTsKLQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fc3Rh
dHVzLmNvZGUgIT0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oRXJyb3JDb2RlOjpSZWNlaXZlZEVibWxJ
bnNpZGVTZWdtZW50KSkKQEAgLTcxMCw2MSArNTk2LDI0IEBAIHZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pCiAgICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIEVSUk9SX0xPR19JRl9QT1NTSUJM
RShMT0dJREVOVElGSUVSLCAic3RhdHVzLmNvZGUoIiwgbV9zdGF0dXMuY29kZSwgIikiKTsKLSAg
ICBtX2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVm
IHsgKnRoaXMgfSwgY29kZSA9IG1fc3RhdHVzLmNvZGVdIHsKLSAgICAgICAgaWYgKG1fZGlkRW5j
b3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2spCi0gICAgICAgICAgICBtX2RpZEVuY291
bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKGNvZGUpOwotICAgIH0pOwotCi0gICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVz
aFBlbmRpbmdNZWRpYURhdGEoKQotewotfQotCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OnNldFNob3VsZFByb3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEKGJvb2wsIHVpbnQ2NF90KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG1fc3RhdHVzLmNvZGU7CiB9CiAKLWJv
b2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNr
SUQodWludDY0X3QpCit2b2lkIFdlYk1QYXJzZXI6OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxv
Z2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpy
ZXNldFBhcnNlclN0YXRlKCkKLXsKLSAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElG
SUVSKTsKLSAgICBpZiAobV9wYXJzZXIpCi0gICAgICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7Ci0g
ICAgbV9yZWFkZXItPnJlc2V0KCk7Ci0gICAgbV9zdGF0ZSA9IG1faW5pdGlhbGl6YXRpb25TZWdt
ZW50UHJvY2Vzc2VkID8gU3RhdGU6OlJlYWRpbmdTZWdtZW50IDogU3RhdGU6Ok5vbmU7Ci0gICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwotICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50RW5jb3VudGVyZWQgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRCbG9jay5yZXNldCgpOwot
ICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykKLSAgICAgICAgdHJhY2stPnJlc2V0KCk7
CisgICAgbV9sb2dnZXIgPSAmbG9nZ2VyOworICAgIG1fbG9nSWRlbnRpZmllciA9IGxvZ0lkZW50
aWZpZXI7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aW52YWxpZGF0ZSgpCit2
b2lkIFdlYk1QYXJzZXI6OmludmFsaWRhdGUoKQogewotICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwotCiAgICAgbV9wYXJzZXIgPSBudWxscHRyOwogICAgIG1fdHJhY2tz
LmNsZWFyKCk7CiAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgIG1f
Y3VycmVudEJsb2NrLnJlc2V0KCk7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TG9nZ2VyKGNvbnN0IExvZ2dlciYgbG9nZ2VyLCBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KQotewotICAgIG1fbG9nZ2VyID0gJmxvZ2dlcjsKLSAgICBtX2xvZ0lkZW50aWZpZXIgPSBsb2dJ
ZGVudGlmaWVyOwotfQotCi1hdXRvIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZv
clRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAtPiBUcmFja0RhdGEqCithdXRvIFdl
Yk1QYXJzZXI6OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90IHRyYWNrTnVtYmVyKSAt
PiBUcmFja0RhdGEqCiB7CiAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CiAgICAg
ICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNr
LT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQpAQCAtNzczLDcg
KzYyMiw3IEBAIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tO
dW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRCZWdpbihjb25zdCBF
bGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFy
c2VyOjpPbkVsZW1lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBBY3Rp
b24qIGFjdGlvbikKIHsKICAgICBBU1NFUlQoYWN0aW9uKTsKICAgICBpZiAoIWFjdGlvbikKQEAg
LTg0NSw3ICs2OTQsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25FbGVtZW50
QmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgQQogICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi1TdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEpCitTdGF0
dXMgV2ViTVBhcnNlcjo6T25FbGVtZW50RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRh
dGEpCiB7CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTg2
MSwyNCArNzEwLDIwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRF
bmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSkKICAgICBJTkZPX0xPR19JRl9QT1NT
SUJMRShMT0dJREVOVElGSUVSLCAic3RhdGUoIiwgb2xkU3RhdGUsICItPiIsIG1fc3RhdGUsICIp
LCBpZCgiLCBtZXRhZGF0YS5pZCwgIiksIHNpemUoIiwgbWV0YWRhdGEuc2l6ZSwgIikiKTsKIAog
ICAgIGlmIChtZXRhZGF0YS5pZCA9PSBJZDo6a1RyYWNrcykgewotICAgICAgICBpZiAoIW1fa2V5
SWRzLmlzRW1wdHkoKSAmJiAhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXph
dGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2spIHsKKyAgICAgICAgaWYgKCFtX2tleUlkcy5pc0Vt
cHR5KCkgJiYgIW1fY2FsbGJhY2suY2FuRGVjcnlwdCgpKSB7CiAgICAgICAgICAgICBFUlJPUl9M
T0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIkVuY291bnRlcmVkIGVuY3J5cHRlZCBjb250
ZW50IHdpdGhvdXQgYW4ga2V5IHJlcXVlc3QgY2FsbGJhY2siKTsKICAgICAgICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjpDb2RlKEVycm9yQ29kZTo6Q29udGVudEVuY3J5cHRlZCkpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQp
IHsKLSAgICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3Zl
KCptX2luaXRpYWxpemF0aW9uU2VnbWVudCldKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZGlkUGFyc2VJbml0aWFsaXphdGlvbkRhdGFDYWxsYmFjaykKLSAgICAgICAgICAgICAg
ICAgICAgbV9kaWRQYXJzZUluaXRpYWxpemF0aW9uRGF0YUNhbGxiYWNrKFdURk1vdmUoaW5pdGlh
bGl6YXRpb25TZWdtZW50KSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAobV9pbml0aWFsaXphdGlvblNlZ21lbnRFbmNvdW50ZXJlZCkKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2sucGFyc2VkSW5pdGlhbGl6YXRpb25EYXRhKFdURk1vdmUoKm1faW5pdGlhbGl6YXRpb25T
ZWdtZW50KSk7CiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50RW5jb3VudGVyZWQgPSBm
YWxzZTsKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQgPSBudWxscHRyOwogICAgICAg
ICBtX2luaXRpYWxpemF0aW9uU2VnbWVudFByb2Nlc3NlZCA9IHRydWU7CiAKICAgICAgICAgaWYg
KCFtX2tleUlkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYga2V5SWRQYWly
IDogbV9rZXlJZHMpCi0gICAgICAgICAgICAgICAgbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVl
c3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEQ2FsbGJhY2soV1RGTW92ZShrZXlJZFBhaXIu
c2Vjb25kKSwga2V5SWRQYWlyLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrLmNv
bnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRChXVEZNb3ZlKGtleUlk
UGFpci5zZWNvbmQpLCBrZXlJZFBhaXIuZmlyc3QpOwogICAgICAgICB9CiAgICAgICAgIG1fa2V5
SWRzLmNsZWFyKCk7CiAgICAgfQpAQCAtODg2LDcgKzczMSw3IEBAIFN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPbkVsZW1lbnRFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSkKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotU3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBFYm1sJiBlYm1sKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uRWJtbChjb25zdCBFbGVtZW50
TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBlYm1sKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIpOwogCkBAIC04OTQsNyArNzM5LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uRWJtbChjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBFYm1sJiBl
Ym1sKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6Q29kZShFcnJvckNvZGU6OkludmFs
aWREb2NUeXBlKSk7CiAKICAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudEVuY291bnRlcmVkID0g
dHJ1ZTsKLSAgICBtX2luaXRpYWxpemF0aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFz
dE1hbGxvY0NoZWNrPEluaXRpYWxpemF0aW9uU2VnbWVudD4oKTsKKyAgICBtX2luaXRpYWxpemF0
aW9uU2VnbWVudCA9IG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0NoZWNrPFNvdXJjZUJ1ZmZl
clBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PigpOwogICAgIC8vIFRPRE86IFNldHRpbmcg
dGhpcyB0byBmYWxzZSBoZXJlLCB3aWxsIHByZXZlbnQgYWRkaW5nIGEgbmV3IG1lZGlhIHNlZ21l
bnQgc2hvdWxkIGEKICAgICAvLyBwYXJ0aWFsIGluaXQgc2VnbWVudCBiZSBlbmNvdW50ZXJlZCBh
ZnRlciBhIGNhbGwgdG8gc291cmNlQnVmZmVyLmFib3J0KCkuCiAgICAgLy8gSXQncyBwcm9iYWJs
eSBmaW5lIGFzIG5vLW9uZSBpbiB0aGVpciByaWdodCBtaW5kIHNob3VsZCBzZW5kIHBhcnRpYWwg
aW5pdCBzZWdtZW50IG9ubHkKQEAgLTkwNSw3ICs3NTAsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25FYm1sKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IEVibWwmIGVi
bWwpCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLVN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKK1N0YXR1cyBXZWJNUGFyc2VyOjpPblNlZ21lbnRCZWdp
bihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBBY3Rpb24qIGFjdGlvbikKIHsKICAgICBJTkZPX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTIyLDcgKzc2Nyw3IEBAIFN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNlZ21lbnRCZWdpbihjb25zdCBFbGVtZW50TWV0
YWRhdGEmLCBBY3Rpb24qIGFjCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRl
ZCk7CiB9CiAKLVN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxl
bWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKK1N0YXR1cyBXZWJNUGFyc2VyOjpPbklu
Zm8oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgSW5mbyYgaW5mbykKIHsKICAgICBJTkZP
X0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtOTM4LDcgKzc4Myw3IEBAIFN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkluZm8oY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgSW5mbyYgaW5mbykKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2lu
KGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiog
YWN0aW9uKQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRN
ZXRhZGF0YSYsIGNvbnN0IENsdXN0ZXImIGNsdXN0ZXIsIEFjdGlvbiogYWN0aW9uKQogewogICAg
IElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC05NTQsNyArNzk5LDcg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVs
ZW1lbnRNZXRhZGF0YSYsIGNvbnN0IENsdXMKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tF
bnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5
KQorU3RhdHVzIFdlYk1QYXJzZXI6Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEm
LCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5KQogewogICAgIGlmICghdHJhY2tFbnRyeS50
cmFja190eXBlLmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50
KCkpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwpAQCAtMTAx
OSwxNCArODY0LDE0IEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgVHJhY2tFCiAKICNpZiBFTkFCTEUoVk9S
QklTKQogICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2Rl
ckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6
Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0Rh
dGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiAgICAgfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoT1BVUykKICAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNP
cHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1Ry
YWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWlu
aW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcykpOwog
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKICAgICB9CiAjZW5k
aWYKQEAgLTEwMzUsNyArODgwLDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
VHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBUcmFja0UKICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBj
b25zdCBCbG9jayYgYmxvY2ssIEFjdGlvbiogYWN0aW9uKQord2VibTo6U3RhdHVzIFdlYk1QYXJz
ZXI6Ok9uQmxvY2tCZWdpbihjb25zdCBFbGVtZW50TWV0YWRhdGEmLCBjb25zdCBCbG9jayYgYmxv
Y2ssIEFjdGlvbiogYWN0aW9uKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5U
SUZJRVIpOwogCkBAIC0xMDUwLDcgKzg5NSw3IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QKICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVz
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tFbmQoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiwgY29uc3QgQmxvY2smKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tFbmQoY29u
c3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgQmxvY2smKQogewogICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOwogCkBAIC0xMDU5LDcgKzkwNCw3IEBAIHdlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYsIGNvbnN0IEJsCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrQmVn
aW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smIGJsb2NrLCBBY3Rp
b24qIGFjdGlvbikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2NrQmVnaW4o
Y29uc3QgRWxlbWVudE1ldGFkYXRhJiwgY29uc3QgU2ltcGxlQmxvY2smIGJsb2NrLCBBY3Rpb24q
IGFjdGlvbikKIHsKICAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApA
QCAtMTA3NCw3ICs5MTksNyBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
T25TaW1wbGVCbG9ja0JlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsCiAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPblNpbXBsZUJsb2NrRW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNv
bnN0IFNpbXBsZUJsb2NrJikKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpPblNpbXBsZUJsb2Nr
RW5kKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYsIGNvbnN0IFNpbXBsZUJsb2NrJikKIHsKICAgICBJ
TkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSKTsKIApAQCAtMTA4Myw3ICs5MjgsNyBA
QCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25TaW1wbGVCbG9ja0VuZChj
b25zdCBFbGVtZW50TWV0YWRhdGEmLCBjbwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tD
b21wbGV0ZWQpOwogfQogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25C
bG9ja0dyb3VwQmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9u
KiBhY3Rpb24pCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6T25CbG9ja0dyb3VwQmVnaW4oY29u
c3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKiBhY3Rpb24pCiB7CiAgICAg
SU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CiAKQEAgLTEwOTUsNyArOTQwLDcg
QEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQmxvY2tHcm91cEJlZ2lu
KGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGEKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09r
Q29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
QmxvY2tHcm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3ZWJtOjpC
bG9ja0dyb3VwJiBibG9ja0dyb3VwKQord2VibTo6U3RhdHVzIFdlYk1QYXJzZXI6Ok9uQmxvY2tH
cm91cEVuZChjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCBjb25zdCB3ZWJtOjpCbG9ja0dy
b3VwJiBibG9ja0dyb3VwKQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJ
RVIpOwogICAgIGlmIChibG9ja0dyb3VwLmJsb2NrLmlzX3ByZXNlbnQoKSAmJiBibG9ja0dyb3Vw
LmRpc2NhcmRfcGFkZGluZy5pc19wcmVzZW50KCkpIHsKQEAgLTExMDUsMTcgKzk1MCwxMyBAQCB3
ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0
IHdlYm06OkVsZW1lbnRNZXRhZGF0YQogICAgICAgICAgICAgRVJST1JfTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIsICJJZ25vcmluZyB1bmtub3duIHRyYWNrIG51bWJlciAiLCB0cmFja051
bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsK
ICAgICAgICAgfQotICAgICAgICBpZiAodHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3VpZC5pc19w
cmVzZW50KCkgJiYgYmxvY2tHcm91cC5kaXNjYXJkX3BhZGRpbmcudmFsdWUoKSA+IDApIHsKLSAg
ICAgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCB0cmFja0lEID0gdHJhY2tEYXRhLT50cmFjaygpLnRyYWNrX3Vp
ZC52YWx1ZSgpLCBwYWRkaW5nID0gTWVkaWFUaW1lKGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5n
LnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcyldKCkgewotICAgICAgICAgICAgICAgIGlmIChtX2Rp
ZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgICAgIG1fZGlkUGFy
c2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBwYWRkaW5nKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9CisgICAgICAgIGlmICh0cmFja0RhdGEtPnRyYWNrKCkudHJhY2tfdWlkLmlz
X3ByZXNlbnQoKSAmJiBibG9ja0dyb3VwLmRpc2NhcmRfcGFkZGluZy52YWx1ZSgpID4gMCkKKyAg
ICAgICAgICAgIG1fY2FsbGJhY2sucGFyc2VkVHJpbW1pbmdEYXRhKHRyYWNrRGF0YS0+dHJhY2so
KS50cmFja191aWQudmFsdWUoKSwgTWVkaWFUaW1lKGJsb2NrR3JvdXAuZGlzY2FyZF9wYWRkaW5n
LnZhbHVlKCksIGtfdXNfaW5fc2Vjb25kcykpOwogICAgIH0KICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06Ok9uRnJhbWUoY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWRlciogcmVh
ZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6
T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVp
bnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKICAgICBBU1NFUlQocmVhZGVyKTsKICAgICBpZiAo
IXJlYWRlcikKQEAgLTExNTIsMzIgKzk5MywyMCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZAog
ICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBi
eXRlc1JlbWFpbmluZywgUEFMOjpDTVRpbWVNYWtlKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVu
dFRpbWVjb2RlLCBtX3RpbWVzY2FsZSksIGJsb2NrLT5udW1fZnJhbWVzKTsKKyAgICByZXR1cm4g
dHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFp
bmluZywgTWVkaWFUaW1lKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3Rp
bWVzY2FsZSksIGJsb2NrLT5udW1fZnJhbWVzKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4gc2Ft
cGxlQnVmZmVyLCB1aW50NjRfdCB0cmFja0lELCBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gYnl0ZVJh
bmdlT2Zmc2V0KQotewotICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBzYW1wbGVCdWZmZXIgPSBXVEZNb3ZlKHNhbXBs
ZUJ1ZmZlciksIHRyYWNrSUQsIGJ5dGVSYW5nZU9mZnNldF0gKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRl
KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAgICAgIGlmIChieXRlUmFuZ2VPZmZz
ZXQpCi0gICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpieXRlUmFu
Z2VPZmZzZXQpOwotICAgICAgICBtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3Zl
KG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmcoKSk7Ci0gICAgfSk7Ci19CiAKICNk
ZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSguLi4pIGlmIChwYXJzZXIoKS5sb2dn
ZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRyKCktPmVycm9yKGxvZ0NoYW5uZWwoKSwgTG9nZ2Vy
OjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxv
Z0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQogCi1SZWZQdHI8U2hhcmVkQnVmZmVyPiBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVm
ZmVyKHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CitSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBXZWJNUGFyc2VyOjpUcmFja0RhdGE6OmNvbnRpZ3VvdXNDb21wbGV0ZUJsb2NrQnVmZmVy
KHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgaWYgKG9mZnNldCAr
IGxlbmd0aCA+IG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuc2l6ZSgpKQorICAgIGlmIChvZmZzZXQg
KyBsZW5ndGggPiBtX2NvbXBsZXRlQmxvY2tCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIG1fY29tcGxldGVCbG9ja0J1ZmZlcnMuZ2V0KCktPmdldENv
bnRpZ3VvdXNEYXRhKG9mZnNldCwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbV9jb21wbGV0ZUJsb2Nr
QnVmZmVyLT5nZXRDb250aWd1b3VzRGF0YShvZmZzZXQsIGxlbmd0aCk7CiB9CiAKLXdlYm06OlN0
YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2Vi
bTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpCit3ZWJtOjpTdGF0dXMgV2ViTVBhcnNlcjo6VHJhY2tE
YXRhOjpyZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewogICAgIGlm
IChtX2NvbXBsZXRlUGFja2V0U2l6ZSAmJiAqbV9jb21wbGV0ZVBhY2tldFNpemUgIT0gbWV0YWRh
dGEuc2l6ZSkgewogICAgICAgICAvLyBUaGUgcGFja2V0J3MgbWV0YWRhdGEgZG9lc24ndCBtYXRj
aCB0aGUgY3VycmVudGx5IHBlbmRpbmcgY29tcGxldGUgcGFja2V0OyByZXN0YXJ0LgpAQCAtMTE5
MCw3ICsxMDE5LDcgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNr
RGF0YTo6cmVhZEZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWQKIAogICAgIHdoaWxlICgqYnl0
ZXNSZW1haW5pbmcpIHsKICAgICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOwotICAgICAgICBhdXRv
IHN0YXR1cyA9IHN0YXRpY19jYXN0PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNlZ21lbnRSZWFk
ZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywgbV9jdXJyZW50QmxvY2tCdWZm
ZXIsICZieXRlc1JlYWQpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHN0YXRpY19jYXN0PFdlYk1Q
YXJzZXI6OlNlZ21lbnRSZWFkZXImPihyZWFkZXIpLlJlYWRJbnRvKCpieXRlc1JlbWFpbmluZywg
bV9jdXJyZW50QmxvY2tCdWZmZXIsICZieXRlc1JlYWQpOwogICAgICAgICAqYnl0ZXNSZW1haW5p
bmcgLT0gYnl0ZXNSZWFkOwogICAgICAgICBtX3BhcnRpYWxCeXRlc1JlYWQgKz0gYnl0ZXNSZWFk
OwogCkBAIC0xMjAyLDk4ICsxMDMxLDY2IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpUcmFja0RhdGE6OnJlYWRGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkCiAgICAg
aWYgKG1fcGFydGlhbEJ5dGVzUmVhZCA8ICptX2NvbXBsZXRlUGFja2V0U2l6ZSkKICAgICAgICAg
cmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwpOwogCi0gICAgbV9j
b21wbGV0ZUJsb2NrQnVmZmVycy5hcHBlbmQobV9jdXJyZW50QmxvY2tCdWZmZXIudGFrZSgpKTsK
KyAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXIgPSBtX2N1cnJlbnRCbG9ja0J1ZmZlci50YWtlKCk7
CisgICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7CiAgICAgbV9wYXJ0aWFs
Qnl0ZXNSZWFkID0gMDsKIAogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjpr
T2tDb21wbGV0ZWQpOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0
YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFu
Z2VPZmZzZXQpCi17Ci0gICAgaWYgKG1fcGFja2V0U2l6ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIGNvbXBsZXRlQ01CbG9ja0J1ZmZlcnMgPSBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXJzLnRha2UoKS0+Y3JlYXRlQ01CbG9ja0J1ZmZlcigpOwotICAgIGlmICghY29tcGxl
dGVDTUJsb2NrQnVmZmVycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGVyciA9IFBBTDo6Q01TYW1w
bGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb21wbGV0ZUNNQmxvY2tC
dWZmZXJzLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldFNpemVzLnNp
emUoKSwgbV9wYWNrZXRUaW1pbmdzLnNpemUoKSwgbV9wYWNrZXRUaW1pbmdzLmRhdGEoKSwgbV9w
YWNrZXRTaXplcy5zaXplKCksIG1fcGFja2V0U2l6ZXMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVy
KTsKLSAgICBpZiAoZXJyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggJWQiLCBlcnIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdFByb2Nlc3MocmF3U2FtcGxlQnVmZmVyKTsKLQot
ICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7Ci0gICAgcGFyc2Vy
KCkucHJvdmlkZU1lZGlhRGF0YShhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlciksIHRyYWNrSUQsIGxh
dGVzdEJ5dGVSYW5nZU9mZnNldCk7Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VmlkZW9UcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQordm9pZCBXZWJNUGFy
c2VyOjpWaWRlb1RyYWNrRGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAg
bV9rZXlGcmFtZXMuY2xlYXIoKTsKICAgICBUcmFja0RhdGE6OnJlc2V0Q29tcGxldGVkRnJhbWVz
U3RhdGUoKTsKIH0KIAotd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVv
VHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBG
cmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBD
TVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCkKK3dlYm06OlN0YXR1cyBXZWJNUGFyc2VyOjpW
aWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29u
c3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29u
c3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQpCiB7CiAjaWYgRU5BQkxFKFZQOSkK
ICAgICBhdXRvIHN0YXR1cyA9IHJlYWRGcmFtZURhdGEocmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNS
ZW1haW5pbmcpOwogICAgIGlmICghc3RhdHVzLmNvbXBsZXRlZF9vaygpKQogICAgICAgICByZXR1
cm4gc3RhdHVzOwogCisgICAgbV9sYXN0UG9zaXRpb24gPSBtZXRhZGF0YS5wb3NpdGlvbjsKKwog
ICAgIGNvbnN0ZXhwciBzaXplX3QgbWF4SGVhZGVyU2l6ZSA9IDMyOyAvLyBUaGUgbWF4aW11bSBs
ZW5ndGggb2YgYSBWUDkgdW5jb21wcmVzc2VkIGhlYWRlciBpcyAxNDQgYml0cyBhbmQgMTEgYnl0
ZXMgZm9yIFZQOC4gUm91bmQgaGlnaC4KLSAgICBzaXplX3Qgc2VnbWVudEhlYWRlckxlbmd0aCA9
IHN0ZDo6bWluKG1heEhlYWRlclNpemUsICptX2NvbXBsZXRlUGFja2V0U2l6ZSk7Ci0gICAgYXV0
byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRlQmxvY2tCdWZmZXIobV9jdXJy
ZW50UGFja2V0Qnl0ZU9mZnNldCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CisgICAgc2l6ZV90IHNl
Z21lbnRIZWFkZXJMZW5ndGggPSBzdGQ6Om1pbihtYXhIZWFkZXJTaXplLCBtX2NvbXBsZXRlQmxv
Y2tCdWZmZXItPnNpemUoKSk7CisgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91
c0NvbXBsZXRlQmxvY2tCdWZmZXIoMCwgc2VnbWVudEhlYWRlckxlbmd0aCk7CiAgICAgaWYgKCFj
b250aWd1b3VzQnVmZmVyKSB7Ci0gICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIgZmFpbGVkIHRvIGNyZWF0ZSBjb250
aWd1b3VzIGRhdGEgYmxvY2siKTsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiVmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEgZmFpbGVkIHRvIGNyZWF0ZSBjb250
aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwogICAgIH0KICAgICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBj
b250aWd1b3VzQnVmZmVyLT5kYXRhKCk7CiAKICAgICBib29sIGlzS2V5ID0gZmFsc2U7Ci0gICAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwogICAg
IGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6VlA5KSB7CiAgICAgICAgIGlmICghbV9oZWFkZXJQ
YXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVh
ZGVyTGVuZ3RoKSkKICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWlu
aW5nKTsKIAogICAgICAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKICAgICAgICAgICAg
IGlzS2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGF1dG8gZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVh
dGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRy
YWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNj
cmlwdGlvbikgewotICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
ImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9y
bWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0
ZVZpZGVvSW5mb0Zyb21WUDlIZWFkZXJQYXJzZXIobV9oZWFkZXJQYXJzZXIsIHRyYWNrKCkudmlk
ZW8udmFsdWUoKS5jb2xvdXIpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoY29kZWMoKSA9
PSBDb2RlY1R5cGU6OlZQOCkgewogICAgICAgICBhdXRvIGhlYWRlciA9IHBhcnNlVlA4RnJhbWVI
ZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50SGVhZGVyTGVuZ3RoKTsKICAgICAgICAgaWYg
KGhlYWRlciAmJiBoZWFkZXItPmtleWZyYW1lKSB7CiAgICAgICAgICAgICBpc0tleSA9IHRydWU7
Ci0gICAgICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3Jp
cHRpb25Gcm9tVlA4SGVhZGVyKCpoZWFkZXIsIHRyYWNrKCkudmlkZW8udmFsdWUoKS5jb2xvdXIp
OwotICAgICAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgewotICAgICAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRl
c2NyaXB0aW9uIGZyb20gVlBYIGhlYWRlciIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNl
dEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKKyAgICAgICAg
ICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoKmhl
YWRlciwgdHJhY2soKS52aWRlby52YWx1ZSgpLmNvbG91cikpOwogICAgICAgICB9CiAgICAgfQog
CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmluZm8oKSkKKyAgICAgICAgbV9jb21w
bGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2NyaXB0aW9uKCkpOworICAgIGVsc2Ug
aWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERlc2NyaXB0aW9uKCkgIT0gKm1fY29t
cGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CisKICAgICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKLSAgICAvLyBGSVhNRTogQSBibG9j
ayBtaWdodCBjb250YWluIG1vcmUgdGhhbiBvbmUgZnJhbWUsIGJ1dCBvbmx5IHRoaXMgZnJhbWUg
aGFzIGJlZW4gcmVhZCBpbnRvIGBjb21wbGV0ZUJsb2NrQnVmZmVyYC4KLSAgICAvLyBCZWxvdyB3
ZSBjcmVhdGUgc2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxv
Y2sncyB0aW1lY29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgotICAgIC8vIFNob3VsZG4ndCB3
ZSBjcmVhdGUganVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFt
ZXMgaGF2ZSBiZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KIAogICAgIHVpbnQ2
NF90IGR1cmF0aW9uID0gMDsKICAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVz
ZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgp
ICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUgLyBrX3VzX2luX3NlY29uZHM7CisgICAgICAg
IGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9u
VGltZS50aW1lU2NhbGUoKSAvIGtfdXNfaW5fc2Vjb25kczsKIAotICAgIG1fa2V5RnJhbWVzLmFw
cGVuZChpc0tleSk7Ci0gICAgbV9wYWNrZXRTaXplcy5hcHBlbmQoKm1fY29tcGxldGVQYWNrZXRT
aXplKTsKLSAgICBtX3BhY2tldFRpbWluZ3MuYXBwZW5kKHsgUEFMOjpDTVRpbWVNYWtlKGR1cmF0
aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNl
bnRhdGlvblRpbWUgfSk7Ci0gICAgbV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCArPSAqbV9jb21w
bGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0ZVBhY2tldFNpemUgPSBzdGQ6Om51bGxvcHQ7
CisgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5hcHBlbmQoeyBwcmVzZW50YXRpb25UaW1lLCBw
cmVzZW50YXRpb25UaW1lLCBNZWRpYVRpbWUoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGlt
ZVNjYWxlKCkpLCBtX2NvbXBsZXRlQmxvY2tCdWZmZXIucmVsZWFzZU5vbk51bGwoKSwgaXNLZXkg
PyBNZWRpYVNhbXBsZTo6U2FtcGxlRmxhZ3M6OklzU3luYyA6IE1lZGlhU2FtcGxlOjpTYW1wbGVG
bGFnczo6Tm9uZSB9KTsKIAogICAgIGRyYWluUGVuZGluZ1NhbXBsZXMoKTsKIApAQCAtMTMwNyw0
NSArMTEwNCwxOSBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogI2VuZGlmCiB9CiAKLXZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OnBvc3RQcm9jZXNzKENNU2Ft
cGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlcikKLXsKLSAgICBhdXRvIGF0dGFjaG1lbnRzQXJy
YXkgPSBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShyYXdTYW1w
bGVCdWZmZXIsIHRydWUpOwotICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKLSAgICBpZiAo
IWF0dGFjaG1lbnRzQXJyYXkpIHsKLSAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChzaXplX3QoQ0ZBcnJheUdl
dENvdW50KGF0dGFjaG1lbnRzQXJyYXkpKSA9PSBtX2tleUZyYW1lcy5zaXplKCkpOwotICAgIGZv
ciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJh
eSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0
YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgIGlmICghbV9r
ZXlGcmFtZXNbaV0pCi0gICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50
cywgUEFMOjprQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OnJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQordm9pZCBXZWJNUGFyc2VyOjpBdWRpb1RyYWNr
RGF0YTo6cmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpCiB7CiAgICAgbU51bUZyYW1lc0luQ29t
cGxldGVCbG9jayA9IDA7CiAgICAgVHJhY2tEYXRhOjpyZXNldENvbXBsZXRlZEZyYW1lc1N0YXRl
KCk7CiB9CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit3ZWJtOjpTdGF0dXMgV2ViTVBh
cnNlcjo6QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFk
ZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5p
bmcsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50KQogewotICAgIGlmICht
X3BhY2tldFRpbWluZ3Muc2l6ZSgpKSB7Ci0gICAgICAgIGF1dG8mIGxhc3RUaW1pbmcgPSBtX3Bh
Y2tldFRpbWluZ3MubGFzdCgpOwotICAgICAgICBpZiAoUEFMOjpDTVRpbWVDb21wYXJlKFBBTDo6
Q01UaW1lQWRkKGxhc3RUaW1pbmcuZHVyYXRpb24sIGxhc3RUaW1pbmcucHJlc2VudGF0aW9uVGlt
ZVN0YW1wKSwgcHJlc2VudGF0aW9uVGltZSkpIHsKLSAgICAgICAgICAgIC8vIERpc2NvbnRpbnVp
dHkgZW5jb3VudGVyZWQsIGVtaXQgdGhlIHByZXZpb3VzbHkgZGVtdXhlZCBzYW1wbGVzLgotICAg
ICAgICAgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAg
YXV0byBzdGF0dXMgPSByZWFkRnJhbWVEYXRhKHJlYWRlciwgbWV0YWRhdGEsIGJ5dGVzUmVtYWlu
aW5nKTsKICAgICBpZiAoIXN0YXR1cy5jb21wbGV0ZWRfb2soKSkKICAgICAgICAgcmV0dXJuIHN0
YXR1czsKIAotICAgIGlmIChtX3BhY2tldFNpemVzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9zYW1w
bGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICBtX2xhc3RQb3NpdGlv
biA9IG1ldGFkYXRhLnBvc2l0aW9uOwogCiAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7
CiAgICAgICAgIGlmICghdHJhY2soKS5jb2RlY19wcml2YXRlLmlzX3ByZXNlbnQoKSkgewpAQCAt
MTM1MywxOSArMTEyNCwxOCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
QXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZAogICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICB9CiAKLSAgICAg
ICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOwor
ICAgICAgICBSZWZQdHI8QXVkaW9JbmZvPiBmb3JtYXREZXNjcmlwdGlvbjsKICAgICAgICAgYXV0
byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKICAgICAgICAg
aWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCi0gICAgICAgICAgICBmb3JtYXREZXNj
cmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEu
c2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVWb3JiaXNBdWRpb0luZm8ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0
YS5kYXRhKCkpOwogICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykg
ewotICAgICAgICAgICAgYXV0byBjb250aWd1b3VzQnVmZmVyID0gY29udGlndW91c0NvbXBsZXRl
QmxvY2tCdWZmZXIobV9jdXJyZW50UGFja2V0Qnl0ZU9mZnNldCwgKm1fY29tcGxldGVQYWNrZXRT
aXplKTsKKyAgICAgICAgICAgIGF1dG8gY29udGlndW91c0J1ZmZlciA9IGNvbnRpZ3VvdXNDb21w
bGV0ZUJsb2NrQnVmZmVyKDAsIGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUpOwogICAgICAgICAg
ICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQXVkaW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGE6IHVuYWJs
ZSB0byBjcmVhdGUgY29udGlndW91cyBkYXRhIGJsb2NrIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29uc3QgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gY29udGlndW91c0J1ZmZlci0+
ZGF0YSgpOwogICAgICAgICAgICAgT3B1c0Nvb2tpZUNvbnRlbnRzIGNvb2tpZUNvbnRlbnRzOwot
ICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShwcml2YXRlRGF0YS5zaXplKCks
IHByaXZhdGVEYXRhLmRhdGEoKSwgKm1fY29tcGxldGVQYWNrZXRTaXplLCBibG9ja0J1ZmZlckRh
dGEsIGNvb2tpZUNvbnRlbnRzKSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRl
RGF0YShwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1
ZmZlci0+c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKSkg
ewogICAgICAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0
byBwYXJzZSBPcHVzIHByaXZhdGUgZGF0YSIpOwogICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgICAgIH0KQEAgLTEzNzUsMzUgKzEx
NDUsMjkgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1fZnJhbWVzUGVyUGFja2V0ID0gY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0Owog
ICAgICAgICAgICAgbV9mcmFtZUR1cmF0aW9uID0gY29va2llQ29udGVudHMuZnJhbWVEdXJhdGlv
bjsKLSAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0
RGVzY3JpcHRpb24oY29va2llQ29udGVudHMpOworICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRp
b24gPSBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvb2tpZUNvbnRlbnRzKTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKLSAgICAgICAgICAgIFBBUlNFUl9MT0df
RVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZy
b20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lG
X1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIEF1ZGlvSW5mbyBmcm9tIGF1ZGlvIHRyYWNrIGhl
YWRlciIpOwogICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBzdHJlYW1EZXNjcmlwdGlvbiA9IFBBTDo6Q01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNj
cmlwdGlvbi5nZXQoKSk7Ci0gICAgICAgIGlmICghc3RyZWFtRGVzY3JpcHRpb24pIHsKLSAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9w
YWNrZXREdXJhdGlvbiA9IFBBTDo6Q01UaW1lTWFrZShzdHJlYW1EZXNjcmlwdGlvbi0+bUZyYW1l
c1BlclBhY2tldCwgc3RyZWFtRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlKTsKKyAgICAgICAgbV9w
YWNrZXREdXJhdGlvbiA9IE1lZGlhVGltZShmb3JtYXREZXNjcmlwdGlvbi0+ZnJhbWVzUGVyUGFj
a2V0LCBmb3JtYXREZXNjcmlwdGlvbi0+cmF0ZSk7CiAKLSAgICAgICAgc2V0Rm9ybWF0RGVzY3Jp
cHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgICAgICBzZXRGb3JtYXREZXNj
cmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9IGVsc2Ug
aWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpPcHVzKSB7CiAgICAgICAgIC8vIE9wdXMgdGVjaG5p
Y2FsbHkgYWxsb3dzIHRoZSBmcmFtZSBkdXJhdGlvbiBhbmQgZnJhbWVzLXBlci1wYWNrZXQgdmFs
dWVzIHRvIGNoYW5nZSBmcm9tIHBhY2tldCB0byBwYWNrZXQuCiAgICAgICAgIC8vIENvcmVBdWRp
byBkb2Vzbid0IHN1cHBvcnQgQVNCRCB2YWx1ZXMgbGlrZSB0aGVzZSB0byBjaGFuZ2Ugb24gYSBw
ZXItcGFja2V0IGJhc2lzLCBzbyB0aHJvdyBhbiBlcnJvciB3aGVuCiAgICAgICAgIC8vIHRoYXQg
a2luZCBvZiB2YXJpYWJpbGl0eSBpcyBlbmNvdW50ZXJlZC4KICAgICAgICAgT3B1c0Nvb2tpZUNv
bnRlbnRzIGNvb2tpZUNvbnRlbnRzOwogICAgICAgICBhdXRvJiBwcml2YXRlRGF0YSA9IHRyYWNr
KCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgpOwotICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIg
PSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcihtX2N1cnJlbnRQYWNrZXRCeXRlT2Zmc2V0
LCAqbV9jb21wbGV0ZVBhY2tldFNpemUpOworICAgICAgICBhdXRvIGNvbnRpZ3VvdXNCdWZmZXIg
PSBjb250aWd1b3VzQ29tcGxldGVCbG9ja0J1ZmZlcigwLCBrT3B1c01pbmltdW1GcmFtZURhdGFT
aXplKTsKICAgICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyKSB7CiAgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YTogdW5hYmxlIHRvIGNyZWF0ZSBjb250aWd1b3VzIGRhdGEgYmxvY2siKTsKICAgICAgICAgICAg
IHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICAgICAgfQotICAgICAg
ICBjb25zdCB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBjb250aWd1b3VzQnVmZmVyLT5kYXRh
KCk7Ci0gICAgICAgIGlmICghcGFyc2VPcHVzUHJpdmF0ZURhdGEocHJpdmF0ZURhdGEuc2l6ZSgp
LCBwcml2YXRlRGF0YS5kYXRhKCksICptX2NvbXBsZXRlUGFja2V0U2l6ZSwgYmxvY2tCdWZmZXJE
YXRhLCBjb29raWVDb250ZW50cykKKyAgICAgICAgaWYgKCFwYXJzZU9wdXNQcml2YXRlRGF0YShw
cml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEoKSwgY29udGlndW91c0J1ZmZlci0+
c2l6ZSgpLCBjb250aWd1b3VzQnVmZmVyLT5kYXRhKCksIGNvb2tpZUNvbnRlbnRzKQogICAgICAg
ICAgICAgfHwgY29va2llQ29udGVudHMuZnJhbWVzUGVyUGFja2V0ICE9IG1fZnJhbWVzUGVyUGFj
a2V0CiAgICAgICAgICAgICB8fCBjb29raWVDb250ZW50cy5mcmFtZUR1cmF0aW9uICE9IG1fZnJh
bWVEdXJhdGlvbikgewogICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
T3B1cyBmcmFtZXMtcGVyLXBhY2tldCBjaGFuZ2VkIHdpdGhpbiBhIHRyYWNrOyBlcnJvciIpOwpA
QCAtMTQxMSw0MSArMTE3NSwyOTMgQEAgd2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWQKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fcGFja2V0U2l6ZXMuYXBwZW5kKCptX2NvbXBsZXRlUGFja2V0U2l6
ZSk7Ci0gICAgbV9wYWNrZXRUaW1pbmdzLmFwcGVuZCh7IG1fcGFja2V0RHVyYXRpb24sIHByZXNl
bnRhdGlvblRpbWUsIFBBTDo6a0NNVGltZUludmFsaWQgfSk7Ci0gICAgbV9jdXJyZW50UGFja2V0
Qnl0ZU9mZnNldCArPSAqbV9jb21wbGV0ZVBhY2tldFNpemU7Ci0gICAgbV9jb21wbGV0ZVBhY2tl
dFNpemUgPSBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmlu
Zm8oKSkKKyAgICAgICAgbV9jb21wbGV0ZU1lZGlhU2FtcGxlcy5zZXRJbmZvKGZvcm1hdERlc2Ny
aXB0aW9uKCkpOworICAgIGVsc2UgaWYgKGZvcm1hdERlc2NyaXB0aW9uKCkgJiYgKmZvcm1hdERl
c2NyaXB0aW9uKCkgIT0gKm1fY29tcGxldGVNZWRpYVNhbXBsZXMuaW5mbygpKQorICAgICAgICBk
cmFpblBlbmRpbmdTYW1wbGVzKCk7CiAKLSAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gUEFMOjpD
TVRpbWVHZXRTZWNvbmRzKFBBTDo6Q01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9z
YW1wbGVQcmVzZW50YXRpb25UaW1lKSkgKyBQQUw6OkNNVGltZUdldFNlY29uZHMobV9wYWNrZXRE
dXJhdGlvbikgKiBzYW1wbGVDb3VudDsKKyAgICBtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLmFwcGVu
ZCh7IHByZXNlbnRhdGlvblRpbWUsIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSwgbV9wYWNrZXRE
dXJhdGlvbiwgbV9jb21wbGV0ZUJsb2NrQnVmZmVyLnJlbGVhc2VOb25OdWxsKCksIE1lZGlhU2Ft
cGxlOjpTYW1wbGVGbGFnczo6SXNTeW5jIH0pOwogCi0gICAgaWYgKHNhbXBsZUR1cmF0aW9uID49
IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKQotICAgICAgICBkcmFpblBlbmRpbmdTYW1wbGVzKCk7
CisgICAgZHJhaW5QZW5kaW5nU2FtcGxlcygpOwogCiAgICAgQVNTRVJUKCEqYnl0ZXNSZW1haW5p
bmcpOwogICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVm
ZmVycygpCisKK2Jvb2wgV2ViTVBhcnNlcjo6aXNTdXBwb3J0ZWRWaWRlb0NvZGVjKFN0cmluZ1Zp
ZXcgbmFtZSkKIHsKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAg
aWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OlR5cGU6OkF1ZGlvKQotICAgICAgICAgICAgdHJhY2stPmRyYWluUGVuZGluZ1NhbXBsZXMo
KTsKKyAgICByZXR1cm4gbmFtZSA9PSAiVl9WUDgiIHx8IG5hbWUgPT0gIlZfVlA5IjsKK30KKwor
Ym9vbCBXZWJNUGFyc2VyOjppc1N1cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQor
eworICAgIHJldHVybiBuYW1lID09ICJBX1ZPUkJJUyIgfHwgbmFtZSA9PSAiQV9PUFVTIjsKK30K
KworU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCisgICAg
OiBtX3BhcnNlcigqdGhpcykKK3sKK30KKworYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpp
c1dlYk1Gb3JtYXRSZWFkZXJBdmFpbGFibGUoKQoreworICAgIHJldHVybiBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbk1hbmFnZXI6OndlYk1Gb3JtYXRSZWFkZXJFbmFibGVkKCkgJiYgY2FuTG9hZEZvcm1h
dFJlYWRlcigpICYmIGlzV2VibVBhcnNlckF2YWlsYWJsZSgpOworfQorCitNZWRpYVBsYXllckVu
dW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1
cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyNpZiBFTkFCTEUoVlA5KSB8fCBF
TkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKKyAgICBpZiAoIWlzV2VibVBhcnNlckF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJ
c05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHR5cGUuY29udGFpbmVy
VHlwZSgpOworICAgIGJvb2wgaXNBdWRpb0NvbnRhaW5lclR5cGUgPSBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKGNvbnRhaW5lclR5cGUsICJhdWRpby93ZWJtIik7CisgICAgYm9vbCBpc1ZpZGVvQ29u
dGFpbmVyVHlwZSA9IGVxdWFsSWdub3JpbmdBU0NJSUNhc2UoY29udGFpbmVyVHlwZSwgInZpZGVv
L3dlYm0iKTsKKyAgICBpZiAoIWlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc1ZpZGVvQ29udGFp
bmVyVHlwZSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICBib29sIGlzQW55QXVkaW9Db2RlY0F2YWlsYWJsZSA9IGZh
bHNlOworI2lmIEVOQUJMRShWT1JCSVMpCisgICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9
IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOworI2VuZGlmCisjaWYgRU5BQkxFKE9QVVMpCisg
ICAgaXNBbnlBdWRpb0NvZGVjQXZhaWxhYmxlIHw9IGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsK
KyNlbmRpZgorCisgICAgaWYgKGlzQXVkaW9Db250YWluZXJUeXBlICYmICFpc0FueUF1ZGlvQ29k
ZWNBdmFpbGFibGUpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgYm9vbCBpc0FueUNvZGVjQXZhaWxhYmxlID0gaXNB
bnlBdWRpb0NvZGVjQXZhaWxhYmxlOworI2lmIEVOQUJMRShWUDkpCisgICAgaXNBbnlDb2RlY0F2
YWlsYWJsZSB8PSBpc1ZQOURlY29kZXJBdmFpbGFibGUoKTsKKyNlbmRpZgorCisgICAgaWYgKCFp
c0FueUNvZGVjQXZhaWxhYmxlKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3Vw
cG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgIGF1dG8gY29kZWNzID0gdHlwZS5jb2Rl
Y3MoKTsKKyAgICBpZiAoY29kZWNzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6TWF5QmVTdXBwb3J0ZWQ7CisKKyAgICBmb3IgKGF1dG8m
IGNvZGVjIDogY29kZWNzKSB7CisjaWYgRU5BQkxFKFZQOSkKKyAgICAgICAgaWYgKGNvZGVjLnN0
YXJ0c1dpdGgoInZwMDkiKSB8fCBjb2RlYy5zdGFydHNXaXRoKCJ2cDA4IikgfHwgZXF1YWwoY29k
ZWMsICJ2cDgiKSB8fCBlcXVhbChjb2RlYywgInZwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICgh
aXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxh
eWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGF1
dG8gY29kZWNQYXJhbWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhjb2RlYyk7CisgICAg
ICAgICAgICBpZiAoIWNvZGVjUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVk
aWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAg
ICAgaWYgKCFpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKCpjb2RlY1BhcmFt
ZXRlcnMpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
fQorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgICAgICBp
ZiAoY29kZWMgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAgIGlmICghaXNWb3JiaXNEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworI2lmIEVOQUJMRShPUFVTKQorICAg
ICAgICBpZiAoY29kZWMgPT0gIm9wdXMiKSB7CisgICAgICAgICAgICBpZiAoIWlzT3B1c0RlY29k
ZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKworICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsKKworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0odHlwZSk7CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8
fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50
VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgV2ViTVBhcnNlcjo6cHJvdmlkZU1lZGlhRGF0YShNZWRpYVNh
bXBsZXNCbG9jayYmIHNhbXBsZXMsIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIG1fY2FsbGJh
Y2sucGFyc2VkTWVkaWFEYXRhKFdURk1vdmUoc2FtcGxlcyksIHBvc2l0aW9uKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRJbml0aWFsaXphdGlvbkRhdGEoSW5pdGlh
bGl6YXRpb25TZWdtZW50JiYgaW5pdGlhbGl6YXRpb25TZWdtZW50KQoreworICAgIG1fY2FsbE9u
Q2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBpbml0aWFsaXphdGlvblNlZ21lbnQgPSBXVEZNb3ZlKGluaXRpYWxpemF0aW9uU2VnbWVudCld
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2Fs
bGJhY2spCisgICAgICAgICAgICBtX2RpZFBhcnNlSW5pdGlhbGl6YXRpb25EYXRhQ2FsbGJhY2so
V1RGTW92ZShpbml0aWFsaXphdGlvblNlZ21lbnQpKTsKKyAgICB9KTsKK30KKwordm9pZCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2smJiBz
YW1wbGVzQmxvY2ssIHVpbnQ2NF90IHBvc2l0aW9uKQoreworICAgIGlmICghc2FtcGxlc0Jsb2Nr
LmluZm8oKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwg
Ik5vIFRyYWNrSW5mbyBzZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICBpZiAo
c2FtcGxlc0Jsb2NrLmlzVmlkZW8oKSkgeworICAgICAgICBpZiAobV92aWRlb0luZm8gIT0gc2Ft
cGxlc0Jsb2NrLmluZm8oKSkgeworICAgICAgICAgICAgbV92aWRlb0luZm8gPSBzYW1wbGVzQmxv
Y2suaW5mbygpOworICAgICAgICAgICAgbV92aWRlb0Zvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRl
Rm9ybWF0RGVzY3JpcHRpb25Gcm9tVHJhY2tJbmZvKCpzYW1wbGVzQmxvY2suaW5mbygpKTsKKyAg
ICAgICAgfQorICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IG1fdmlkZW9Gb3JtYXREZXNjcmlw
dGlvbjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdWRpb0luZm8gIT0gc2FtcGxlc0Js
b2NrLmluZm8oKSkgeworICAgICAgICAgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKCk7Cisg
ICAgICAgICAgICBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21UcmFja0luZm8oKnNhbXBsZXNCbG9jay5pbmZvKCkpOworICAgICAgICAgICAgbV9h
dWRpb0luZm8gPSBzYW1wbGVzQmxvY2suaW5mbygpOworICAgICAgICB9CisgICAgICAgIGZvcm1h
dERlc2NyaXB0aW9uID0gbV9hdWRpb0Zvcm1hdERlc2NyaXB0aW9uOwogICAgIH0KKworICAgIGlm
IChzYW1wbGVzQmxvY2suaXNWaWRlbygpKSB7CisgICAgICAgIHJldHVyblNhbXBsZXMoV1RGTW92
ZShzYW1wbGVzQmxvY2spLCBtX3ZpZGVvRm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHBvc2l0aW9u
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFBhY2sgYXVkaW8gaWYgbmVlZGVk
LgorICAgIGlmIChtX3F1ZXVlZEF1ZGlvU2FtcGxlcy5zaXplKCkpIHsKKyAgICAgICAgYXV0byYg
bGFzdFNhbXBsZSA9IG1fcXVldWVkQXVkaW9TYW1wbGVzLmxhc3QoKTsKKyAgICAgICAgaWYgKGxh
c3RTYW1wbGUuZHVyYXRpb24gKyBsYXN0U2FtcGxlLnByZXNlbnRhdGlvblRpbWUgIT0gc2FtcGxl
c0Jsb2NrLmZpcnN0KCkucHJlc2VudGF0aW9uVGltZSkKKyAgICAgICAgICAgIGZsdXNoUGVuZGlu
Z0F1ZGlvU2FtcGxlcyhwb3NpdGlvbik7CisgICAgfQorICAgIGZvciAoYXV0byYgc2FtcGxlIDog
c2FtcGxlc0Jsb2NrKQorICAgICAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gKz0gc2FtcGxlLmR1
cmF0aW9uOworICAgIG1fcXVldWVkQXVkaW9TYW1wbGVzLmFwcGVuZChXVEZNb3ZlKHNhbXBsZXNC
bG9jaykpOworICAgIGlmIChtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPCBtX21pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uKQorICAgICAgICByZXR1cm47CisgICAgZmx1c2hQZW5kaW5nQXVkaW9TYW1w
bGVzKHBvc2l0aW9uKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5p
bXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6cmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYmIGJsb2NrLCBDTUZv
cm1hdERlc2NyaXB0aW9uUmVmIGRlc2NyaXB0aW9uLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBw
b3NpdGlvbikKIHsKLSAgICBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uID0gZHVyYXRpb247
CisgICAgaWYgKGJsb2NrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBl
eHBlY3RlZEJ1ZmZlciA9IHRvQ01TYW1wbGVCdWZmZXIoV1RGTW92ZShibG9jayksIGRlc2NyaXB0
aW9uKTsKKyAgICBpZiAoIWV4cGVjdGVkQnVmZmVyKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9Q
T1NTSUJMRShMT0dJREVOVElGSUVSLCAidG9DTVNhbXBsZUJ1ZmZlciBlcnJvcjoiLCBleHBlY3Rl
ZEJ1ZmZlci5lcnJvcigpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X2NhbGxPbkNsaWVudFRocmVhZENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfSwgdHJhY2tJRCA9IGJsb2NrLmluZm8oKS0+dHJhY2tJRCwgc2FtcGxlQnVmZmVyID0g
V1RGTW92ZShleHBlY3RlZEJ1ZmZlci52YWx1ZSgpKSwgcG9zaXRpb25dICgpIG11dGFibGUgewor
ICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6
OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOworICAgICAgICBpZiAocG9zaXRp
b24pCisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+c2V0Qnl0ZVJhbmdlT2Zmc2V0KCpwb3NpdGlv
bik7CisKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRp
YVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0pOwogfQogCi1ib29sIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzU3VwcG9ydGVkVmlkZW9Db2RlYyhTdHJpbmdWaWV3IG5h
bWUpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnBhcnNlZFRyaW1taW5nRGF0YSh1aW50
NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIHBhZGRpbmcpCiB7Ci0gICAgcmV0dXJuIG5h
bWUgPT0gIlZfVlA4IiB8fCBuYW1lID09ICJWX1ZQOSI7CisgICAgbV9jYWxsT25DbGllbnRUaHJl
YWRDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRyYWNrSUQs
IHBhZGRpbmddICgpIHsKKyAgICAgICAgaWYgKG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFj
aykKKyAgICAgICAgICAgIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayh0cmFja0lELCBw
YWRkaW5nKTsKKyAgICB9KTsKIH0KIAotYm9vbCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc1N1
cHBvcnRlZEF1ZGlvQ29kZWMoU3RyaW5nVmlldyBuYW1lKQordm9pZCBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpjb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0YUZvclRyYWNrSUQoUmVm
PFNoYXJlZEJ1ZmZlcj4mJiBrZXlJRCwgdWludDY0X3QgdHJhY2tJRCkKIHsKLSAgICByZXR1cm4g
bmFtZSA9PSAiQV9WT1JCSVMiIHx8IG5hbWUgPT0gIkFfT1BVUyI7CisgICAgaWYgKG1fZGlkUHJv
dmlkZUNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6YXRpb25EYXRhRm9yVHJhY2tJRENhbGxiYWNr
KQorICAgICAgICBtX2RpZFByb3ZpZGVDb250ZW50S2V5UmVxdWVzdEluaXRpYWxpemF0aW9uRGF0
YUZvclRyYWNrSURDYWxsYmFjayhXVEZNb3ZlKGtleUlEKSwgdHJhY2tJRCk7Cit9CisKK3ZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0
aW9uYWw8dWludDY0X3Q+IHBvc2l0aW9uKQoreworICAgIGlmICghbV9hdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fYXVkaW9JbmZvKTsKKyAgICBt
X3F1ZXVlZEF1ZGlvU2FtcGxlcy5zZXRJbmZvKG1fYXVkaW9JbmZvLmNvcHlSZWYoKSk7CisgICAg
cmV0dXJuU2FtcGxlcyhXVEZNb3ZlKG1fcXVldWVkQXVkaW9TYW1wbGVzKSwgbV9hdWRpb0Zvcm1h
dERlc2NyaXB0aW9uLmdldCgpLCBwb3NpdGlvbik7CisKKyAgICBtX3F1ZXVlZEF1ZGlvU2FtcGxl
cyA9IHsgfTsKKyAgICBtX3F1ZXVlZEF1ZGlvRHVyYXRpb24gPSB7IH07Cit9CisKK3ZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6YXBwZW5kRGF0YShTZWdtZW50JiYgc2VnbWVudCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyLCBBcHBlbmRGbGFncyBhcHBl
bmRGbGFncykKK3sKKyAgICBJTkZPX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiZmxh
Z3MoIiwgYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkgPyAiRGlzY29u
dGludWl0eSIgOiAiIiwgIiksIHNpemUoIiwgc2VnbWVudC5zaXplKCksICIpIik7CisKKyAgICBp
ZiAoYXBwZW5kRmxhZ3MgPT0gQXBwZW5kRmxhZ3M6OkRpc2NvbnRpbnVpdHkpCisgICAgICAgIG1f
cGFyc2VyLnJlc2V0KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IG1fcGFyc2VyLnBhcnNlKFdURk1v
dmUoc2VnbWVudCkpOworICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChy
ZXN1bHQucmV0dXJuVmFsdWUoKSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9H
SURFTlRJRklFUiwgInN0YXR1cy5jb2RlKCIsIHJlc3VsdC5yZXR1cm5WYWx1ZSgpLCAiKSIpOwor
CisgICAgICAgIG1fY2FsbE9uQ2xpZW50VGhyZWFkQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9LCBjb2RlID0gcmVzdWx0LnJldHVyblZhbHVlKCldIHsKKyAgICAg
ICAgICAgIGlmIChtX2RpZEVuY291bnRlckVycm9yRHVyaW5nUGFyc2luZ0NhbGxiYWNrKQorICAg
ICAgICAgICAgICAgIG1fZGlkRW5jb3VudGVyRXJyb3JEdXJpbmdQYXJzaW5nQ2FsbGJhY2soY29k
ZSk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIEF1ZGlvIHRyYWNrcyBhcmUgZ3JvdXBl
ZCBpbnRvIG1ldGEtc2FtcGxlcyBvZiBhIGR1cmF0aW9uIG5vIG1vcmUgdGhhbiBtX21pbmltdW1T
YW1wbGVEdXJhdGlvbi4KKyAgICAvLyBCdXQgYXQgdGhlIGVuZCBvZiBhIGZpbGUsIG5vIG1vcmUg
YXVkaW8gZGF0YSBtYXkgYmUgaW5jb21pbmcsIHNvIGZsdXNoIGFuZCBlbWl0IGFueSBwZW5kaW5n
CisgICAgLy8gYXVkaW8gYnVmZmVycy4KKyAgICBmbHVzaFBlbmRpbmdBdWRpb1NhbXBsZXMoKTsK
KworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6Zmx1c2hQZW5kaW5nTWVkaWFEYXRhKCkKK3sKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhRm9yVHJhY2tJRChib29sLCB1aW50
NjRfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnNob3VsZFByb3ZpZGVNZWRpYWRhdGFGb3JUcmFja0lEKHVpbnQ2NF90KQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmludmFsaWRhdGUoKQoreworICAgIElORk9fTE9HX0lGX1BPU1NJ
QkxFKExPR0lERU5USUZJRVIpOworICAgIG1fcGFyc2VyLmludmFsaWRhdGUoKTsKK30KKwordm9p
ZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIs
IGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIpCit7CisgICAgbV9wYXJzZXIuc2V0TG9nZ2VyKGxv
Z2dlciwgbG9nSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9t
aW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiA9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KGR1
cmF0aW9uKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IGFmZGJm
NDliMmY0NjkyMTZlMWI5ZGY3ZWQxODIxYjNhYTIyNzdmOWEuLmZmY2VkMzQyNWQ2ZTUyNTQyYTBh
ZmZhYWU4NzcwZjVjMmM2MTA4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAg
LTI3LDE1ICsyNywxNiBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIAorI2luY2x1ZGUg
IkV4Y2VwdGlvbk9yLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiU291
cmNlQnVmZmVyUGFyc2VyLmgiCiAjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
Ci0jaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2YvQ29y
ZU1lZGlhU1BJLmg+CiAjaW5jbHVkZSA8dmFyaWFudD4KICNpbmNsdWRlIDx3ZWJtL2NhbGxiYWNr
Lmg+CiAjaW5jbHVkZSA8d2VibS9zdGF0dXMuaD4KICNpbmNsdWRlIDx3ZWJtL3ZwOV9oZWFkZXJf
cGFyc2VyLmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQ3LDQyICs0OCwzNiBAQCBj
bGFzcyBXZWJtUGFyc2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06
OkNhbGxiYWNrIHsKK2NsYXNzIFdlYk1QYXJzZXIgOiBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBjbGFzcyBTZWdtZW50
UmVhZGVyOwotCi0gICAgc3RhdGljIGJvb2wgaXNXZWJNRm9ybWF0UmVhZGVyQXZhaWxhYmxlKCk7
Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBl
U3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7Ci0gICAgc3RhdGljIFNwYW48Y29uc3QgQVND
SUlMaXRlcmFsPiBzdXBwb3J0ZWRNSU1FVHlwZXMoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlw
ZSYpOworICAgIGNsYXNzIENhbGxiYWNrIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VkVHJpbW1pbmdEYXRh
KHVpbnQ2NF90LCBjb25zdCBNZWRpYVRpbWUmKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlZEluaXRpYWxpemF0aW9uRGF0YShTb3VyY2VCdWZmZXJQYXJzZXI6OkluaXRpYWxpemF0aW9u
U2VnbWVudCYmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVk
aWFTYW1wbGVzQmxvY2smJiwgdWludDY0X3QpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNh
bkRlY3J5cHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFGb3JUcmFja0lEKFJlZjxTaGFyZWRC
dWZmZXI+JiYsIHVpbnQ2NF90KSB7IH0KKyAgICAgICAgdmlydHVhbCB+Q2FsbGJhY2soKSA9IGRl
ZmF1bHQ7CisgICAgfTsKIAotICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKLSAgICB+U291
cmNlQnVmZmVyUGFyc2VyV2ViTSgpOworICAgIFdlYk1QYXJzZXIoQ2FsbGJhY2smKTsKKyAgICB+
V2ViTVBhcnNlcigpOwogCi0gICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBjbGFz
cyBTZWdtZW50UmVhZGVyOwogCisgICAgRXhjZXB0aW9uT3I8aW50PiBwYXJzZShTb3VyY2VCdWZm
ZXJQYXJzZXI6OlNlZ21lbnQmJik7CisgICAgdm9pZCByZXNldFN0YXRlKCk7CisgICAgdm9pZCBy
ZXNldCgpOworICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGNvbnN0IHdlYm06OlN0YXR1cyYg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KIAotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFR5cGU6OldlYk07IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFwcGVu
ZERhdGEoU2VnbWVudCYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0sIEFw
cGVuZEZsYWdzID0gQXBwZW5kRmxhZ3M6Ok5vbmUpIGZpbmFsOwotICAgIHZvaWQgZmx1c2hQZW5k
aW5nTWVkaWFEYXRhKCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTaG91bGRQcm92aWRlTWVkaWFEYXRh
Rm9yVHJhY2tJRChib29sLCB1aW50NjRfdCkgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRQcm92aWRl
TWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50NjRfdCkgZmluYWw7Ci0gICAgdm9pZCByZXNldFBhcnNl
clN0YXRlKCkgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CisgICAgdm9pZCBw
cm92aWRlTWVkaWFEYXRhKE1lZGlhU2FtcGxlc0Jsb2NrJiYsIHVpbnQ2NF90KTsKIAotICAgIHZv
aWQgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtQXVkaW9T
YW1wbGVEdXJhdGlvbihmbG9hdCk7Ci0gICAgCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRM
b2dnZXIoY29uc3QgTG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7Ci0KLSAg
ICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiwgdWlu
dDY0X3QsIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBieXRlUmFuZ2VPZmZzZXQpOwotICAgIHVzaW5n
IERpZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2sgPSBGdW5jdGlvbjx2b2lkKHVpbnQ2NF90IHRy
YWNrSUQsIGNvbnN0IE1lZGlhVGltZSYgZGlzY2FyZFBhZGRpbmcpPjsKLSAgICB2b2lkIHNldERp
ZFBhcnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2soRGlkUGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayYm
IGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbV9kaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7Ci0gICAgfQorICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IExv
Z2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpOworICAgIGNvbnN0IExvZ2dlciogbG9nZ2Vy
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CiAKICAgICBl
bnVtIGNsYXNzIEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtOTQsNiArODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIENvbnRlbnRFbmNyeXB0ZWQsCiAgICAgICAgIFZhcmlhYmxlRnJhbWVEdXJhdGlvbiwK
ICAgICAgICAgUmVhZGVyRmFpbGVkLAorICAgICAgICBQYXJzZXJTaHV0ZG93biwKICAgICB9Owog
CiAgICAgZW51bSBjbGFzcyBTdGF0ZSA6IHVpbnQ4X3QgewpAQCAtMTIwLDE4ICsxMTYsMTIgQEAg
cHVibGljOgogICAgIGNsYXNzIFRyYWNrRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KKyAgICAgICAg
c3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNr
RW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJzZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNr
RGF0YT4KICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tE
YXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlVua25vd24sIHBhcnNlcik7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tF
bnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6OlVua25vd24sIHBhcnNlcik7CiAgICAgICAgIH0K
IAotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgewotICAgICAgICAgICAgVW5rbm93biwKLSAgICAg
ICAgICAgIEF1ZGlvLAotICAgICAgICAgICAgVmlkZW8sCi0gICAgICAgIH07Ci0KLSAgICAgICAg
VHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRy
YWNrRW50cnksIFR5cGUgdHJhY2tUeXBlLCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIp
CisgICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFj
a0VudHJ5JiB0cmFja0VudHJ5LCBUcmFja0luZm86OlRyYWNrVHlwZSB0cmFja1R5cGUsIFdlYk1Q
YXJzZXImIHBhcnNlcikKICAgICAgICAgICAgIDogbV9jb2RlYyB7IGNvZGVjVHlwZSB9CiAgICAg
ICAgICAgICAsIG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5IHsgdHJhY2tFbnRyeSB9IH0KICAg
ICAgICAgICAgICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUgfQpAQCAtMTQyLDE0ICsxMzIsMTgg
QEAgcHVibGljOgogCiAgICAgICAgIENvZGVjVHlwZSBjb2RlYygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZWM7IH0KICAgICAgICAgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2soKSB7IHJldHVybiBtX3Ry
YWNrOyB9Ci0gICAgICAgIFR5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5
cGU7IH0KKyAgICAgICAgVHJhY2tJbmZvOjpUcmFja1R5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFja1R5cGU7IH0KIAotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9u
OyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9ybWF0RGVzY3JpcHRpb24oUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+JiYgZGVzY3JpcHRpb24pIHsgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdU
Rk1vdmUoZGVzY3JpcHRpb24pOyB9CisgICAgICAgIFJlZlB0cjxUcmFja0luZm8+IGZvcm1hdERl
c2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbi5jb3B5UmVmKCk7
IH0KKyAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihSZWY8VHJhY2tJbmZvPiYmIGRl
c2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgICAgICAgICBtX2Zvcm1hdERlc2NyaXB0aW9uLT50
cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICAgICAgfQogCi0gICAgICAg
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2Vy
OyB9CisgICAgICAgIFdlYk1QYXJzZXImIHBhcnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2Vy
OyB9CiAKLSAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBD
TVRpbWUmLCBpbnQpCisgICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90Kiwg
Y29uc3QgTWVkaWFUaW1lJiwgaW50KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2VibTo6U3RhdHVz
OjprSW52YWxpZEVsZW1lbnRJZCk7CkBAIC0xNTcsMTEgKzE1MSwxMCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2NvbXBsZXRlQmxvY2tCdWZmZXJzLnJlc2V0KCk7Ci0gICAgICAgICAg
ICBtX3BhY2tldFNpemVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX3BhY2tldFRpbWluZ3MuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fY3VycmVudFBhY2tldEJ5dGVPZmZzZXQgPSAwOworICAgICAg
ICAgICAgbV9jb21wbGV0ZUJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fY29t
cGxldGVNZWRpYVNhbXBsZXMgPSB7IH07CiAgICAgICAgIH0KKwogICAgICAgICB2b2lkIHJlc2V0
KCkKICAgICAgICAgewogICAgICAgICAgICAgcmVzZXRDb21wbGV0ZWRGcmFtZXNTdGF0ZSgpOwpA
QCAtMTcwLDUxICsxNjMsNTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2tC
dWZmZXIucmVzZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFpblBl
bmRpbmdTYW1wbGVzKHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsYXRlc3RCeXRlUmFuZ2VPZmZzZXQg
PSBzdGQ6Om51bGxvcHQpCisgICAgICAgIHZvaWQgZHJhaW5QZW5kaW5nU2FtcGxlcygpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihsYXRlc3RCeXRlUmFuZ2VPZmZz
ZXQpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBsZXRlTWVkaWFTYW1wbGVzLnNpemUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX3BhcnNlci5wcm92aWRlTWVkaWFE
YXRhKFdURk1vdmUobV9jb21wbGV0ZU1lZGlhU2FtcGxlcyksIG1fbGFzdFBvc2l0aW9uKTsKICAg
ICAgICAgICAgIHJlc2V0Q29tcGxldGVkRnJhbWVzU3RhdGUoKTsKICAgICAgICAgfQogCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihzdGQ6Om9wdGlvbmFs
PHNpemVfdD4pOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2Nlc3MoQ01TYW1wbGVCdWZm
ZXJSZWYpIHsgfTsKICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY29udGlndW91c0NvbXBs
ZXRlQmxvY2tCdWZmZXIoc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7CiAgICAg
ICAgIHdlYm06OlN0YXR1cyByZWFkRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06
OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICBTaGFy
ZWRCdWZmZXJCdWlsZGVyIG1fY29tcGxldGVCbG9ja0J1ZmZlcnM7Ci0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8c2l6ZV90PiBtX2NvbXBsZXRlUGFja2V0U2l6ZTsKLSAgICAgICAgc2l6ZV90IG1fY3Vy
cmVudFBhY2tldEJ5dGVPZmZzZXQgeyAwIH07Ci0gICAgICAgIFZlY3RvcjxzaXplX3Q+IG1fcGFj
a2V0U2l6ZXM7Ci0gICAgICAgIFZlY3RvcjxDTVNhbXBsZVRpbWluZ0luZm8+IG1fcGFja2V0VGlt
aW5nczsKKyAgICAgICAgUmVmUHRyPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+IG1fY29tcGxldGVC
bG9ja0J1ZmZlcjsKKyAgICAgICAgTWVkaWFTYW1wbGVzQmxvY2sgbV9jb21wbGV0ZU1lZGlhU2Ft
cGxlczsKKyAgICAgICAgdWludDY0X3QgbV9sYXN0UG9zaXRpb24geyAwIH07CiAKICAgICBwcml2
YXRlOgogICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKICAgICAgICAgd2VibTo6VHJhY2tFbnRy
eSBtX3RyYWNrOwotICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOwotICAgICAgICBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgY29u
c3QgVHJhY2tJbmZvOjpUcmFja1R5cGUgbV90cmFja1R5cGU7CisgICAgICAgIFJlZlB0cjxUcmFj
a0luZm8+IG1fZm9ybWF0RGVzY3JpcHRpb247CiAgICAgICAgIFNoYXJlZEJ1ZmZlckJ1aWxkZXIg
bV9jdXJyZW50QmxvY2tCdWZmZXI7Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1f
cGFyc2VyOworICAgICAgICBXZWJNUGFyc2VyJiBtX3BhcnNlcjsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxzaXplX3Q+IG1fY29tcGxldGVQYWNrZXRTaXplOwogICAgICAgICAvLyBTaXplIG9mIHRo
ZSBjdXJyZW50bHkgaW5jb21wbGV0ZSBwYXJzZWQgcGFja2V0LgogICAgICAgICBzaXplX3QgbV9w
YXJ0aWFsQnl0ZXNSZWFkIHsgMCB9OwogICAgIH07CiAKICAgICBjbGFzcyBWaWRlb1RyYWNrRGF0
YSA6IHB1YmxpYyBUcmFja0RhdGEgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGF1dG8g
Y3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNr
RW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVv
VHJhY2tEYXRhPgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlw
ZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFyc2Vy
KSAtPiBVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnks
IHBhcnNlcik7CiAgICAgICAgIH0KIAotICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUg
Y29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNJiBwYXJzZXIpCi0gICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUs
IHRyYWNrRW50cnksIFR5cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIFZpZGVvVHJhY2tEYXRh
KENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnks
IFdlYk1QYXJzZXImIHBhcnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhKGNvZGVjVHlwZSwg
dHJhY2tFbnRyeSwgVHJhY2tJbmZvOjpUcmFja1R5cGU6OlZpZGVvLCBwYXJzZXIpCiAgICAgICAg
IHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xh
c3NOYW1lKCkgY29uc3QgeyByZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQotICAgICAgICB3ZWJt
OjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFt
ZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOwotICAgICAg
ICB2b2lkIHBvc3RQcm9jZXNzKENNU2FtcGxlQnVmZmVyUmVmKSBmaW5hbDsKKyAgICAgICAgd2Vi
bTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJh
bWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgTWVkaWFUaW1lJiwgaW50KSBmaW5hbDsKICAg
ICAgICAgdm9pZCByZXNldENvbXBsZXRlZEZyYW1lc1N0YXRlKCkgZmluYWw7CisKICNpZiBFTkFC
TEUoVlA5KQogICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJz
ZXI7CiAgICAgICAgIFZlY3Rvcjxib29sPiBtX2tleUZyYW1lczsKQEAgLTIyMywzOSArMjE1LDI5
IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0
YSB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1
ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFdlYk1QYXJz
ZXImIHBhcnNlcikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPgogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0
cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1TYW1wbGVEdXJhdGlvbik7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5
LCBwYXJzZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBl
IGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCi0gICAg
ICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVkaW8s
IHBhcnNlciB9Ci0gICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWluaW11
bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVj
VHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgV2ViTVBhcnNlciYgcGFy
c2VyKQorICAgICAgICAgICAgOiBUcmFja0RhdGEgeyBjb2RlY1R5cGUsIHRyYWNrRW50cnksIFRy
YWNrSW5mbzo6VHJhY2tUeXBlOjpBdWRpbywgcGFyc2VyIH0KICAgICAgICAgewogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25z
dCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3Qq
LCBjb25zdCBNZWRpYVRpbWUmLCBpbnQpIGZpbmFsOwogICAgICAgICB2b2lkIHJlc2V0Q29tcGxl
dGVkRnJhbWVzU3RhdGUoKSBmaW5hbDsKICAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1l
KCkgY29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQogCi0gICAgICAgIENNVGltZSBt
X3NhbXBsZVByZXNlbnRhdGlvblRpbWU7Ci0gICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9u
OworICAgICAgICBNZWRpYVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKICAgICAgICAgdWludDhfdCBt
X2ZyYW1lc1BlclBhY2tldCB7IDAgfTsKICAgICAgICAgU2Vjb25kcyBtX2ZyYW1lRHVyYXRpb24g
eyAwX3MgfTsKICAgICAgICAgc2l6ZV90IG1OdW1GcmFtZXNJbkNvbXBsZXRlQmxvY2sgeyAwIH07
Ci0gICAgICAgIC8vIEZJWE1FOiAwLjUgLSAxLjAgc2Vjb25kcyBpcyBhIGJldHRlciBkdXJhdGlv
biBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0IHVzZSAyIHNlY29uZHMgc28gYXQgbGVhc3QgdGhlIGZp
cnN0Ci0gICAgICAgIC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5IHVudGlsIHdlIGZpeCBNZWRp
YVNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29y
YC4KLSAgICAgICAgZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsK
IAotICAgIGNvbnN0IExvZ2dlciogbG9nZ2VyUHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIu
Z2V0KCk7IH0KLSAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9sb2dJZGVudGlmaWVyOyB9Ci0KIHByaXZhdGU6Ci0KICAgICBUcmFja0RhdGEqIHRyYWNrRGF0
YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKLQogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVk
VmlkZW9Db2RlYyhTdHJpbmdWaWV3KTsKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF1ZGlv
Q29kZWMoU3RyaW5nVmlldyk7CiAKQEAgLTI3NSw3ICsyNTcsNyBAQCBwcml2YXRlOgogICAgIHdl
Ym06OlN0YXR1cyBPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwg
Y29uc3Qgd2VibTo6QmxvY2tHcm91cCYpOwogICAgIHdlYm06OlN0YXR1cyBPbkZyYW1lKGNvbnN0
IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB3ZWJtOjpSZWFkZXIqLCB1aW50NjRfdCogYnl0ZXNSZW1h
aW5pbmcpIGZpbmFsOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEluaXRpYWxpemF0aW9uU2VnbWVu
dD4gbV9pbml0aWFsaXphdGlvblNlZ21lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUJ1
ZmZlclBhcnNlcjo6SW5pdGlhbGl6YXRpb25TZWdtZW50PiBtX2luaXRpYWxpemF0aW9uU2VnbWVu
dDsKICAgICBWZWN0b3I8c3RkOjpwYWlyPHVpbnQ2NF90LCBSZWY8U2hhcmVkQnVmZmVyPj4+IG1f
a2V5SWRzOwogICAgIHdlYm06OlN0YXR1cyBtX3N0YXR1czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
d2VibTo6V2VibVBhcnNlcj4gbV9wYXJzZXI7CkBAIC0yOTIsMTIgKzI3NCw2OCBAQCBwcml2YXRl
OgogICAgIHVzaW5nIEJsb2NrVmFyaWFudCA9IHN0ZDo6dmFyaWFudDx3ZWJtOjpCbG9jaywgd2Vi
bTo6U2ltcGxlQmxvY2s+OwogICAgIHN0ZDo6b3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJl
bnRCbG9jazsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247
Ci0gICAgZmxvYXQgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIFJl
ZlB0cjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRp
ZmllciB7IG51bGxwdHIgfTsKICAgICB1aW50NjRfdCBtX25leHRDaGlsZElkZW50aWZpZXIgeyAw
IH07CisgICAgQ2FsbGJhY2smIG1fY2FsbGJhY2s7Cit9OworCitjbGFzcyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgV2ViTVBhcnNlcjo6Q2FsbGJh
Y2sgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGlzV2ViTUZvcm1hdFJlYWRlckF2YWlsYWJsZSgpOworICAgIHN0YXRpYyBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGUgaXNDb250ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50
VHlwZSYpOworICAgIHN0YXRpYyBTcGFuPGNvbnN0IEFTQ0lJTGl0ZXJhbD4gc3VwcG9ydGVkTUlN
RVR5cGVzKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKKworICAgIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0oKTsKKyAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpID0gZGVmYXVsdDsK
KworICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBUeXBlOjpXZWJNOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBlbmRE
YXRhKFNlZ21lbnQmJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmID0gW10geyB9LCBBcHBl
bmRGbGFncyA9IEFwcGVuZEZsYWdzOjpOb25lKSBmaW5hbDsKKyAgICB2b2lkIGZsdXNoUGVuZGlu
Z01lZGlhRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc2V0U2hvdWxkUHJvdmlkZU1lZGlhRGF0YUZv
clRyYWNrSUQoYm9vbCwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgc2hvdWxkUHJvdmlkZU1l
ZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpIGZpbmFsOworICAgIHZvaWQgcmVzZXRQYXJzZXJT
dGF0ZSgpIGZpbmFsIHsgbV9wYXJzZXIucmVzZXRTdGF0ZSgpOyB9CisgICAgdm9pZCBpbnZhbGlk
YXRlKCkgZmluYWw7CisKKyAgICB1c2luZyBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrID0g
RnVuY3Rpb248dm9pZCh1aW50NjRfdCB0cmFja0lELCBjb25zdCBNZWRpYVRpbWUmIGRpc2NhcmRQ
YWRkaW5nKT47CisgICAgdm9pZCBzZXREaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrKERpZFBh
cnNlVHJpbW1pbmdEYXRhQ2FsbGJhY2smJiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1fZGlk
UGFyc2VUcmltbWluZ0RhdGFDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9TYW1wbGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
ID0gc3RkOjpudWxsb3B0KTsKKyAgICB2b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvZ2dlcihjb25zdCBM
b2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsKKyAgICBjb25zdCBMb2dnZXIq
IGxvZ2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qg
dm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQor
Citwcml2YXRlOgorICAgIC8vIFdlYk1QYXJzZXI6OkNhbGxiYWNrCisgICAgdm9pZCBwYXJzZWRJ
bml0aWFsaXphdGlvbkRhdGEoU291cmNlQnVmZmVyUGFyc2VyOjpJbml0aWFsaXphdGlvblNlZ21l
bnQmJikgZmluYWw7CisgICAgdm9pZCBwYXJzZWRNZWRpYURhdGEoTWVkaWFTYW1wbGVzQmxvY2sm
JiwgdWludDY0X3QpIGZpbmFsOworICAgIGJvb2wgY2FuRGVjcnlwdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICEhbV9kaWRQcm92aWRlQ29udGVudEtleVJlcXVlc3RJbml0aWFsaXphdGlvbkRhdGFG
b3JUcmFja0lEQ2FsbGJhY2s7IH0KKyAgICB2b2lkIGNvbnRlbnRLZXlSZXF1ZXN0SW5pdGlhbGl6
YXRpb25EYXRhRm9yVHJhY2tJRChSZWY8U2hhcmVkQnVmZmVyPiYmLCB1aW50NjRfdCkgZmluYWw7
CisgICAgdm9pZCBwYXJzZWRUcmltbWluZ0RhdGEodWludDY0X3QsIGNvbnN0IE1lZGlhVGltZSYp
IGZpbmFsOworICAgIAorICAgIHZvaWQgcmV0dXJuU2FtcGxlcyhNZWRpYVNhbXBsZXNCbG9jayYm
LCBDTUZvcm1hdERlc2NyaXB0aW9uUmVmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90Pik7CisKICAg
ICBEaWRQYXJzZVRyaW1taW5nRGF0YUNhbGxiYWNrIG1fZGlkUGFyc2VUcmltbWluZ0RhdGFDYWxs
YmFjazsKKyAgICBXZWJNUGFyc2VyIG1fcGFyc2VyOworICAgIFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBtX2F1ZGlvRm9ybWF0RGVzY3JpcHRpb247CisgICAgUmVmUHRyPGNvbnN0
IFRyYWNrSW5mbz4gbV9hdWRpb0luZm87CisgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IG1fdmlkZW9Gb3JtYXREZXNjcmlwdGlvbjsKKyAgICBSZWZQdHI8Y29uc3QgVHJhY2tJ
bmZvPiBtX3ZpZGVvSW5mbzsKKyAgICBNZWRpYVRpbWUgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbiB7IDk2MDAwLCA0ODAwMCB9OworICAgIE1lZGlhU2FtcGxlc0Jsb2NrIG1fcXVldWVkQXVk
aW9TYW1wbGVzOworICAgIE1lZGlhVGltZSBtX3F1ZXVlZEF1ZGlvRHVyYXRpb247CisgICAgUmVm
UHRyPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlm
aWVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpAQCAtMzA2LDEyICszNDQsMTIgQEAgU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKQogICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXImIHBh
cnNlcikgeyByZXR1cm4gcGFyc2VyLnR5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXI6OlR5cGU6OldlYk07IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpW
aWRlb1RyYWNrRGF0YSkKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNr
RGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGE6OlR5cGU6OlZpZGVvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OldlYk1QYXJzZXI6OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpXZWJNUGFyc2VyOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4g
dHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlRyYWNrSW5mbzo6VHJhY2tUeXBlOjpW
aWRlbzsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNr
VHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlw
ZTo6QXVkaW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V2ViTVBh
cnNlcjo6QXVkaW9UcmFja0RhdGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OldlYk1QYXJzZXI6OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEu
dHJhY2tUeXBlKCkgPT0gV2ViQ29yZTo6VHJhY2tJbmZvOjpUcmFja1R5cGU6OkF1ZGlvOyB9CiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09V
UkNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggOTU0NGQ5YzI1N2ZlMGJkNTU4MjgwM2FlMWE4
MDg0NTAxNzNjNTBiNS4uZDAwNDFiZjg5YjMwYzJjYzYxODc5MDhmNGJlNzZhM2FiZmY0MjY0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRp
bGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0zMCw4ICszMCw2IEBACiAjaW5jbHVkZSAiVlA5VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8d2VibS9kb21fdHlwZXMuaD4KIAotdHlwZWRlZiBjb25zdCBz
dHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsK
LQogbmFtZXNwYWNlIHZwOV9wYXJzZXIgewogY2xhc3MgVnA5SGVhZGVyUGFyc2VyOwogfQpAQCAt
NDAsNiArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBNZWRpYUNhcGFiaWxp
dGllc0luZm87CiBzdHJ1Y3QgVmlkZW9Db25maWd1cmF0aW9uOworc3RydWN0IFZpZGVvSW5mbzsK
IAogV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlcldlYktpdFZQOURlY29kZXIoKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVnaXN0ZXJXZWJLaXRWUDhEZWNvZGVyKCk7CkBAIC01MCw3ICs0OSw3
IEBAIGJvb2wgaXNWUDhEZWNvZGVyQXZhaWxhYmxlKCk7CiBib29sIGlzVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmRTdXBwb3J0ZWQoY29uc3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsK
IHN0ZDo6b3B0aW9uYWw8TWVkaWFDYXBhYmlsaXRpZXNJbmZvPiB2YWxpZGF0ZVZQUGFyYW1ldGVy
cyhjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIGNvbnN0IFZpZGVvQ29uZmlndXJh
dGlvbiYpOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0
RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRl
clBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworUmVmPFZpZGVv
SW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2Vy
OjpWcDlIZWFkZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsK
IAogc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKICAgICBib29sIGtleWZyYW1lIHsgZmFsc2UgfTsK
QEAgLTY2LDcgKzY1LDcgQEAgc3RydWN0IFZQOEZyYW1lSGVhZGVyIHsKIH07CiAKIHN0ZDo6b3B0
aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWludDhfdCog
ZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKTsKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0
aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJh
bWVIZWFkZXImLCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKK1JlZjxWaWRl
b0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zyb21WUDhIZWFkZXIoY29uc3QgVlA4RnJhbWVIZWFkZXIm
LCBjb25zdCB3ZWJtOjpFbGVtZW50PHdlYm06OkNvbG91cj4mKTsKIAogY2xhc3MgV0VCQ09SRV9F
WFBPUlQgVlA5VGVzdGluZ092ZXJyaWRlcyB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
CmluZGV4IGRkMTc3OWYyNjM4OTI2OTU5NDRmNDIzNzZmY2RhZTViNmQzMGIyNmMuLmNmOGM5YjIx
MjhjMDE0OGQ1YTkwZDlkNTE1NmRmNjlmNGEwZmJkMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
CkBAIC0zMSwxMSArMzEsMTIgQEAKICNpbXBvcnQgIkZvdXJDQy5oIgogI2ltcG9ydCAiTGliV2Vi
UlRDUHJvdmlkZXIuaCIKICNpbXBvcnQgIk1lZGlhQ2FwYWJpbGl0aWVzSW5mby5oIgorI2ltcG9y
dCAiTWVkaWFTYW1wbGUuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJT
Y3JlZW5Qcm9wZXJ0aWVzLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgIlN5
c3RlbUJhdHRlcnkuaCIKICNpbXBvcnQgIlZpZGVvQ29uZmlndXJhdGlvbi5oIgotI2ltcG9ydCA8
Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24uaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3Jl
L0RhdGFWaWV3Lmg+CiAjaW1wb3J0IDx3ZWJtL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW1wb3J0
IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CkBAIC0zNTAsMjUgKzM1MSwz
NSBAQCBzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJp
ZXMmIGNvZWZmaWNpZW50cykKICAgICB9CiB9CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0
VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQorc3RhdGljIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllcyBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXModWlu
dDhfdCBwcmltYXJpZXMpCiB7CiAgICAgc3dpdGNoIChwcmltYXJpZXMpIHsKICAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOgotICAgICAgICByZXR1cm4g
a0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVfMzIxMzsKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25Db2xvclByaW1hcmllczo6QlRfNDcwXzZfTToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9Db2xvclByaW1hcmllczo6QnQ0NzBtOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OkJUXzQ3MF83X0JHOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9y
UHJpbWFyaWVzOjpCdDQ3MGJnOwogICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzYwMV83OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVz
OjpTbXB0ZTE3MG07CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01Q
VEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19T
TVBURV9DOworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0
ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbToKKyAg
ICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6RmlsbTsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWlu
YW5jZToKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9Db2xvclByaW1hcmllczo6QnQyMDIw
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8x
OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpTbXB0ZVN0NDI4
MTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFf
MjoKLSAgICAgICAgcmV0dXJuIFBBTDo6a0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmll
c19EQ0lfUDM7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNt
cHRlUnA0MzE7CiAgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVf
RUdfNDMyXzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQ
cmltYXJpZXNfUDNfRDY1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6
OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4gUEFMOjprQ01G
b3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgICAgIHJldHVy
biBQbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXM6OlNtcHRlRWc0MzI7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOgorICAgICAgICByZXR1
cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpKZWRlY1AyMlBob3NwaG9yczsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDoKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb0NvbG9yUHJpbWFyaWVzOjpVbnNwZWNp
ZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVpbnQ4X3Qg
Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MmIGNoYXJhY3RlcmlzdGljcykKQEAgLTQxMSwyOSArNDIyLDQ1IEBAIHN0YXRpYyB1aW50
OF90IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzJiBjCiAgICAgfQogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01U
cmFuc2ZlckZ1bmN0aW9uKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQorc3RhdGljIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3ModWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCiB7CiAgICAgc3dpdGNo
IChjaGFyYWN0ZXJpc3RpY3MpIHsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJh
bnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQ3MDk7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZfTToKKyAgICAgICAgcmV0dXJuIFBsYXRm
b3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6R2FtbWEyMmN1cnZlOworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JHOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpHYW1tYTI4
Y3VydmU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QlRfNjAxXzc6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNtcHRlMTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBQ
QUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BR
OworICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpT
bXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TGluZWFyOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpMaW5lYXI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6TG9ncml0aG1pYzoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6TG9nOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3FydDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
VmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9nU3FydDsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2NjI0Owor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzEzNjFf
MDoKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJZWM2MTk2NjIxOwogICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJ0MjAyMF8x
MGJpdDsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
VF8yMDIwXzEyYml0OgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlkZW9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QnQyMDIwXzEyYml0OworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJl
dHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3QyMDg0Owog
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzQyOF8xOgotICAgICAgICByZXR1cm4gUEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVy
RnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNtcHRlU3Q0MjgxOwogICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOgotICAgICAgICByZXR1cm4g
UEFMOjprQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjEwMF9ITEc7
Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYx
OTY2XzJfMToKLSAgICAgICAgcmV0dXJuIFBBTDo6Y2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0
RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9r
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0g
ICAgICAgIHJldHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9M
aW5lYXI7CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkFyaWJTdGRCNjdIbGc7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6VW5zcGVjaWZpZWQ6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7CiAgICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJp
eENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNvZWZmaWNpZW50cykKQEAg
LTQ2MiwyMSArNDg5LDMxIEBAIHN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNp
ZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNvZWZmaWNpZW50CiAgICAgfQogfQogCi1z
dGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeCh1aW50OF90IGNvZWZmaWNp
ZW50cykKK3N0YXRpYyBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzIGNvbnZlcnRUb1Bs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHModWludDhfdCBjb2VmZmljaWVudHMpCiB7CiAg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJl
dHVybiBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1JfMjAyMDsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk6CisgICAg
ICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpSZ2I7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQ3MDk7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzoKKyAgICAgICAgcmV0dXJuIFBs
YXRmb3JtVmlkZW9NYXRyaXhDb2VmZmljaWVudHM6OkZjYzsKICAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcwXzdfQkc6CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpCdDQ3MGJnOwogICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VC
dWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtVmlk
ZW9NYXRyaXhDb2VmZmljaWVudHM6OlNtcHRlMTcwbTsKICAgICBjYXNlIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1h
Z2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgICAgIHJldHVybiBQbGF0
Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpTbXB0ZTI0MG07CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOgorICAgICAgICByZXR1cm4gUGxhdGZv
cm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6WUNnQ287CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgorICAg
ICAgICByZXR1cm4gUGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwTm9uY29u
c3RhbnRMdW1pbmFuY2U7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOgorICAgICAgICByZXR1cm4gUGxhdGZvcm1W
aWRlb01hdHJpeENvZWZmaWNpZW50czo6QnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBQbGF0Zm9ybVZpZGVvTWF0cml4Q29lZmZpY2llbnRzOjpV
bnNwZWNpZmllZDsKICAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIHVp
bnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgs
IHVpbnQ2NF90IHkpCkBAIC00OTEsNyArNTI4LDcgQEAgc3RhdGljIHVpbnQ4X3QgY29udmVydFN1
YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCiAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180
MjBfQ29sb2NhdGVkOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25S
ZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3Jk
KGNvbnN0IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiByZWNvcmQsIGludDMyX3Qgd2lkdGgs
IGludDMyX3QgaGVpZ2h0KQorc3RhdGljIFJlZjxWaWRlb0luZm8+IGNyZWF0ZVZpZGVvSW5mb0Zy
b21WUENvZGVjQ29uZmlndXJhdGlvblJlY29yZChjb25zdCBWUENvZGVjQ29uZmlndXJhdGlvblJl
Y29yZCYgcmVjb3JkLCBpbnQzMl90IHdpZHRoLCBpbnQzMl90IGhlaWdodCkKIHsKICAgICAvLyBS
ZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0w
My0zMSIKICAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgpAQCAt
NTIwLDEyICs1NTcsMTQgQEAgc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29uZmkKICAgICAvLyBGSVhNRTog
Q29udmVydCBleGlzdGluZyBzdHJ1Y3QgdG8gYW4gSVNPQm94IGFuZCByZXBsYWNlIHRoZSB3cml0
aW5nIGNvZGUgYmVsb3cKICAgICAvLyB3aXRoIGEgc3ViY2xhc3Mgb2YgSVNPRnVsbEJveC4KIAor
ICAgIGF1dG8gdmlkZW9JbmZvID0gVmlkZW9JbmZvOjpjcmVhdGUoKTsKKyAgICB2aWRlb0luZm8t
PnNpemUgPSB2aWRlb0luZm8tPmRpc3BsYXlTaXplID0geyBmbG9hdCh3aWR0aCksIGZsb2F0KGhl
aWdodCkgfTsKKwogICAgIGNvbnN0ZXhwciBzaXplX3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250
ZW50c1NpemUgPSAxMjsKIAogICAgIHVpbnQzMl90IHZlcnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7
CiAgICAgdWludDhfdCBiaXREZXB0aENocm9tYUFuZFJhbmdlID0gKDB4RiAmIHJlY29yZC5iaXRE
ZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgx
ICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyk7CiAgICAgdWludDE2X3QgY29kZWNJbnRpYWxp
emF0aW9uRGF0YVNpemUgPSAwOwotCiAgICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3Jl
YXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUs
IDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSk7CiAgICAgdmlldy0+c2V0
KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2UpOwogICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJv
ZmlsZSwgZmFsc2UpOwpAQCAtNTM1LDQ2ICs1NzQsMTYgQEAgc3RhdGljIFJldGFpblB0cjxDTUZv
cm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUENvZGVjQ29u
ZmkKICAgICB2aWV3LT5zZXQoOCwgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxz
ZSk7CiAgICAgdmlldy0+c2V0KDksIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsK
ICAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7Ci0K
LSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAoY29uc3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOwotCi0g
ICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKLSAg
ICBDRlR5cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07Ci0gICAg
YXV0byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgVmVj
dG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBQQUw6OmtDTUZvcm1hdERlc2NyaXB0aW9u
RXh0ZW5zaW9uX1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKLSAgICBWZWN0b3I8
Q0ZUeXBlUmVmPiBleHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9
OwotCi0gICAgaWYgKHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoUEFMOjpr
Q01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4
dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKLSAgICB9Ci0KLSAgICBpZiAo
YXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ01Db2xvclByaW1hcmllcyhyZWNvcmQu
Y29sb3JQcmltYXJpZXMpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFn
ZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBl
bmQoY21Db2xvclByaW1hcmllcyk7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1
bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJh
Y3RlcmlzdGljcykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVm
ZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5k
KGNtVHJhbnNmZXJGdW5jdGlvbik7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBj
b252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAg
ICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsK
LSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOwotICAgIH0KLQotICAg
IGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCks
IGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotCi0gICAgQ01WaWRlb0Zvcm1hdERl
c2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBDTVZpZGVvQ29k
ZWNUeXBlIGNvZGVjID0gcmVjb3JkLmNvZGVjTmFtZSA9PSAidnAwOSIgPyBrQ01WaWRlb0NvZGVj
VHlwZV9WUDkgOiAndnAwOCc7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9Gb3JtYXREZXNjcmlw
dGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb2RlYywgd2lkdGgsIGhlaWdodCwgZXh0
ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIHZpZGVvSW5m
by0+YXRvbURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1aW50OF90Kj4o
dmlldy0+ZGF0YSgpKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKTsKKyAgICB2aWRlb0luZm8tPmNvbG9y
U3BhY2UuZnVsbFJhbmdlID0gcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3Vy
YXRpb25SYW5nZTo6RnVsbFJhbmdlOworICAgIHZpZGVvSW5mby0+Y29sb3JTcGFjZS5wcmltYXJp
ZXMgPSBjb252ZXJ0VG9QbGF0Zm9ybVZpZGVvQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJp
bWFyaWVzKTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UudHJhbnNmZXIgPSBjb252ZXJ0VG9Q
bGF0Zm9ybVZpZGVvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MocmVjb3JkLnRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzKTsKKyAgICB2aWRlb0luZm8tPmNvbG9yU3BhY2UubWF0cml4ID0gY29udmVydFRv
UGxhdGZvcm1WaWRlb01hdHJpeENvZWZmaWNpZW50cyhyZWNvcmQubWF0cml4Q29lZmZpY2llbnRz
KTsKKyAgICB2aWRlb0luZm8tPmNvZGVjTmFtZSA9IHJlY29yZC5jb2RlY05hbWUgPT0gInZwMDki
ID8gJ3ZwMDknIDogJ3ZwMDgnOworICAgIHJldHVybiB2aWRlb0luZm87CiB9CiAKLVJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlI
ZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNv
bnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCitSZWY8VmlkZW9JbmZvPiBjcmVhdGVW
aWRlb0luZm9Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBh
cnNlciYgcGFyc2VyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQogewogICAg
IFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKIApAQCAtNjA2LDcgKzYxNSw3IEBA
IFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlv
bkZyb21WUDlIZWFkZXJQYXJzZXIoY29uCiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJp
ZXMgPSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3JkLCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkKHJlY29yZCwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSk7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWlu
dDhfdCogZnJhbWVEYXRhLCBzaXplX3QgZnJhbWVTaXplKQpAQCAtNjcxLDcgKzY4MCw3IEBAIHN0
ZDo6b3B0aW9uYWw8VlA4RnJhbWVIZWFkZXI+IHBhcnNlVlA4RnJhbWVIZWFkZXIoY29uc3QgdWlu
dDhfdCogZnJhbWVEYXRhLCBzaXplCiAgICAgcmV0dXJuIGhlYWRlcjsKIH0KIAotUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOEhl
YWRlcihjb25zdCBWUDhGcmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENv
bG91cj4mIGNvbG9yKQorUmVmPFZpZGVvSW5mbz4gY3JlYXRlVmlkZW9JbmZvRnJvbVZQOEhlYWRl
cihjb25zdCBWUDhGcmFtZUhlYWRlciYgaGVhZGVyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91
cj4mIGNvbG9yKQogewogICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKICAg
ICByZWNvcmQuY29kZWNOYW1lID0gInZwMDgiOwpAQCAtNzAxLDcgKzcxMCw3IEBAIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDhI
ZWFkZXIoY29uc3QgVlA4CiAgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252
ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKICAgICB9
CiAKLSAgICByZXR1cm4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmQocmVjb3JkLCBoZWFkZXIud2lkdGgsIGhlYWRlci5oZWlnaHQpOworICAgIHJl
dHVybiBjcmVhdGVWaWRlb0luZm9Gcm9tVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQocmVjb3Jk
LCBoZWFkZXIud2lkdGgsIGhlYWRlci5oZWlnaHQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2Nv
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EuaAppbmRleCA4NzEwNGQ4YjdiMzU3YzE2MGI2ZGNjYzQxYmZlMWY4OWUwYTZj
MjcxLi5hOTgwOThjNWEzOWZjYjQ1MGIyZmY5Yzc2MTBkOTc0ZTgyNDZkNGQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
Yk1BdWRpb1V0aWxpdGllc0NvY29hLmgKQEAgLTI3LDE2ICsyNywxNyBAQAogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAKLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCiBjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOwotdHlwZWRlZiBjb25zdCBz
dHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgQXVkaW9JbmZvOworCiBXRUJDT1JFX0VY
UE9SVCBib29sIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOwogV0VCQ09SRV9FWFBPUlQgYm9v
bCByZWdpc3RlclZvcmJpc0RlY29kZXJJZk5lZWRlZCgpOwotUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBj
b25zdCB2b2lkKik7CitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVWb3JiaXNBdWRpb0luZm8oc2l6
ZV90LCBjb25zdCB2b2lkKik7CiAKIHN0cnVjdCBPcHVzQ29va2llQ29udGVudHMgewogICAgIHVp
bnQ4X3QgdmVyc2lvbiB7IDAgfTsKQEAgLTU1LDggKzU2LDEwIEBAIHN0cnVjdCBPcHVzQ29va2ll
Q29udGVudHMgewogCiBXRUJDT1JFX0VYUE9SVCBib29sIGlzT3B1c0RlY29kZXJBdmFpbGFibGUo
KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmVnaXN0ZXJPcHVzRGVjb2RlcklmTmVlZGVkKCk7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBrT3B1c0hlYWRlclNpemUgPSAxOTsKK3N0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGtPcHVzTWluaW11bUZyYW1lRGF0YVNpemUgPSAyOwogYm9vbCBwYXJzZU9w
dXNQcml2YXRlRGF0YShzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRl
RGF0YSwgc2l6ZV90IGZyYW1lRGF0YVNpemUsIGNvbnN0IHZvaWQqIGZyYW1lRGF0YSwgT3B1c0Nv
b2tpZUNvbnRlbnRzJik7Ci1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRl
T3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgT3B1c0Nvb2tpZUNvbnRlbnRzJik7CitS
ZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0IE9wdXNDb29raWVDb250
ZW50cyYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KaW5kZXggN2Uw
YWZiMjkwZGQ4NWE3N2Y5YmVmZmY0OTQ3YTQ3Yjc1MzVlYjJmNC4uNjYwOWY0YWViNjdhMmRmNjQx
ZjA3MmU1ODE2MGY5YWY1ZDM2ZGY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2Eu
bW0KQEAgLTMwLDEyICszMCwxMyBAQAogCiAjaW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhU2FtcGxlLmgiCiAjaW1w
b3J0ICJNZWRpYVV0aWxpdGllcy5oIgogI2ltcG9ydCAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5h
Z2VyLmgiCisjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPEF1ZGlvVG9vbGJveC9B
dWRpb0NvZGVjLmg+CiAjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Db21wb25lbnQuaD4KICNp
bXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0Zvcm1hdC5oPgotI2ltcG9ydCA8Q29yZU1lZGlhL0NN
Rm9ybWF0RGVzY3JpcHRpb24uaD4KICNpbXBvcnQgPGRsZmNuLmg+CiAjaW1wb3J0IDx3dGYvRmxp
cEJ5dGVzLmg+CiAjaW1wb3J0IDx3dGYvU2Vjb25kcy5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0
aWMgYm9vbCByZWdpc3RlckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBP
U1R5cGUgZGVjb2RlclR5cGUpCiAjZW5kaWYKIH0KIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KE9T
VHlwZSBmb3JtYXRJRCwgVmVjdG9yPHVpbnQ4X3Q+JiYgbWFnaWNDb29raWUpCitzdGF0aWMgUmVm
UHRyPEF1ZGlvSW5mbz4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KE9TVHlwZSBmb3JtYXRJRCwg
VmVjdG9yPHVpbnQ4X3Q+JiYgbWFnaWNDb29raWUpCiB7CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uIGFzYmQgeyB9OwogICAgIGFzYmQubUZvcm1hdElEID0gZm9ybWF0SUQ7CkBAIC04
Nyw4ICs4OCwxNiBAQCBzdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNy
ZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoTwogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWND
b29raWUuZGF0YSgpKTsKKyAgICBhdXRvIGF1ZGlvSW5mbyA9IEF1ZGlvSW5mbzo6Y3JlYXRlKCk7
CisgICAgYXVkaW9JbmZvLT5jb2RlY05hbWUgPSBmb3JtYXRJRDsKKyAgICBhdWRpb0luZm8tPnJh
dGUgPSBhc2JkLm1TYW1wbGVSYXRlOworICAgIGF1ZGlvSW5mby0+Y2hhbm5lbHMgPSBhc2JkLm1D
aGFubmVsc1BlckZyYW1lOworICAgIGF1ZGlvSW5mby0+ZnJhbWVzUGVyUGFja2V0ID0gYXNiZC5t
RnJhbWVzUGVyUGFja2V0OworICAgIGF1ZGlvSW5mby0+Yml0RGVwdGggPSAxNjsKKyAgICBhdWRp
b0luZm8tPmNvb2tpZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKG1hZ2ljQ29v
a2llKSk7CisgICAgcmV0dXJuIGF1ZGlvSW5mbzsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShWT1JC
SVMpIHx8IEVOQUJMRShPUFVTKQogCiAjaWYgRU5BQkxFKE9QVVMpCkBAIC0yMDAsNyArMjA5LDcg
QEAgYm9vbCBwYXJzZU9wdXNQcml2YXRlRGF0YShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29u
c3Qgdm9pZCogY29kZWNQcml2YXRlRGF0YSwKIAogICAgIGF1dG8qIHByaXZhdGVEYXRhUHRyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGNvZGVjUHJpdmF0ZURhdGEpOwogCi0gICAgaWYg
KGNvZGVjUHJpdmF0ZVNpemUgPCAxOSkKKyAgICBpZiAoY29kZWNQcml2YXRlU2l6ZSA8IGtPcHVz
SGVhZGVyU2l6ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIDEuIE1hZ2ljIFNpZ25h
dHVyZToKQEAgLTM2Miw3ICszNzEsNyBAQCBib29sIHJlZ2lzdGVyT3B1c0RlY29kZXJJZk5lZWRl
ZCgpCiAjZW5kaWYKIH0KIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IE9wdXNDb29raWVDb250ZW50cyYgY29v
a2llQ29udGVudHMpCitSZWZQdHI8QXVkaW9JbmZvPiBjcmVhdGVPcHVzQXVkaW9JbmZvKGNvbnN0
IE9wdXNDb29raWVDb250ZW50cyYgY29va2llQ29udGVudHMpCiB7CiAjaWYgRU5BQkxFKE9QVVMp
CiAgICAgaWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCkBAIC0zNzIsNyArMzgxLDcgQEAg
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERl
c2NyaXB0aW9uKGNvbnN0IE9wdXNDb28KICAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uRm9yRm9ybWF0KCdvcHVzJywgV1RGTW92ZShjb29raWVEYXRhKSk7CisgICAgcmV0dXJu
IGNyZWF0ZUF1ZGlvSW5mb0ZvckZvcm1hdCgnb3B1cycsIFdURk1vdmUoY29va2llRGF0YSkpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29va2llQ29udGVudHMpOwogICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNDY1LDcgKzQ3NCw3IEBAIGJvb2wgcmVnaXN0ZXJWb3JiaXNEZWNvZGVySWZOZWVk
ZWQoKQogI2VuZGlmCiB9CiAKLVJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNv
bnN0IHZvaWQqIHByaXZhdGVEYXRhKQorUmVmUHRyPEF1ZGlvSW5mbz4gY3JlYXRlVm9yYmlzQXVk
aW9JbmZvKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQog
ewogI2lmIEVOQUJMRShWT1JCSVMpCiAgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUo
KSkKQEAgLTQ3NSw3ICs0ODQsNyBAQCBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Y3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdgogICAgIGlmICgh
Y29va2llRGF0YS5zaXplKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ3ZvcmInLCBXVEZNb3ZlKGNv
b2tpZURhdGEpKTsKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9JbmZvRm9yRm9ybWF0KCd2b3JiJywg
V1RGTW92ZShjb29raWVEYXRhKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0
YVNpemUpOwogICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNh
bXBsZUdTdHJlYW1lci5oCmluZGV4IGZmOGMxYThiNDgxZDdmMzNjYzI0N2I2NGRmMWI4ZmFjNzBj
YmRkZDIuLjJiN2RkNDQ0YzUzZDJkNmJkMDdhOWI4MzhkNjc5YjY0YjM3NDlhZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5oCkBAIC01Nyw4ICs1Nyw2IEBAIHB1YmxpYzoKICAg
ICBGbG9hdFNpemUgcHJlc2VudGF0aW9uU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cHJlc2VudGF0aW9uU2l6ZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25zdCBNZWRpYVRp
bWUmLCBjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKLSAgICBib29sIGlzRGl2aXNhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBzdGQ6OnBhaXI8UmVmUHRyPE1l
ZGlhU2FtcGxlPiwgUmVmUHRyPE1lZGlhU2FtcGxlPj4gZGl2aWRlKGNvbnN0IE1lZGlhVGltZSYs
IFVzZUVuZFRpbWUpIG92ZXJyaWRlICB7IHJldHVybiB7IG51bGxwdHIsIG51bGxwdHIgfTsgfQog
ICAgIFJlZjxNZWRpYVNhbXBsZT4gY3JlYXRlTm9uRGlzcGxheWluZ0NvcHkoKSBjb25zdCBvdmVy
cmlkZTsKICAgICBTYW1wbGVGbGFncyBmbGFncygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZmxhZ3M7IH0KICAgICBQbGF0Zm9ybVNhbXBsZSBwbGF0Zm9ybVNhbXBsZSgpIGNvbnN0IG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAppbmRleCAwYTk0YWNm
MWExZTEzNjZmNmE1NzI1ODhiNzcwNDFlNGMzYzY0NzMyLi4zY2Y3ZWU2NTNlYzgxM2RmYmFlMzNl
ZjkzYTBjMzNmZTJjNjM5NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tTb3VyY2VCdWZmZXJQcml2YXRl
LmNwcApAQCAtNjcsOCArNjcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1wc0J5KGNvbnN0IE1l
ZGlhVGltZSYgb2Zmc2V0KSBvdmVycmlkZSB7IG1fYm94Lm9mZnNldFRpbWVzdGFtcHNCeShvZmZz
ZXQpOyB9CiAgICAgdm9pZCBzZXRUaW1lc3RhbXBzKGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0
aW9uVGltZXN0YW1wLCBjb25zdCBNZWRpYVRpbWUmIGRlY29kZVRpbWVzdGFtcCkgb3ZlcnJpZGUg
eyBtX2JveC5zZXRUaW1lc3RhbXBzKHByZXNlbnRhdGlvblRpbWVzdGFtcCwgZGVjb2RlVGltZXN0
YW1wKTsgfQotICAgIGJvb2wgaXNEaXZpc2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotICAgIHN0ZDo6cGFpcjxSZWZQdHI8TWVkaWFTYW1wbGU+LCBSZWZQdHI8TWVkaWFT
YW1wbGU+PiBkaXZpZGUoY29uc3QgTWVkaWFUaW1lJiwgVXNlRW5kVGltZSkgb3ZlcnJpZGUgeyBy
ZXR1cm4ge251bGxwdHIsIG51bGxwdHJ9OyB9CiAgICAgUmVmPE1lZGlhU2FtcGxlPiBjcmVhdGVO
b25EaXNwbGF5aW5nQ29weSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdW5zaWduZWQgZ2VuZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYm94LmdlbmVyYXRpb24oKTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0
ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggNzhmNzMxMzRjZTZhN2EyMTRjZGM5ZGUwNWM0
NzUzNzJlMTdjOWEzZC4uODljNzkyZmU1ZDQ1ZTQ1OTg4NDE0M2Y1NDQyOTAxNmQ2NzJjNGU3NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVk
aWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuY3BwCkBAIC0zNCw4ICszNCw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlOjpNZWRpYVNhbXBsZUJ5dGVSYW5nZShNZWRpYVNhbXBsZSYgc2FtcGxlLCBN
VFBsdWdpbkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKLSAgICA6
IE1lZGlhU2FtcGxlQVZGT2JqQyhudWxscHRyKQotICAgICwgbV9wcmVzZW50YXRpb25UaW1lKHNh
bXBsZS5wcmVzZW50YXRpb25UaW1lKCkpCisgICAgOiBtX3ByZXNlbnRhdGlvblRpbWUoc2FtcGxl
LnByZXNlbnRhdGlvblRpbWUoKSkKICAgICAsIG1fZGVjb2RlVGltZShzYW1wbGUuZGVjb2RlVGlt
ZSgpKQogICAgICwgbV9kdXJhdGlvbihzYW1wbGUuZHVyYXRpb24oKSkKICAgICAsIG1fYnl0ZVJh
bmdlKCpzYW1wbGUuYnl0ZVJhbmdlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5o
CmluZGV4IGI2NmYzYTM1YTk2ZjdiNWQ1Zjk3YWJkNmVkYTAwMjYxNTgyNmUxZTIuLjVkYTI4ODVk
NDVkMTc4ODgzNjIyOTE3ZTVlNGFjYjk3ZjhlY2FlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBs
ZUJ5dGVSYW5nZS5oCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1j
bGFzcyBNZWRpYVNhbXBsZUJ5dGVSYW5nZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpNZWRpYVNh
bXBsZUFWRk9iakMgeworY2xhc3MgTWVkaWFTYW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6TWVkaWFTYW1wbGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TWVkaWFTYW1w
bGVCeXRlUmFuZ2U+IGNyZWF0ZShXZWJDb3JlOjpNZWRpYVNhbXBsZSYgc2FtcGxlLCBNVFBsdWdp
bkJ5dGVTb3VyY2VSZWYgYnl0ZVNvdXJjZSwgdWludDY0X3QgdHJhY2tJRCkKICAgICB7CkBAIC01
NCw2ICs1NCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVNhbXBsZTo6VHlwZSBw
bGF0Zm9ybVNhbXBsZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBXZWJDb3JlOjpQbGF0Zm9y
bVNhbXBsZTo6Qnl0ZVJhbmdlU2FtcGxlVHlwZTsgfQogICAgIHZvaWQgb2Zmc2V0VGltZXN0YW1w
c0J5KGNvbnN0IE1lZGlhVGltZSYpIGZpbmFsOwogICAgIHZvaWQgc2V0VGltZXN0YW1wcyhjb25z
dCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKKyAgICBSZWY8TWVkaWFTYW1w
bGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29uc3QgeyByZXR1cm4gKmNvbnN0X2Nhc3Q8
TWVkaWFTYW1wbGVCeXRlUmFuZ2UqPih0aGlzKTsgfQogCiBwcml2YXRlOgogICAgIE1lZGlhU2Ft
cGxlQnl0ZVJhbmdlKE1lZGlhU2FtcGxlJiwgTVRQbHVnaW5CeXRlU291cmNlUmVmLCB1aW50NjRf
dCB0cmFja0lEKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MDA3MzM1OTBlZjg2YjM2NjNjNDhiMWZkZjI5NmRmNjVkOWIzNzkxLi40OTdiMTQ1
Zjc2NjE2NjNiYjcxNWFlYjdjNWJiMGMwNTUyYjY3MzlmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDMtMDUg
IEplYW4tWXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNIGFuZCBoYXZlIHBsYXRmb3JtIGFnbm9zdGljIFdlYk1QYXJzZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzQ3Mgor
ICAgICAgICByZGFyOi8vcHJvYmxlbS84OTgxMDk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1Nh
bXBsZU1hcC5jcHA6IFVwZGF0ZSBmb2xsb3dpbmcgYmFzZSBjbGFzcyBkZWZpbml0aW9uIGNoYW5n
ZS4KKwogMjAyMi0wMy0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAg
ICAgICAgIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSBjb252ZXJzaW9uIHRvIENNVGltZSBpbmNv
cnJlY3RseSBjcmVhdGVzIGEgdmFsaWQgdGltZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9TYW1wbGVNYXAuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5jcHAKaW5kZXggNWE2NTM1ODMwMTVkMjg4ZGVmNDdiY2I0
NzkyYzI0YzhkMmY5YTdlZi4uNzEyMDU4YTM2ODg4Nzc2YjE3NzhlNGRjZDlkOGE5MGMwMjA2YWVh
OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1h
cC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NhbXBsZU1hcC5j
cHAKQEAgLTY0LDggKzY0LDYgQEAgcHVibGljOgogICAgICAgICBtX3ByZXNlbnRhdGlvblRpbWUg
PSBwcmVzZW50YXRpb25UaW1lOwogICAgICAgICBtX2RlY29kZVRpbWUgPSBkZWNvZGVUaW1lOwog
ICAgIH07Ci0gICAgYm9vbCBpc0RpdmlzYWJsZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgc3RkOjpwYWlyPFJlZlB0cjxNZWRpYVNhbXBsZT4sIFJlZlB0cjxNZWRpYVNhbXBs
ZT4+IGRpdmlkZShjb25zdCBNZWRpYVRpbWUmLCBVc2VFbmRUaW1lKSBmaW5hbCB7IHJldHVybiB7
IH07IH0KICAgICBSZWY8TWVkaWFTYW1wbGU+IGNyZWF0ZU5vbkRpc3BsYXlpbmdDb3B5KCkgY29u
c3QgZmluYWwgewogICAgICAgICByZXR1cm4gY3JlYXRlKG1fcHJlc2VudGF0aW9uVGltZSwgbV9k
ZWNvZGVUaW1lLCBtX2R1cmF0aW9uLCBzdGF0aWNfY2FzdDxTYW1wbGVGbGFncz4obV9mbGFncyB8
IElzTm9uRGlzcGxheWluZykpOwogICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>