<?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>203047</bug_id>
          
          <creation_ts>2019-10-16 11:45:05 -0700</creation_ts>
          <short_desc>Share code between AudioDestinationIOS and AudioDestinationMac</short_desc>
          <delta_ts>2019-10-21 09:29:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1580609</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-16 11:45:05 -0700</bug_when>
    <thetext>Share code between AudioDestinationIOS and AudioDestinationMac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580611</commentid>
    <comment_count>1</comment_count>
      <attachid>381092</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-16 11:50:09 -0700</bug_when>
    <thetext>Created attachment 381092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580612</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-16 11:52:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/56340866&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580615</commentid>
    <comment_count>3</comment_count>
      <attachid>381094</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-16 12:00:55 -0700</bug_when>
    <thetext>Created attachment 381094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580627</commentid>
    <comment_count>4</comment_count>
      <attachid>381094</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-10-16 12:27:51 -0700</bug_when>
    <thetext>Comment on attachment 381094
Patch

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

This looks fine to me modulo my one question. Jer should take a look since he wrote the iOS implementation originally.

&gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:142
&gt; +

The Mac no longer clamps values at 0db. Should it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580629</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-16 12:29:37 -0700</bug_when>
    <thetext>Another question: do we need AudioDestinationIOS::frameSizeChangedProc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580630</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-16 12:31:11 -0700</bug_when>
    <thetext>I also plan to write some tests with Internals that can change the AudioDestination to an AudioDestinationMock.
That should give us some ability to tests things such as a variable number of frames to process for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580632</commentid>
    <comment_count>7</comment_count>
      <attachid>381094</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-10-16 12:34:19 -0700</bug_when>
    <thetext>Comment on attachment 381094
Patch

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

&gt; Source/WebCore/platform/audio/ios/AudioDestinationIOS.cpp:170
&gt;  void AudioDestinationIOS::frameSizeChangedProc(void *inRefCon, AudioUnit, AudioUnitPropertyID, AudioUnitScope, AudioUnitElement)
&gt;  {
&gt;      AudioDestinationIOS* audioOutput = static_cast&lt;AudioDestinationIOS*&gt;(inRefCon);
&gt;      UInt32 bufferSize = 0;
&gt;      UInt32 dataSize = sizeof(bufferSize);
&gt; -    AudioUnitGetProperty(audioOutput-&gt;m_outputUnit, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, (void*)&amp;bufferSize, &amp;dataSize);
&gt; +    AudioUnitGetProperty(audioOutput-&gt;outputUnit(), kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, 0, (void*)&amp;bufferSize, &amp;dataSize);
&gt;      fprintf(stderr, &quot;&gt;&gt;&gt;&gt; frameSizeChanged = %lu\n&quot;, static_cast&lt;unsigned long&gt;(bufferSize));
&gt;  }

We definitely don&apos;t need the fprintf!

I suspect this is old debugging code that should never have shipped and can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580642</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-10-16 12:53:49 -0700</bug_when>
    <thetext>(In reply to Eric Carlson from comment #7)
&gt; Comment on attachment 381094 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=381094&amp;action=review
&gt; 
&gt; We definitely don&apos;t need the fprintf!
&gt; 
&gt; I suspect this is old debugging code that should never have shipped and can
&gt; be removed.

Yep.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580645</commentid>
    <comment_count>9</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-10-16 12:55:00 -0700</bug_when>
    <thetext>This LGTM; I like how the iOS and Mac versions have been hollowed out to just ::configure() calls. I also like the idea of a AudioDestinationMock().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580913</commentid>
    <comment_count>10</comment_count>
      <attachid>381181</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-17 01:53:20 -0700</bug_when>
    <thetext>Created attachment 381181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580920</commentid>
    <comment_count>11</comment_count>
      <attachid>381183</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-17 02:31:19 -0700</bug_when>
    <thetext>Created attachment 381183
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580942</commentid>
    <comment_count>12</comment_count>
      <attachid>381183</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-10-17 05:50:24 -0700</bug_when>
    <thetext>Comment on attachment 381183
Patch

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

&gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:44
&gt; +#include &lt;wtf/SoftLinking.h&gt;
&gt; +SOFT_LINK_FRAMEWORK(AudioToolbox)
&gt; +SOFT_LINK(AudioToolbox, AudioComponentInstanceDispose, OSStatus, (AudioComponentInstance inInstance), (inInstance))
&gt; +SOFT_LINK(AudioToolbox, AudioOutputUnitStart, OSStatus, (AudioUnit ci), (ci))
&gt; +SOFT_LINK(AudioToolbox, AudioOutputUnitStop, OSStatus, (AudioUnit ci), (ci))

Shouldn&apos;t we soft link on macOS as well?

&gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:59
&gt; +        LOG(Media, &quot;AudioDestination::create(%u, %u, %f) - unhandled input channels&quot;, numberOfInputChannels, numberOfOutputChannels, sampleRate);

It might be worth changing this to WTFLogAlways.

&gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:63
&gt; +        LOG(Media, &quot;AudioDestination::create(%u, %u, %f) - unhandled output channels&quot;, numberOfInputChannels, numberOfOutputChannels, sampleRate);

Ditto.

&gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:150
&gt; +    for (UInt32 i = 0; i &lt; numberOfBuffers; ++i) {
&gt; +        UInt32 bytesPerFrame = buffers[i].mDataByteSize / numberOfFrames;
&gt; +        UInt32 byteOffset = frameOffset * bytesPerFrame;
&gt; +        auto* memory = reinterpret_cast&lt;float*&gt;(reinterpret_cast&lt;char*&gt;(buffers[i].mData) + byteOffset);
&gt; +        bus.setChannelMemory(i, memory, framesThisTime);
&gt; +    }

macOS currently clamps values at 0db. Should we continue to do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581366</commentid>
    <comment_count>13</comment_count>
      <attachid>381290</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-18 03:02:54 -0700</bug_when>
    <thetext>Created attachment 381290
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581369</commentid>
    <comment_count>14</comment_count>
      <attachid>381292</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-18 03:10:07 -0700</bug_when>
    <thetext>Created attachment 381292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581387</commentid>
    <comment_count>15</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-10-18 06:32:46 -0700</bug_when>
    <thetext>Thanks for the comments, I took them all.

&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:150
&gt; &gt; +    for (UInt32 i = 0; i &lt; numberOfBuffers; ++i) {
&gt; &gt; +        UInt32 bytesPerFrame = buffers[i].mDataByteSize / numberOfFrames;
&gt; &gt; +        UInt32 byteOffset = frameOffset * bytesPerFrame;
&gt; &gt; +        auto* memory = reinterpret_cast&lt;float*&gt;(reinterpret_cast&lt;char*&gt;(buffers[i].mData) + byteOffset);
&gt; &gt; +        bus.setChannelMemory(i, memory, framesThisTime);
&gt; &gt; +    }
&gt; 
&gt; macOS currently clamps values at 0db. Should we continue to do that?

I added the clamping back for extra safety.
I tried a simple example with and without clamping and found no difference on my iMac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581861</commentid>
    <comment_count>16</comment_count>
      <attachid>381292</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-21 09:29:12 -0700</bug_when>
    <thetext>Comment on attachment 381292
Patch

Clearing flags on attachment: 381292

Committed r251367: &lt;https://trac.webkit.org/changeset/251367&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581862</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-21 09:29:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381092</attachid>
            <date>2019-10-16 11:50:09 -0700</date>
            <delta_ts>2019-10-16 12:00:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191016205004.patch</filename>
            <type>text/plain</type>
            <size>33993</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjViZjMyZGYxZWY3NmQ5
ZGU1NWZiMGI2ZmJlNjZjYmEzMjk3MGFkNC4uNzZhOWZiNjdhOWJkN2RkN2I2YzhiM2VhYzM3ZWMy
ZWJiMTIwNGUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTE2ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEF1ZGlvRGVz
dGluYXRpb25Db2NvYSB0byBzaGFyZSBjb2RlIGJldHdlZW4gaU9TIGFuZCBNYWMuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjp+QXVk
aW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25D
b2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c2V0SXNQbGF5
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6cmVuZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6aW5wdXRQcm9jKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6Om91dHB1dFVuaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRGVzdGluYXRpb25JT1M6On5BdWRpb0Rlc3RpbmF0aW9uSU9TKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpmcmFtZVNpemVDaGFuZ2VkUHJvYyk6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0
aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmg6CisKIDIwMTktMTAtMTUgIHlvdWVubiBmYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgaGVhZGVycyB0byBrZWVwIGZy
b20gYSBIVFRQSGVhZGVyTmFtZVNldCB0byBhbiBPcHRpb25TZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGQ4NDg0N2NlMzIyMDI5NjMzNDgyOWQ0OTY5NjkyOTA4OWQwNmIxMzkuLmFjNzA3
ZDliNjNiZWI0MjMyNGZiOWMxYWJlNjI4OWE0ZmZhNGZmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMTYzLDYgKzE2Myw3IEBAIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
TWFjLmNwcAogCiBwbGF0Zm9ybS9hdWRpby9BdWRpb1Nlc3Npb24uY3BwCiAKK3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKIHBsYXRmb3JtL2F1ZGlvL2NvY29h
L01lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5tbQogcGxhdGZvcm0vYXVkaW8vY29jb2EvV2ViQXVk
aW9CdWZmZXJMaXN0LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTQ1YWQ1ODNkOTJjMGZlYjhiNjhkMzhhN2U4NjFjYjI3
ZTYwYjg5OS4uZTU5OTkxNzFhMmJlOGY4MjZiYjQ5N2E1OTgxYzdhMDczZDAyYTgwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NzIxOCw2ICs3MjE4LDggQEAKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVz
cG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXNwb25zZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENjFDN0I1NzA0MDAwOTFDNkYg
LyogRmV0Y2hCb2R5U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZl
dGNoQm9keVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENzFD
N0I1NzA0MDAwOTFDNkUgLyogRmV0Y2hSZXNwb25zZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRmV0Y2hSZXNwb25zZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMzE1
MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDEzMTUxODYyMzU3NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25D
b2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMUYzQjExRjk1NTI4MTAwNTk5OTVBIC8qIEpTRmV0Y2hF
dmVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zl
dGNoRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNC
NDFGOTU1QkMzMDA1OTk5NUEgLyogRXh0ZW5kYWJsZUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMzFGM0I1MUY5NTVCQzUwMDU5OTk1QSAvKiBFeHRlbmRhYmxlRXZl
bnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODIzLDYgKzI1ODI1LDggQEAKIAkJ
Q0Q2NjlENjUxRDIzMkRGNDAwNEQxODY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLywKKwkJCQk0MTMxNTE4NjIzNTc3NDVFMDAxMTVFNkUg
LyogQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8sCiAJCQkJNDE3RjdBRUQyMTM5QkY2NTAwRkJB
N0VDIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5oICovLAogCQkJCTQxN0Y3QUVBMjEzOUJG
NjQwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0gKi8sCiAJCQkJNDE3RjdB
RUIyMTM5QkY2NDAwRkJBN0VDIC8qIFdlYkF1ZGlvQnVmZmVyTGlzdC5jcHAgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9u
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzE5ZDlmZGQ5NmM1MmE0Yjc2MmNiNDE5MjYx
OTVjOTI2NGI5N2RkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcApAQCAtMCwwICsxLDE1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgorI2luY2x1ZGUgIkF1ZGlvU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWZWN0
b3JNYXRoLmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0F1ZGlvSGFyZHdhcmUuaD4KKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRf
TElOS19GUkFNRVdPUksoQXVkaW9Ub29sYm94KQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVk
aW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UsIE9TU3RhdHVzLCAoQXVkaW9Db21wb25lbnRJbnN0
YW5jZSBpbkluc3RhbmNlKSwgKGluSW5zdGFuY2UpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwg
QXVkaW9PdXRwdXRVbml0U3RhcnQsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKK1NP
RlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvT3V0cHV0VW5pdFN0b3AsIE9TU3RhdHVzLCAoQXVk
aW9Vbml0IGNpKSwgKGNpKSkKKyNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGludCBrUmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKK2Nv
bnN0IGZsb2F0IGtMb3dUaHJlc2hvbGQgPSAtMTsKK2NvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xk
ID0gMTsKKworQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoQXVk
aW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZmxvYXQgc2FtcGxlUmF0ZSkKKyAgICA6IG1fb3V0cHV0
VW5pdCgwKQorICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAsIG1fcmVuZGVyQnVzKEF1
ZGlvQnVzOjpjcmVhdGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIGZhbHNlKS5yZWxlYXNlTm9uTnVs
bCgpKQorICAgICwgbV9zcGFyZUJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJT
aXplLCB0cnVlKS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJh
dGUpCit7Cit9CisKK0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2Nv
YSgpCit7CisgICAgaWYgKG1fb3V0cHV0VW5pdCkKKyAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0
YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnN0YXJ0KCkKK3sKKyAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0
YXJ0Iik7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRw
dXRVbml0KTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7
Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpzdG9wKCkKK3sKKyAgICBMT0coTWVk
aWEsICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0b3AiKTsKKyAgICBPU1N0YXR1cyByZXN1bHQg
PSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9u
Q29jb2E6OnNldElzUGxheWluZyhib29sIGlzUGxheWluZykKK3sKKyAgICBpZiAobV9pc1BsYXlp
bmcgPT0gaXNQbGF5aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzUGxheWluZyA9IGlz
UGxheWluZzsKKyAgICBtX2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOworfQorCitzdGF0
aWMgdm9pZCBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhBdWRpb0J1ZmZlciogYnVmZmVycywgQXVk
aW9CdXMmIGJ1cywgVUludDMyIG51bWJlck9mQnVmZmVycywgVUludDMyIG51bWJlck9mRnJhbWVz
LCBVSW50MzIgZnJhbWVPZmZzZXQsIFVJbnQzMiBmcmFtZXNUaGlzVGltZSkKK3sKKyAgICBmb3Ig
KFVJbnQzMiBpID0gMDsgaSA8IG51bWJlck9mQnVmZmVyczsgKytpKSB7CisgICAgICAgIFVJbnQz
MiBieXRlc1BlckZyYW1lID0gYnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gbnVtYmVyT2ZGcmFt
ZXM7CisgICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0ID0gZnJhbWVPZmZzZXQgKiBieXRlc1BlckZy
YW1lOworICAgICAgICBhdXRvKiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyc1tpXS5tRGF0YSkgKyBieXRlT2Zmc2V0KTsKKyAg
ICAgICAgYnVzLnNldENoYW5uZWxNZW1vcnkoaSwgbWVtb3J5LCBmcmFtZXNUaGlzVGltZSk7Cisg
ICAgfQorfQorCisvLyBQdWxscyBvbiBvdXIgcHJvdmlkZXIgdG8gZ2V0IHJlbmRlcmVkIGF1ZGlv
IHN0cmVhbS4KK09TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6cmVuZGVyKFVJbnQzMiBu
dW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgYXV0byogYnVm
ZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7CisgICAgVUludDMyIG51bWJlck9mQnVmZmVycyA9IGlv
RGF0YS0+bU51bWJlckJ1ZmZlcnM7CisgICAgVUludDMyIGZyYW1lc1JlbWFpbmluZyA9IG51bWJl
ck9mRnJhbWVzOworICAgIFVJbnQzMiBmcmFtZU9mZnNldCA9IDA7CisgICAgd2hpbGUgKGZyYW1l
c1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgaWYgKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRT
cGFyZUZyYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQobV9zdGFydFNwYXJlRnJhbWUgPCBtX2Vu
ZFNwYXJlRnJhbWUpOworICAgICAgICAgICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0gc3RkOjpt
aW48VUludDMyPihtX2VuZFNwYXJlRnJhbWUgLSBtX3N0YXJ0U3BhcmVGcmFtZSwgbnVtYmVyT2ZG
cmFtZXMpOworICAgICAgICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9y
ZW5kZXJCdXMuZ2V0KCksIG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zm
c2V0LCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21S
YW5nZShtX3NwYXJlQnVzLmdldCgpLCBtX3N0YXJ0U3BhcmVGcmFtZSwgbV9lbmRTcGFyZUZyYW1l
KTsKKyAgICAgICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAg
ICAgZnJhbWVzUmVtYWluaW5nIC09IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgbV9zdGFy
dFNwYXJlRnJhbWUgKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgIH0KKworICAgICAgICBVSW50
MzIgZnJhbWVzVGhpc1RpbWUgPSBzdGQ6Om1pbjxVSW50MzI+KGtSZW5kZXJCdWZmZXJTaXplLCBm
cmFtZXNSZW1haW5pbmcpOworICAgICAgICBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhidWZmZXJz
LCBtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJh
bWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKKworICAgICAgICBpZiAoIWZyYW1lc1RoaXNUaW1l
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChmcmFtZXNUaGlzVGltZSA8IGtSZW5k
ZXJCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigwLCBtX3NwYXJl
QnVzLnB0cigpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+
Y29weUZyb21SYW5nZShtX3NwYXJlQnVzLmdldCgpLCAwLCBmcmFtZXNUaGlzVGltZSk7CisgICAg
ICAgICAgICBtX3N0YXJ0U3BhcmVGcmFtZSA9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAg
bV9lbmRTcGFyZUZyYW1lID0ga1JlbmRlckJ1ZmZlclNpemU7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9yZW5kZXJCdXMucHRyKCksIGZyYW1lc1Ro
aXNUaW1lKTsKKyAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAg
IGZyYW1lc1JlbWFpbmluZyAtPSBmcmFtZXNUaGlzVGltZTsKKyAgICB9CisKKyAgICByZXR1cm4g
bm9FcnI7Cit9CisKKy8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCitPU1N0YXR1cyBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVu
ZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJl
ciovLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQorewor
ICAgIGF1dG8qIGF1ZGlvT3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbkNvY29h
Kj4odXNlckRhdGEpOworICAgIHJldHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJh
bWVzLCBpb0RhdGEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTYyNWQ3
YmU0N2IwNTY0MGE1ZDM0MmI5MDM3ZjMzMjlhMzZhZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKKyNpbmNsdWRlIDxB
dWRpb1VuaXQvQXVkaW9Vbml0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQnVzOworCisvLyBBbiBBdWRpb0Rlc3RpbmF0aW9u
IHVzaW5nIENvcmVBdWRpbydzIGRlZmF1bHQgb3V0cHV0IEF1ZGlvVW5pdAorY2xhc3MgQXVkaW9E
ZXN0aW5hdGlvbkNvY29hIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24geworcHVibGljOgorICAg
IEF1ZGlvRGVzdGluYXRpb25Db2NvYShBdWRpb0lPQ2FsbGJhY2smLCBmbG9hdCBzYW1wbGVSYXRl
KTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOworCisgICAgYm9vbCBpc1BsYXlpbmcoKSBmaW5h
bCB7IHJldHVybiBtX2lzUGxheWluZzsgfQorICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICBBdWRpb1VuaXQmIG91dHB1dFVuaXQo
KSB7IHJldHVybiBtX291dHB1dFVuaXQ7IH0KKyAgICAKKyAgICAvLyBEZWZhdWx0T3V0cHV0VW5p
dCBjYWxsYmFjaworICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCogdXNlckRhdGEs
IEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50
MzIgYnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9E
YXRhKTsKKworcHJpdmF0ZToKKyAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJh
bWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7CisKKyAgICB2b2lkIHN0YXJ0KCkgZmluYWw7
CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0Owor
ICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9jYWxsYmFjazsKKyAgICBSZWY8QXVkaW9CdXM+IG1fcmVu
ZGVyQnVzOworICAgIFJlZjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKKworICAgIGZsb2F0IG1fc2Ft
cGxlUmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVk
IG1fc3RhcnRTcGFyZUZyYW1lIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5kU3BhcmVGcmFtZSB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3Mv
QXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
b3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKaW5kZXggNGJkZTdlNDFlMmI2NDM3Y2QwZmY3MjVl
NGQwNzlkNjhmODllN2RjNS4uNTY1YmI5ZGQzZDI2YzQ2MmE5ZTRlNDc3NjA5ZmI5ODNmNjEyZTk1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVz
dGluYXRpb25JT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9B
dWRpb0Rlc3RpbmF0aW9uSU9TLmNwcApAQCAtNDYsMTAgKzQ2LDcgQEAKIAogU09GVF9MSU5LX0ZS
QU1FV09SSyhBdWRpb1Rvb2xib3gpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBv
bmVudEZpbmROZXh0LCBBdWRpb0NvbXBvbmVudCwgKEF1ZGlvQ29tcG9uZW50IGluQ29tcG9uZW50
LCBjb25zdCBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uICppbkRlc2MpLCAoaW5Db21wb25lbnQs
IGluRGVzYykpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNl
RGlzcG9zZSwgT1NTdGF0dXMsIChBdWRpb0NvbXBvbmVudEluc3RhbmNlIGluSW5zdGFuY2UpLCAo
aW5JbnN0YW5jZSkpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3Rh
bmNlTmV3LCBPU1N0YXR1cywgKEF1ZGlvQ29tcG9uZW50IGluQ29tcG9uZW50LCBBdWRpb0NvbXBv
bmVudEluc3RhbmNlICpvdXRJbnN0YW5jZSksIChpbkNvbXBvbmVudCwgb3V0SW5zdGFuY2UpKQot
U09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3RhcnQsIE9TU3RhdHVzLCAo
QXVkaW9Vbml0IGNpKSwgKGNpKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvT3V0cHV0
VW5pdFN0b3AsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKIFNPRlRfTElOSyhBdWRp
b1Rvb2xib3gsIEF1ZGlvVW5pdEFkZFByb3BlcnR5TGlzdGVuZXIsIE9TU3RhdHVzLCAoQXVkaW9V
bml0IGluVW5pdCwgQXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCBBdWRpb1VuaXRQcm9wZXJ0eUxp
c3RlbmVyUHJvYyBpblByb2MsIHZvaWQgKmluUHJvY1VzZXJEYXRhKSwgKGluVW5pdCwgaW5JRCwg
aW5Qcm9jLCBpblByb2NVc2VyRGF0YSkpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1Vu
aXRHZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9w
ZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFNjb3BlIGluU2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgaW5F
bGVtZW50LCB2b2lkICpvdXREYXRhLCBVSW50MzIgKmlvRGF0YVNpemUpLCAoaW5Vbml0LCBpbklE
LCBpblNjb3BlLCBpbkVsZW1lbnQsIG91dERhdGEsIGlvRGF0YVNpemUpKQogU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgQXVkaW9Vbml0SW5pdGlhbGl6ZSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5V
bml0KSwgKGluVW5pdCkpCkBAIC01NywxNiArNTQsOCBAQCBTT0ZUX0xJTksoQXVkaW9Ub29sYm94
LCBBdWRpb1VuaXRTZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRp
bwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGludCBrUmVuZGVyQnVmZmVyU2l6ZSA9
IDEyODsKIGNvbnN0IGludCBrUHJlZmVycmVkQnVmZmVyU2l6ZSA9IDI1NjsKIAotdHlwZWRlZiBI
YXNoU2V0PEF1ZGlvRGVzdGluYXRpb25JT1MqPiBBdWRpb0Rlc3RpbmF0aW9uU2V0Owotc3RhdGlj
IEF1ZGlvRGVzdGluYXRpb25TZXQmIGF1ZGlvRGVzdGluYXRpb25zKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8QXVkaW9EZXN0aW5hdGlvblNldD4gYXVkaW9EZXN0aW5hdGlvblNldDsK
LSAgICByZXR1cm4gYXVkaW9EZXN0aW5hdGlvblNldDsKLX0KLQogLy8gRmFjdG9yeSBtZXRob2Q6
IGlPUy1pbXBsZW1lbnRhdGlvbgogc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1
ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CkBAIC04MCw3ICs2OSw5IEBAIHN0
ZDo6dW5pcXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9uPiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUo
QXVkaW9JT0NhbGxiYWNrJiBjYWxsCiAgICAgaWYgKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgIT0g
MikKICAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwg
JWYpIC0gdW5oYW5kbGVkIG91dHB1dCBjaGFubmVscyIsIG51bWJlck9mSW5wdXRDaGFubmVscywg
bnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0ZSk7CiAKLSAgICByZXR1cm4gbWFrZVVu
aXF1ZTxBdWRpb0Rlc3RpbmF0aW9uSU9TPihjYWxsYmFjaywgc2FtcGxlUmF0ZSk7CisgICAgYXV0
byBkZXN0aW5hdGlvbiA9IG1ha2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbklPUz4oY2FsbGJhY2ss
IHNhbXBsZVJhdGUpOworICAgIGRlc3RpbmF0aW9uLT5jb25maWd1cmUoKTsKKyAgICByZXR1cm4g
ZGVzdGluYXRpb247CiB9CiAKIGZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxl
UmF0ZSgpCkBAIC05OCwxNSArODksMTYgQEAgdW5zaWduZWQgbG9uZyBBdWRpb0Rlc3RpbmF0aW9u
OjptYXhDaGFubmVsQ291bnQoKQogfQogCiBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3Rp
bmF0aW9uSU9TKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGRvdWJsZSBzYW1wbGVSYXRlKQot
ICAgIDogbV9vdXRwdXRVbml0KDApCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwg
bV9yZW5kZXJCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgZmFsc2Up
KQotICAgICwgbV9zcGFyZUJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJTaXpl
LCB0cnVlKSkKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQotICAgICwgbV9pc1BsYXlp
bmcoZmFsc2UpCisgICAgOiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoY2FsbGJhY2ssIHNhbXBsZVJh
dGUpCiB7Ci0gICAgYXVkaW9EZXN0aW5hdGlvbnMoKS5hZGQodGhpcyk7Cit9CiAKK0F1ZGlvRGVz
dGluYXRpb25JT1M6On5BdWRpb0Rlc3RpbmF0aW9uSU9TKCkKK3sKK30KKwordm9pZCBBdWRpb0Rl
c3RpbmF0aW9uSU9TOjpjb25maWd1cmUoKQorewogICAgIC8vIE9wZW4gYW5kIGluaXRpYWxpemUg
RGVmYXVsdE91dHB1dFVuaXQKICAgICBBdWRpb0NvbXBvbmVudCBjb21wOwogICAgIEF1ZGlvQ29t
cG9uZW50RGVzY3JpcHRpb24gZGVzYzsKQEAgLTEyMCw1NCArMTEyLDQwIEBAIEF1ZGlvRGVzdGlu
YXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywg
ZG91YmxlIHNhbXBsCiAKICAgICBBU1NFUlQoY29tcCk7CiAKLSAgICBPU1N0YXR1cyByZXN1bHQg
PSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZtX291dHB1dFVuaXQpOworICAgIE9T
U3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoY29tcCwgJm91dHB1dFVu
aXQoKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgVUludDMyIGZsYWcgPSAxOwotICAg
IHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwgCi0gICAgICAgIGtB
dWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywgCi0gICAgICAgIGtBdWRpb1VuaXRTY29w
ZV9PdXRwdXQsIAorICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQo
KSwKKyAgICAgICAga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLAorICAgICAgICBr
QXVkaW9Vbml0U2NvcGVfT3V0cHV0LAogICAgICAgICAwLAotICAgICAgICAmZmxhZywgCisgICAg
ICAgICZmbGFnLAogICAgICAgICBzaXplb2YoZmxhZykpOwogICAgIEFTU0VSVCghcmVzdWx0KTsK
IAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEFkZFByb3BlcnR5TGlzdGVuZXIobV9vdXRwdXRVbml0
LCBrQXVkaW9Vbml0UHJvcGVydHlfTWF4aW11bUZyYW1lc1BlclNsaWNlLCBmcmFtZVNpemVDaGFu
Z2VkUHJvYywgdGhpcyk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0QWRkUHJvcGVydHlMaXN0ZW5l
cihvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9NYXhpbXVtRnJhbWVzUGVyU2xpY2Us
IGZyYW1lU2l6ZUNoYW5nZWRQcm9jLCB0aGlzKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKLSAg
ICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1fb3V0cHV0VW5pdCk7CisgICAgcmVzdWx0
ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkpOwogICAgIEFTU0VSVCghcmVzdWx0
KTsKLQotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9uSU9TOjp+QXVkaW9E
ZXN0aW5hdGlvbklPUygpCi17Ci0gICAgYXVkaW9EZXN0aW5hdGlvbnMoKS5yZW1vdmUodGhpcyk7
Ci0KLSAgICBpZiAobV9vdXRwdXRVbml0KQotICAgICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNl
RGlzcG9zZShtX291dHB1dFVuaXQpOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmNv
bmZpZ3VyZSgpCi17CiAgICAgLy8gU2V0IHJlbmRlciBjYWxsYmFjawogICAgIEFVUmVuZGVyQ2Fs
bGJhY2tTdHJ1Y3QgaW5wdXQ7CiAgICAgaW5wdXQuaW5wdXRQcm9jID0gaW5wdXRQcm9jOwogICAg
IGlucHV0LmlucHV0UHJvY1JlZkNvbiA9IHRoaXM7Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVk
aW9Vbml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVu
ZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJmlucHV0LCBzaXplb2YoaW5w
dXQpKTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtB
dWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxsYmFjaywga0F1ZGlvVW5pdFNjb3BlX0lucHV0
LCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAg
IC8vIFNldCBzdHJlYW0gZm9ybWF0CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0
cmVhbUZvcm1hdDsKIAogICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbik7Ci0gICAgcmVzdWx0ID0gQXVkaW9Vbml0R2V0UHJvcGVydHkobV9vdXRwdXRV
bml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0
cHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgJnNpemUpOworICAgIHJlc3VsdCA9IEF1ZGlv
VW5pdEdldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZv
cm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgKHZvaWQqKSZzdHJlYW1Gb3JtYXQsICZz
aXplKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKICAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9h
dCA9IHNpemVvZihGbG9hdDMyKTsKICAgICBjb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OwotICAg
IHN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fc2FtcGxlUmF0ZTsKKyAgICBzdHJlYW1Gb3Jt
YXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlKCk7CiAgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJ
RCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKICAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdz
ID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJ
c05vbkludGVybGVhdmVkOwogICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRl
c1BlckZsb2F0OwpAQCAtMTc2LDk5ICsxNTQsMTggQEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9T
Ojpjb25maWd1cmUoKQogICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IDI7CiAg
ICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJG
bG9hdDsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwg
a0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAw
LCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bikpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1
ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAo
dm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikp
OwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lv
bigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa1ByZWZlcnJlZEJ1ZmZlclNpemUpOwogfQogCi12
b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0YXJ0KCkKLXsKLSAgICBMT0coTWVkaWEsICJBdWRp
b0Rlc3RpbmF0aW9uSU9TOjpzdGFydCIpOwotCi0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9P
dXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
c2V0SXNQbGF5aW5nKHRydWUpOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3Ao
KQotewotICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3AiKTsKLQotICAg
IE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9vdXRwdXRVbml0KTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKLX0KLQotc3RhdGlj
IHZvaWQgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlv
QnVzJiBidXMsIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywg
VUludDMyIGZyYW1lT2Zmc2V0LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCi17Ci0gICAgZm9yIChV
SW50MzIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1ZmZlcnM7ICsraSkgewotICAgICAgICBVSW50MzIg
Ynl0ZXNQZXJGcmFtZSA9IGJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVz
OwotICAgICAgICBVSW50MzIgYnl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFt
ZTsKLSAgICAgICAgZmxvYXQqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihidWZmZXJzW2ldLm1EYXRhKSArIGJ5dGVPZmZzZXQpOwotICAg
ICAgICBidXMuc2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIGZyYW1lc1RoaXNUaW1lKTsKLSAg
ICB9Ci19Ci0KLS8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8g
c3RyZWFtLgotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6cmVuZGVyKFVJbnQzMiBudW1i
ZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9CdWZmZXIq
IGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOwotICAgIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMg
PSBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOwotICAgIFVJbnQzMiBmcmFtZXNSZW1haW5pbmcgPSBu
dW1iZXJPZkZyYW1lczsKLSAgICBVSW50MzIgZnJhbWVPZmZzZXQgPSAwOwotICAgIHdoaWxlIChm
cmFtZXNSZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgIGlmIChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1f
ZW5kU3BhcmVGcmFtZSkgewotICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwg
bV9lbmRTcGFyZUZyYW1lKTsKLSAgICAgICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0
ZDo6bWluPFVJbnQzMj4obV9lbmRTcGFyZUZyYW1lIC0gbV9zdGFydFNwYXJlRnJhbWUsIG51bWJl
ck9mRnJhbWVzKTsKLSAgICAgICAgICAgIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMs
ICptX3JlbmRlckJ1cywgbnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZz
ZXQsIGZyYW1lc1RoaXNUaW1lKTsKLSAgICAgICAgICAgIG1fcmVuZGVyQnVzLT5jb3B5RnJvbVJh
bmdlKCptX3NwYXJlQnVzLCBtX3N0YXJ0U3BhcmVGcmFtZSwgbV9lbmRTcGFyZUZyYW1lKTsKLSAg
ICAgICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgZnJh
bWVzUmVtYWluaW5nIC09IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgbV9zdGFydFNwYXJl
RnJhbWUgKz0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVSW50MzIgZnJh
bWVzVGhpc1RpbWUgPSBzdGQ6Om1pbjxVSW50MzI+KGtSZW5kZXJCdWZmZXJTaXplLCBmcmFtZXNS
ZW1haW5pbmcpOwotICAgICAgICBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhidWZmZXJzLCAqbV9y
ZW5kZXJCdXMsIG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBm
cmFtZXNUaGlzVGltZSk7Ci0KLSAgICAgICAgaWYgKCFmcmFtZXNUaGlzVGltZSkKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBpZiAoZnJhbWVzVGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6
ZSkgewotICAgICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9zcGFyZUJ1cy5nZXQoKSwg
a1JlbmRlckJ1ZmZlclNpemUpOwotICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFu
Z2UoKm1fc3BhcmVCdXMsIDAsIGZyYW1lc1RoaXNUaW1lKTsKLSAgICAgICAgICAgIG1fc3RhcnRT
cGFyZUZyYW1lID0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBtX2VuZFNwYXJlRnJhbWUg
PSBrUmVuZGVyQnVmZmVyU2l6ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NhbGxi
YWNrLnJlbmRlcigwLCBtX3JlbmRlckJ1cy5nZXQoKSwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAg
ICBmcmFtZU9mZnNldCArPSBmcmFtZXNUaGlzVGltZTsKLSAgICAgICAgZnJhbWVzUmVtYWluaW5n
IC09IGZyYW1lc1RoaXNUaW1lOwotICAgIH0KLQotICAgIHJldHVybiBub0VycjsKLX0KLQotdm9p
ZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCi17Ci0g
ICAgaWYgKG1faXNQbGF5aW5nID09IGlzUGxheWluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7Ci0gICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFu
Z2UoKTsKLX0KLQotLy8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLU9TU3RhdHVzIEF1ZGlv
RGVzdGluYXRpb25JT1M6OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciov
LCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQotewotICAg
IEF1ZGlvRGVzdGluYXRpb25JT1MqIGF1ZGlvT3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0
aW5hdGlvbklPUyo+KHVzZXJEYXRhKTsKLSAgICByZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihu
dW1iZXJPZkZyYW1lcywgaW9EYXRhKTsKLX0KLQogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpm
cmFtZVNpemVDaGFuZ2VkUHJvYyh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0LCBBdWRpb1VuaXRQ
cm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCkKIHsKICAgICBBdWRp
b0Rlc3RpbmF0aW9uSU9TKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRp
b25JT1MqPihpblJlZkNvbik7CiAgICAgVUludDMyIGJ1ZmZlclNpemUgPSAwOwogICAgIFVJbnQz
MiBkYXRhU2l6ZSA9IHNpemVvZihidWZmZXJTaXplKTsKLSAgICBBdWRpb1VuaXRHZXRQcm9wZXJ0
eShhdWRpb091dHB1dC0+bV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfTWF4aW11bUZy
YW1lc1BlclNsaWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAodm9pZCopJmJ1ZmZlclNp
emUsICZkYXRhU2l6ZSk7CisgICAgQXVkaW9Vbml0R2V0UHJvcGVydHkoYXVkaW9PdXRwdXQtPm91
dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X01heGltdW1GcmFtZXNQZXJTbGljZSwga0F1
ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgKHZvaWQqKSZidWZmZXJTaXplLCAmZGF0YVNpemUpOwog
ICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBmcmFtZVNpemVDaGFuZ2VkID0gJWx1XG4iLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nPihidWZmZXJTaXplKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCmlu
ZGV4IGQ2OTIzOWZhY2I5NjYzOWMxNTllYmZlMTNlOWFlODAyZWRlMTZmNzUuLjkyNjYxZjFiMjFh
MTBlMTQ5ZGQ0NTVlNjc1MDVjMTgxMmI1NGRmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaApAQCAtMjksNTEg
KzI5LDI0IEBACiAKICNwcmFnbWEgb25jZQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0jaW5jbHVkZSAi
QXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCi0jaW5jbHVkZSA8QXVk
aW9Vbml0L0F1ZGlvVW5pdC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBBbiBB
dWRpb0Rlc3RpbmF0aW9uIHVzaW5nIENvcmVBdWRpbydzIGRlZmF1bHQgb3V0cHV0IEF1ZGlvVW5p
dAotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uSU9TIGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGlu
YXRpb24geworY2xhc3MgQXVkaW9EZXN0aW5hdGlvbklPUyBmaW5hbCA6IHB1YmxpYyBBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EgewogcHVibGljOgogICAgIEF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9J
T0NhbGxiYWNrJiwgZG91YmxlIHNhbXBsZVJhdGUpOwogICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGlu
YXRpb25JT1MoKTsKIAotcHJpdmF0ZToKICAgICB2b2lkIGNvbmZpZ3VyZSgpOwogCi0gICAgLy8g
QXVkaW9EZXN0aW5hdGlvbgotICAgIHZvaWQgc3RhcnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
b3AoKSBvdmVycmlkZTsKLSAgICBib29sIGlzUGxheWluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
aXNQbGF5aW5nOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fc2FtcGxlUmF0ZTsgfQotCitwcml2YXRlOgogICAgIC8vIERlZmF1bHRPdXRwdXRVbml0
IGNhbGxiYWNrCi0gICAgc3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwg
QXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQz
MiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0Rh
dGEpOwogICAgIHN0YXRpYyB2b2lkIGZyYW1lU2l6ZUNoYW5nZWRQcm9jKHZvaWQgKmluUmVmQ29u
LCBBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFNj
b3BlIGluU2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgaW5FbGVtZW50KTsKLQotICAgIGZyaWVuZCBm
bG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKTsKLQotICAgIE9TU3Rh
dHVzIHJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRh
KTsKLSAgICB2b2lkIHNldElzUGxheWluZyhib29sKTsKLQotICAgIEF1ZGlvVW5pdCBtX291dHB1
dFVuaXQ7Ci0gICAgQXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxBdWRp
b0J1cz4gbV9yZW5kZXJCdXM7Ci0gICAgUmVmUHRyPEF1ZGlvQnVzPiBtX3NwYXJlQnVzOwotICAg
IHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZyYW1lIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fZW5kU3Bh
cmVGcmFtZSB7IDAgfTsKLQotICAgIGRvdWJsZSBtX3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBtX2lz
UGxheWluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBMQVRG
T1JNKElPU19GQU1JTFkpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAppbmRleCA5ZmU2NGJhYWE0Nzg0ZmVjZGFiM2Q2
ZGRiNWUyNzgzODFlMWUwNzAwLi42NTYxMzRlM2MxZjAzZTUzYTllYTZjZmRhNTlkOWU5MDRkMmFj
ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCkBAIC00NCwxMCArNDQsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDEyODsKLWNvbnN0IGZsb2F0IGtM
b3dUaHJlc2hvbGQgPSAtMTsKLWNvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xkID0gMTsKLQogLy8g
RmFjdG9yeSBtZXRob2Q6IE1hYy1pbXBsZW1lbnRhdGlvbgogc3RkOjp1bmlxdWVfcHRyPEF1ZGlv
RGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNh
bGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVu
c2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CkBAIC02
MSw3ICs1Nyw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9uPiBBdWRpb0Rlc3Rp
bmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiBjYWxsCiAgICAgaWYgKG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMgIT0gMikKICAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6
Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIG91dHB1dCBjaGFubmVscyIsIG51bWJlck9m
SW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0ZSk7CiAKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uTWFjPihjYWxsYmFjaywgc2FtcGxl
UmF0ZSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IG1ha2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlv
bk1hYz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOworICAgIGRlc3RpbmF0aW9uLT5jb25maWd1cmUo
KTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CiAKIGZsb2F0IEF1ZGlvRGVzdGluYXRpb246
OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCkBAIC04MCwxMSArNzgsMTUgQEAgdW5zaWduZWQgbG9uZyBB
dWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQogfQogCiBBdWRpb0Rlc3RpbmF0aW9u
TWFjOjpBdWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0
IHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXpl
LCBmYWxzZSkpCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1faXNQbGF5
aW5nKGZhbHNlKQorICAgIDogQXVkaW9EZXN0aW5hdGlvbkNvY29hKGNhbGxiYWNrLCBzYW1wbGVS
YXRlKQoreworfQorCitBdWRpb0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygp
Cit7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6Y29uZmlndXJlKCkKIHsKICAgICAv
LyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRwdXRVbml0CiAgICAgQXVkaW9Db21wb25l
bnQgY29tcDsKQEAgLTk5LDMzICsxMDEsMjIgQEAgQXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9E
ZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1wbGUKIAog
ICAgIEFTU0VSVChjb21wKTsKIAotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50
SW5zdGFuY2VOZXcoY29tcCwgJm1fb3V0cHV0VW5pdCk7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0g
QXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmb3V0cHV0VW5pdCgpKTsKICAgICBBU1NF
UlQoIXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1fb3V0cHV0
VW5pdCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkpOwog
ICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rlc3Rp
bmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCi17Ci0gICAgaWYgKG1fb3V0cHV0VW5p
dCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsK
LX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUoKQotewogICAgIC8vIFNl
dCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0OwogICAg
IGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZDb24g
PSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0
cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0
U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIHJlc3VsdCA9IEF1
ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJl
bmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihp
bnB1dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIC8vIFNldCBzdHJlYW0gZm9ybWF0
CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0cmVhbUZvcm1hdDsKLSAgICBzdHJl
YW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBsZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1T
YW1wbGVSYXRlID0gc2FtcGxlUmF0ZSgpOwogICAgIHN0cmVhbUZvcm1hdC5tRm9ybWF0SUQgPSBr
QXVkaW9Gb3JtYXRMaW5lYXJQQ007CiAgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtB
dWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNrZWQgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25J
bnRlcmxlYXZlZDsKICAgICBzdHJlYW1Gb3JtYXQubUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVv
ZihGbG9hdDMyKTsKQEAgLTEzNCw2MiArMTI1LDEwIEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1h
Yzo6Y29uZmlndXJlKCkKICAgICBzdHJlYW1Gb3JtYXQubUJ5dGVzUGVyUGFja2V0ID0gc2l6ZW9m
KEZsb2F0MzIpOwogICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9IHNpemVvZihGbG9h
dDMyKTsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwg
a0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAw
LCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bikpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1
ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAo
dm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikp
OwogICAgIEFTU0VSVCghcmVzdWx0KTsKIH0KIAotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpz
dGFydCgpCi17Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9v
dXRwdXRVbml0KTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJc1BsYXlpbmcodHJ1
ZSk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RvcCgpCi17Ci0gICAgT1NTdGF0
dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOwotCi0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7Ci19Ci0KLS8vIFB1bGxzIG9u
IG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgotT1NTdGF0dXMgQXVk
aW9EZXN0aW5hdGlvbk1hYzo6cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZm
ZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1C
dWZmZXJzOwotICAgIG1fcmVuZGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDAsIChmbG9hdCopYnVm
ZmVyc1swXS5tRGF0YSwgbnVtYmVyT2ZGcmFtZXMpOwotICAgIG1fcmVuZGVyQnVzLT5zZXRDaGFu
bmVsTWVtb3J5KDEsIChmbG9hdCopYnVmZmVyc1sxXS5tRGF0YSwgbnVtYmVyT2ZGcmFtZXMpOwot
Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBsb2NhbC9saXZlIGF1ZGlvIGlucHV0Lgot
ICAgIG1fY2FsbGJhY2sucmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1iZXJPZkZyYW1l
cyk7Ci0KLSAgICAvLyBDbGFtcCB2YWx1ZXMgYXQgMGRiIChpLmUuLCBbLTEuMCwgMS4wXSkKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMo
KTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvQ2hhbm5lbCogY2hhbm5lbCA9IG1fcmVuZGVyQnVzLT5j
aGFubmVsKGkpOwotICAgICAgICBpZiAoIWNoYW5uZWwtPmlzU2lsZW50KCkpCi0gICAgICAgICAg
ICBWZWN0b3JNYXRoOjp2Y2xpcChjaGFubmVsLT5kYXRhKCksIDEsICZrTG93VGhyZXNob2xkLCAm
a0hpZ2hUaHJlc2hvbGQsIGNoYW5uZWwtPm11dGFibGVEYXRhKCksIDEsIG51bWJlck9mRnJhbWVz
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlv
bk1hYzo6c2V0SXNQbGF5aW5nKGJvb2wgaXNQbGF5aW5nKQotewotICAgIGlmIChtX2lzUGxheWlu
ZyA9PSBpc1BsYXlpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNQbGF5aW5nID0gaXNQ
bGF5aW5nOwotICAgIG1fY2FsbGJhY2suaXNQbGF5aW5nRGlkQ2hhbmdlKCk7Ci19Ci0KLS8vIERl
ZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCi1PU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpp
bnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypidXNOdW1iZXIqLywgVUludDMyIG51bWJlck9m
RnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBdWRpb0Rlc3RpbmF0aW9u
TWFjKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRpb25NYWMqPih1c2Vy
RGF0YSk7Ci0gICAgcmV0dXJuIGF1ZGlvT3V0cHV0LT5yZW5kZXIobnVtYmVyT2ZGcmFtZXMsIGlv
RGF0YSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JN
KE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVk
aW9EZXN0aW5hdGlvbk1hYy5oCmluZGV4IDE4YjEwYWJlYmQ1ZGE0OTUxYzA5ZTE5NmY0ZTM3MjA0
MTFmYmM3NjUuLjdmZjY0MjhmMDA4ZGYyY2E4MDVmYzFhNjViYjY1MTFjZjlkYThhZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9u
TWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuaApAQCAtMjYsNDUgKzI2LDE4IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgQXVkaW9EZXN0aW5hdGlvbk1hY19oCi0jZGVmaW5lIEF1ZGlvRGVzdGluYXRpb25NYWNfaAor
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvRGVz
dGluYXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlv
J3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0Ci0KLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25NYWMg
OiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTWFjIGZp
bmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Db2NvYSB7CiBwdWJsaWM6CiAgICAgQXVkaW9E
ZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2smLCBmbG9hdCBzYW1wbGVSYXRlKTsKICAgICB2
aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTWFjKCk7CiAKLXByaXZhdGU6CiAgICAgdm9pZCBjb25m
aWd1cmUoKTsKLQotICAgIC8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCi0gICAgc3RhdGlj
IE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9u
RmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBu
dW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOwotCi0gICAgT1NTdGF0dXMg
cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOwot
ICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOwotCi0gICAgdm9pZCBzdGFydCgpIG92ZXJyaWRl
OwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNQbGF5aW5nKCkgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRw
dXRVbml0OwotICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8QXVk
aW9CdXM+IG1fcmVuZGVyQnVzOwotCi0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIGJvb2wg
bV9pc1BsYXlpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBB
dWRpb0Rlc3RpbmF0aW9uTWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381094</attachid>
            <date>2019-10-16 12:00:55 -0700</date>
            <delta_ts>2019-10-17 01:53:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191016210052.patch</filename>
            <type>text/plain</type>
            <size>34020</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjViZjMyZGYxZWY3NmQ5
ZGU1NWZiMGI2ZmJlNjZjYmEzMjk3MGFkNC4uNzZhOWZiNjdhOWJkN2RkN2I2YzhiM2VhYzM3ZWMy
ZWJiMTIwNGUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDE5LTEwLTE2ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEF1ZGlvRGVz
dGluYXRpb25Db2NvYSB0byBzaGFyZSBjb2RlIGJldHdlZW4gaU9TIGFuZCBNYWMuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50
eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjp+QXVk
aW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25D
b2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hOjpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c2V0SXNQbGF5
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6cmVuZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6aW5wdXRQcm9jKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6Om91dHB1dFVuaXQpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvRGVzdGluYXRpb25JT1M6On5BdWRpb0Rlc3RpbmF0aW9uSU9TKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRGVzdGluYXRpb25JT1M6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uSU9TOjpmcmFtZVNpemVDaGFuZ2VkUHJvYyk6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0
aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYyk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmg6CisKIDIwMTktMTAtMTUgIHlvdWVubiBmYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgaGVhZGVycyB0byBrZWVwIGZy
b20gYSBIVFRQSGVhZGVyTmFtZVNldCB0byBhbiBPcHRpb25TZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGQ4NDg0N2NlMzIyMDI5NjMzNDgyOWQ0OTY5NjkyOTA4OWQwNmIxMzkuLmFjNzA3
ZDliNjNiZWI0MjMyNGZiOWMxYWJlNjI4OWE0ZmZhNGZmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMTYzLDYgKzE2Myw3IEBAIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVl
TWFjLmNwcAogCiBwbGF0Zm9ybS9hdWRpby9BdWRpb1Nlc3Npb24uY3BwCiAKK3BsYXRmb3JtL2F1
ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKIHBsYXRmb3JtL2F1ZGlvL2NvY29h
L01lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5tbQogcGxhdGZvcm0vYXVkaW8vY29jb2EvV2ViQXVk
aW9CdWZmZXJMaXN0LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTQ1YWQ1ODNkOTJjMGZlYjhiNjhkMzhhN2U4NjFjYjI3
ZTYwYjg5OS4uZTU5OTkxNzFhMmJlOGY4MjZiYjQ5N2E1OTgxYzdhMDczZDAyYTgwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NzIxOCw2ICs3MjE4LDggQEAKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVz
cG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXNwb25zZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENjFDN0I1NzA0MDAwOTFDNkYg
LyogRmV0Y2hCb2R5U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZl
dGNoQm9keVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENzFD
N0I1NzA0MDAwOTFDNkUgLyogRmV0Y2hSZXNwb25zZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRmV0Y2hSZXNwb25zZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMzE1
MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDEzMTUxODYyMzU3NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25D
b2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMUYzQjExRjk1NTI4MTAwNTk5OTVBIC8qIEpTRmV0Y2hF
dmVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zl
dGNoRXZlbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNC
NDFGOTU1QkMzMDA1OTk5NUEgLyogRXh0ZW5kYWJsZUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxMzFGM0I1MUY5NTVCQzUwMDU5OTk1QSAvKiBFeHRlbmRhYmxlRXZl
bnRJbml0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1ODIzLDYgKzI1ODI1LDggQEAKIAkJ
Q0Q2NjlENjUxRDIzMkRGNDAwNEQxODY2IC8qIGNvY29hICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLywKKwkJCQk0MTMxNTE4NjIzNTc3NDVFMDAxMTVFNkUg
LyogQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8sCiAJCQkJNDE3RjdBRUQyMTM5QkY2NTAwRkJB
N0VDIC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5oICovLAogCQkJCTQxN0Y3QUVBMjEzOUJG
NjQwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0gKi8sCiAJCQkJNDE3RjdB
RUIyMTM5QkY2NDAwRkJBN0VDIC8qIFdlYkF1ZGlvQnVmZmVyTGlzdC5jcHAgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9u
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZjU2NTBhMDFmNDcxMTVkYWY0MzllNzBhYmIz
YjRlOTdiMWVhNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcApAQCAtMCwwICsxLDE1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0J1
cy5oIgorI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgorI2luY2x1ZGUgIkF1ZGlvU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNsdWRlICJWZWN0
b3JNYXRoLmgiCisKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0F1ZGlv
SGFyZHdhcmUuaD4KKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8
d3RmL1NvZnRMaW5raW5nLmg+CisKK1NPRlRfTElOS19GUkFNRVdPUksoQXVkaW9Ub29sYm94KQor
U09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UsIE9T
U3RhdHVzLCAoQXVkaW9Db21wb25lbnRJbnN0YW5jZSBpbkluc3RhbmNlKSwgKGluSW5zdGFuY2Up
KQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3RhcnQsIE9TU3RhdHVz
LCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvT3V0
cHV0VW5pdFN0b3AsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKKyNlbmRpZiAvLyBQ
TEFURk9STShJT1NfRkFNSUxZKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGludCBr
UmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKK2NvbnN0IGZsb2F0IGtMb3dUaHJlc2hvbGQgPSAtMTsK
K2NvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xkID0gMTsKKworQXVkaW9EZXN0aW5hdGlvbkNvY29h
OjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZmxvYXQg
c2FtcGxlUmF0ZSkKKyAgICA6IG1fb3V0cHV0VW5pdCgwKQorICAgICwgbV9jYWxsYmFjayhjYWxs
YmFjaykKKyAgICAsIG1fcmVuZGVyQnVzKEF1ZGlvQnVzOjpjcmVhdGUoMiwga1JlbmRlckJ1ZmZl
clNpemUsIGZhbHNlKS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICwgbV9zcGFyZUJ1cyhBdWRpb0J1
czo6Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCB0cnVlKS5yZWxlYXNlTm9uTnVsbCgpKQor
ICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCit7Cit9CisKK0F1ZGlvRGVzdGluYXRpb25D
b2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2NvYSgpCit7CisgICAgaWYgKG1fb3V0cHV0VW5pdCkK
KyAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsKK30K
Kwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0KCkKK3sKKyAgICBMT0coTWVkaWEs
ICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0Iik7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0g
QXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsKKworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkNv
Y29hOjpzdG9wKCkKK3sKKyAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0
b3AiKTsKKyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9wKG1fb3V0cHV0
VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsK
K30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnNldElzUGxheWluZyhib29sIGlzUGxh
eWluZykKK3sKKyAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5aW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKKyAgICBtX2NhbGxiYWNrLmlzUGxh
eWluZ0RpZENoYW5nZSgpOworfQorCitzdGF0aWMgdm9pZCBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1
cyhBdWRpb0J1ZmZlciogYnVmZmVycywgQXVkaW9CdXMmIGJ1cywgVUludDMyIG51bWJlck9mQnVm
ZmVycywgVUludDMyIG51bWJlck9mRnJhbWVzLCBVSW50MzIgZnJhbWVPZmZzZXQsIFVJbnQzMiBm
cmFtZXNUaGlzVGltZSkKK3sKKyAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IG51bWJlck9mQnVm
ZmVyczsgKytpKSB7CisgICAgICAgIFVJbnQzMiBieXRlc1BlckZyYW1lID0gYnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gbnVtYmVyT2ZGcmFtZXM7CisgICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0
ID0gZnJhbWVPZmZzZXQgKiBieXRlc1BlckZyYW1lOworICAgICAgICBhdXRvKiBtZW1vcnkgPSBy
ZWludGVycHJldF9jYXN0PGZsb2F0Kj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYnVmZmVyc1tp
XS5tRGF0YSkgKyBieXRlT2Zmc2V0KTsKKyAgICAgICAgYnVzLnNldENoYW5uZWxNZW1vcnkoaSwg
bWVtb3J5LCBmcmFtZXNUaGlzVGltZSk7CisgICAgfQorfQorCisvLyBQdWxscyBvbiBvdXIgcHJv
dmlkZXIgdG8gZ2V0IHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4KK09TU3RhdHVzIEF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0
KiBpb0RhdGEpCit7CisgICAgYXV0byogYnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7CisgICAg
VUludDMyIG51bWJlck9mQnVmZmVycyA9IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7CisgICAgVUlu
dDMyIGZyYW1lc1JlbWFpbmluZyA9IG51bWJlck9mRnJhbWVzOworICAgIFVJbnQzMiBmcmFtZU9m
ZnNldCA9IDA7CisgICAgd2hpbGUgKGZyYW1lc1JlbWFpbmluZyA+IDApIHsKKyAgICAgICAgaWYg
KG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKSB7CisgICAgICAgICAgICBBU1NF
UlQobV9zdGFydFNwYXJlRnJhbWUgPCBtX2VuZFNwYXJlRnJhbWUpOworICAgICAgICAgICAgVUlu
dDMyIGZyYW1lc1RoaXNUaW1lID0gc3RkOjptaW48VUludDMyPihtX2VuZFNwYXJlRnJhbWUgLSBt
X3N0YXJ0U3BhcmVGcmFtZSwgbnVtYmVyT2ZGcmFtZXMpOworICAgICAgICAgICAgYXNzaWduQXVk
aW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJCdXMuZ2V0KCksIG51bWJlck9mQnVmZmVy
cywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAg
ICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZShtX3NwYXJlQnVzLmdldCgpLCBtX3N0YXJ0
U3BhcmVGcmFtZSwgbV9lbmRTcGFyZUZyYW1lKTsKKyAgICAgICAgICAgIGZyYW1lT2Zmc2V0ICs9
IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09IGZyYW1lc1Ro
aXNUaW1lOworICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgKz0gZnJhbWVzVGhpc1RpbWU7
CisgICAgICAgIH0KKworICAgICAgICBVSW50MzIgZnJhbWVzVGhpc1RpbWUgPSBzdGQ6Om1pbjxV
SW50MzI+KGtSZW5kZXJCdWZmZXJTaXplLCBmcmFtZXNSZW1haW5pbmcpOworICAgICAgICBhc3Np
Z25BdWRpb0J1ZmZlcnNUb0J1cyhidWZmZXJzLCBtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZC
dWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKKwor
ICAgICAgICBpZiAoIWZyYW1lc1RoaXNUaW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGlmIChmcmFtZXNUaGlzVGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBt
X2NhbGxiYWNrLnJlbmRlcigwLCBtX3NwYXJlQnVzLnB0cigpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7
CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZShtX3NwYXJlQnVzLmdldCgp
LCAwLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBtX3N0YXJ0U3BhcmVGcmFtZSA9IGZy
YW1lc1RoaXNUaW1lOworICAgICAgICAgICAgbV9lbmRTcGFyZUZyYW1lID0ga1JlbmRlckJ1ZmZl
clNpemU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwg
bV9yZW5kZXJCdXMucHRyKCksIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAgICAgZnJhbWVPZmZzZXQg
Kz0gZnJhbWVzVGhpc1RpbWU7CisgICAgICAgIGZyYW1lc1JlbWFpbmluZyAtPSBmcmFtZXNUaGlz
VGltZTsKKyAgICB9CisKKyAgICByZXR1cm4gbm9FcnI7Cit9CisKKy8vIERlZmF1bHRPdXRwdXRV
bml0IGNhbGxiYWNrCitPU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmlucHV0UHJvYyh2
b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1Rp
bWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciovLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1
ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIGF1dG8qIGF1ZGlvT3V0cHV0ID0gc3RhdGlj
X2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbkNvY29hKj4odXNlckRhdGEpOworICAgIHJldHVybiBhdWRp
b091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29h
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9u
Q29jb2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZTYyNWQ3YmU0N2IwNTY0MGE1ZDM0MmI5MDM3ZjMzMjlhMzZh
ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29j
b2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb24uaCIKKyNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQnVz
OworCisvLyBBbiBBdWRpb0Rlc3RpbmF0aW9uIHVzaW5nIENvcmVBdWRpbydzIGRlZmF1bHQgb3V0
cHV0IEF1ZGlvVW5pdAorY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkNvY29hIDogcHVibGljIEF1ZGlv
RGVzdGluYXRpb24geworcHVibGljOgorICAgIEF1ZGlvRGVzdGluYXRpb25Db2NvYShBdWRpb0lP
Q2FsbGJhY2smLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0
aW9uQ29jb2EoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOwor
CisgICAgYm9vbCBpc1BsYXlpbmcoKSBmaW5hbCB7IHJldHVybiBtX2lzUGxheWluZzsgfQorICAg
IGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0K
KyAgICBBdWRpb1VuaXQmIG91dHB1dFVuaXQoKSB7IHJldHVybiBtX291dHB1dFVuaXQ7IH0KKyAg
ICAKKyAgICAvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjaworICAgIHN0YXRpYyBPU1N0YXR1
cyBpbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwg
Y29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgYnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZG
cmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKKworcHJpdmF0ZToKKyAgICBPU1N0YXR1
cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7
CisKKyAgICB2b2lkIHN0YXJ0KCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAg
ICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OworICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9jYWxsYmFj
azsKKyAgICBSZWY8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIFJlZjxBdWRpb0J1cz4gbV9z
cGFyZUJ1czsKKworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5n
IHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZyYW1lIHsgMCB9OworICAg
IHVuc2lnbmVkIG1fZW5kU3BhcmVGcmFtZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKaW5k
ZXggNGJkZTdlNDFlMmI2NDM3Y2QwZmY3MjVlNGQwNzlkNjhmODllN2RjNS4uNTY1YmI5ZGQzZDI2
YzQ2MmE5ZTRlNDc3NjA5ZmI5ODNmNjEyZTk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcApAQCAtNDYs
MTAgKzQ2LDcgQEAKIAogU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xib3gpCiBTT0ZUX0xJ
TksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEZpbmROZXh0LCBBdWRpb0NvbXBvbmVudCwg
KEF1ZGlvQ29tcG9uZW50IGluQ29tcG9uZW50LCBjb25zdCBBdWRpb0NvbXBvbmVudERlc2NyaXB0
aW9uICppbkRlc2MpLCAoaW5Db21wb25lbnQsIGluRGVzYykpCi1TT0ZUX0xJTksoQXVkaW9Ub29s
Ym94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZSwgT1NTdGF0dXMsIChBdWRpb0NvbXBv
bmVudEluc3RhbmNlIGluSW5zdGFuY2UpLCAoaW5JbnN0YW5jZSkpCiBTT0ZUX0xJTksoQXVkaW9U
b29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3LCBPU1N0YXR1cywgKEF1ZGlvQ29tcG9u
ZW50IGluQ29tcG9uZW50LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlICpvdXRJbnN0YW5jZSksIChp
bkNvbXBvbmVudCwgb3V0SW5zdGFuY2UpKQotU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9P
dXRwdXRVbml0U3RhcnQsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKLVNPRlRfTElO
SyhBdWRpb1Rvb2xib3gsIEF1ZGlvT3V0cHV0VW5pdFN0b3AsIE9TU3RhdHVzLCAoQXVkaW9Vbml0
IGNpKSwgKGNpKSkKIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvVW5pdEFkZFByb3BlcnR5
TGlzdGVuZXIsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGluVW5pdCwgQXVkaW9Vbml0UHJvcGVydHlJ
RCBpbklELCBBdWRpb1VuaXRQcm9wZXJ0eUxpc3RlbmVyUHJvYyBpblByb2MsIHZvaWQgKmluUHJv
Y1VzZXJEYXRhKSwgKGluVW5pdCwgaW5JRCwgaW5Qcm9jLCBpblByb2NVc2VyRGF0YSkpCiBTT0ZU
X0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRHZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChBdWRp
b1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFNjb3BlIGlu
U2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgaW5FbGVtZW50LCB2b2lkICpvdXREYXRhLCBVSW50MzIg
KmlvRGF0YVNpemUpLCAoaW5Vbml0LCBpbklELCBpblNjb3BlLCBpbkVsZW1lbnQsIG91dERhdGEs
IGlvRGF0YVNpemUpKQogU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9Vbml0SW5pdGlhbGl6
ZSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0KSwgKGluVW5pdCkpCkBAIC01NywxNiArNTQs
OCBAQCBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRTZXRQcm9wZXJ0eSwgT1NTdGF0
dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpbwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNv
bnN0IGludCBrUmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKIGNvbnN0IGludCBrUHJlZmVycmVkQnVm
ZmVyU2l6ZSA9IDI1NjsKIAotdHlwZWRlZiBIYXNoU2V0PEF1ZGlvRGVzdGluYXRpb25JT1MqPiBB
dWRpb0Rlc3RpbmF0aW9uU2V0Owotc3RhdGljIEF1ZGlvRGVzdGluYXRpb25TZXQmIGF1ZGlvRGVz
dGluYXRpb25zKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXVkaW9EZXN0aW5hdGlv
blNldD4gYXVkaW9EZXN0aW5hdGlvblNldDsKLSAgICByZXR1cm4gYXVkaW9EZXN0aW5hdGlvblNl
dDsKLX0KLQogLy8gRmFjdG9yeSBtZXRob2Q6IGlPUy1pbXBsZW1lbnRhdGlvbgogc3RkOjp1bmlx
dWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lP
Q2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJh
dGUpCiB7CkBAIC04MCw3ICs2OSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9u
PiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiBjYWxsCiAgICAgaWYg
KG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgIT0gMikKICAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9E
ZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIG91dHB1dCBjaGFubmVs
cyIsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxl
UmF0ZSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uSU9TPihjYWxs
YmFjaywgc2FtcGxlUmF0ZSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IG1ha2VVbmlxdWU8QXVk
aW9EZXN0aW5hdGlvbklPUz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOworICAgIGRlc3RpbmF0aW9u
LT5jb25maWd1cmUoKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CiB9CiAKIGZsb2F0IEF1ZGlv
RGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCkBAIC05OCwxNSArODksMTYgQEAgdW5z
aWduZWQgbG9uZyBBdWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQogfQogCiBBdWRp
b0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKEF1ZGlvSU9DYWxsYmFjayYgY2Fs
bGJhY2ssIGRvdWJsZSBzYW1wbGVSYXRlKQotICAgIDogbV9vdXRwdXRVbml0KDApCi0gICAgLCBt
X2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9yZW5kZXJCdXMoQXVkaW9CdXM6OmNyZWF0ZSgy
LCBrUmVuZGVyQnVmZmVyU2l6ZSwgZmFsc2UpKQotICAgICwgbV9zcGFyZUJ1cyhBdWRpb0J1czo6
Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCB0cnVlKSkKLSAgICAsIG1fc2FtcGxlUmF0ZShz
YW1wbGVSYXRlKQotICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCisgICAgOiBBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EoY2FsbGJhY2ssIHNhbXBsZVJhdGUpCiB7Ci0gICAgYXVkaW9EZXN0aW5hdGlvbnMo
KS5hZGQodGhpcyk7Cit9CiAKK0F1ZGlvRGVzdGluYXRpb25JT1M6On5BdWRpb0Rlc3RpbmF0aW9u
SU9TKCkKK3sKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpjb25maWd1cmUoKQorewog
ICAgIC8vIE9wZW4gYW5kIGluaXRpYWxpemUgRGVmYXVsdE91dHB1dFVuaXQKICAgICBBdWRpb0Nv
bXBvbmVudCBjb21wOwogICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gZGVzYzsKQEAgLTEy
MCw1NCArMTEyLDQwIEBAIEF1ZGlvRGVzdGluYXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25JT1Mo
QXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZG91YmxlIHNhbXBsCiAKICAgICBBU1NFUlQoY29t
cCk7CiAKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGNv
bXAsICZtX291dHB1dFVuaXQpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50
SW5zdGFuY2VOZXcoY29tcCwgJm91dHB1dFVuaXQoKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwog
CiAgICAgVUludDMyIGZsYWcgPSAxOwotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5
KG1fb3V0cHV0VW5pdCwgCi0gICAgICAgIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJ
TywgCi0gICAgICAgIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIAorICAgIHJlc3VsdCA9IEF1ZGlv
VW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwKKyAgICAgICAga0F1ZGlvT3V0cHV0VW5pdFBy
b3BlcnR5X0VuYWJsZUlPLAorICAgICAgICBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LAogICAgICAg
ICAwLAotICAgICAgICAmZmxhZywgCisgICAgICAgICZmbGFnLAogICAgICAgICBzaXplb2YoZmxh
ZykpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEFkZFBy
b3BlcnR5TGlzdGVuZXIobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfTWF4aW11bUZy
YW1lc1BlclNsaWNlLCBmcmFtZVNpemVDaGFuZ2VkUHJvYywgdGhpcyk7CisgICAgcmVzdWx0ID0g
QXVkaW9Vbml0QWRkUHJvcGVydHlMaXN0ZW5lcihvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9w
ZXJ0eV9NYXhpbXVtRnJhbWVzUGVyU2xpY2UsIGZyYW1lU2l6ZUNoYW5nZWRQcm9jLCB0aGlzKTsK
ICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXpl
KG1fb3V0cHV0VW5pdCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRV
bml0KCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKLQotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1B
dWRpb0Rlc3RpbmF0aW9uSU9TOjp+QXVkaW9EZXN0aW5hdGlvbklPUygpCi17Ci0gICAgYXVkaW9E
ZXN0aW5hdGlvbnMoKS5yZW1vdmUodGhpcyk7Ci0KLSAgICBpZiAobV9vdXRwdXRVbml0KQotICAg
ICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX291dHB1dFVuaXQpOwotfQotCi12
b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmNvbmZpZ3VyZSgpCi17CiAgICAgLy8gU2V0IHJlbmRl
ciBjYWxsYmFjawogICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3QgaW5wdXQ7CiAgICAgaW5wdXQu
aW5wdXRQcm9jID0gaW5wdXRQcm9jOwogICAgIGlucHV0LmlucHV0UHJvY1JlZkNvbiA9IHRoaXM7
Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0
LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9J
bnB1dCwgMCwgJmlucHV0LCBzaXplb2YoaW5wdXQpKTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxs
YmFjaywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOwog
ICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIC8vIFNldCBzdHJlYW0gZm9ybWF0CiAgICAgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0cmVhbUZvcm1hdDsKIAogICAgIFVJbnQzMiBzaXpl
ID0gc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik7Ci0gICAgcmVzdWx0ID0gQXVk
aW9Vbml0R2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFt
Rm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwg
JnNpemUpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG91dHB1dFVuaXQoKSwg
a0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwg
MCwgKHZvaWQqKSZzdHJlYW1Gb3JtYXQsICZzaXplKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAK
ICAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMyKTsKICAgICBjb25z
dCBpbnQgYml0c1BlckJ5dGUgPSA4OwotICAgIHN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IG1f
c2FtcGxlUmF0ZTsKKyAgICBzdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlKCk7
CiAgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKICAg
ICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9h
dFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwogICAgIHN0cmVhbUZv
cm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OwpAQCAtMTc2LDk5ICsxNTQsMTgg
QEAgdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpjb25maWd1cmUoKQogICAgIHN0cmVhbUZvcm1h
dC5tQ2hhbm5lbHNQZXJGcmFtZSA9IDI7CiAgICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5l
bCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5p
dFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1h
dCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9m
KEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAg
IEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldFByZWZlcnJlZEJ1ZmZlclNpemUoa1By
ZWZlcnJlZEJ1ZmZlclNpemUpOwogfQogCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0YXJ0
KCkKLXsKLSAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzdGFydCIpOwotCi0g
ICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwotfQotCi12b2lk
IEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3AoKQotewotICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVz
dGluYXRpb25JT1M6OnN0b3AiKTsKLQotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0
VW5pdFN0b3AobV9vdXRwdXRVbml0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQ
bGF5aW5nKGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMo
QXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzJiBidXMsIFVJbnQzMiBudW1iZXJPZkJ1ZmZl
cnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZyYW1lT2Zmc2V0LCBVSW50MzIgZnJh
bWVzVGhpc1RpbWUpCi17Ci0gICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1ZmZl
cnM7ICsraSkgewotICAgICAgICBVSW50MzIgYnl0ZXNQZXJGcmFtZSA9IGJ1ZmZlcnNbaV0ubURh
dGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOwotICAgICAgICBVSW50MzIgYnl0ZU9mZnNldCA9
IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKLSAgICAgICAgZmxvYXQqIG1lbW9yeSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXJzW2ld
Lm1EYXRhKSArIGJ5dGVPZmZzZXQpOwotICAgICAgICBidXMuc2V0Q2hhbm5lbE1lbW9yeShpLCBt
ZW1vcnksIGZyYW1lc1RoaXNUaW1lKTsKLSAgICB9Ci19Ci0KLS8vIFB1bGxzIG9uIG91ciBwcm92
aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgotT1NTdGF0dXMgQXVkaW9EZXN0aW5h
dGlvbklPUzo6cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCi17Ci0gICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOwot
ICAgIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMgPSBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOwotICAg
IFVJbnQzMiBmcmFtZXNSZW1haW5pbmcgPSBudW1iZXJPZkZyYW1lczsKLSAgICBVSW50MzIgZnJh
bWVPZmZzZXQgPSAwOwotICAgIHdoaWxlIChmcmFtZXNSZW1haW5pbmcgPiAwKSB7Ci0gICAgICAg
IGlmIChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSkgewotICAgICAgICAgICAg
QVNTRVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKTsKLSAgICAgICAgICAg
IFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4obV9lbmRTcGFyZUZyYW1l
IC0gbV9zdGFydFNwYXJlRnJhbWUsIG51bWJlck9mRnJhbWVzKTsKLSAgICAgICAgICAgIGFzc2ln
bkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsICptX3JlbmRlckJ1cywgbnVtYmVyT2ZCdWZmZXJz
LCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKLSAgICAgICAg
ICAgIG1fcmVuZGVyQnVzLT5jb3B5RnJvbVJhbmdlKCptX3NwYXJlQnVzLCBtX3N0YXJ0U3BhcmVG
cmFtZSwgbV9lbmRTcGFyZUZyYW1lKTsKLSAgICAgICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1l
c1RoaXNUaW1lOwotICAgICAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09IGZyYW1lc1RoaXNUaW1l
OwotICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgKz0gZnJhbWVzVGhpc1RpbWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBVSW50MzIgZnJhbWVzVGhpc1RpbWUgPSBzdGQ6Om1pbjxVSW50MzI+
KGtSZW5kZXJCdWZmZXJTaXplLCBmcmFtZXNSZW1haW5pbmcpOwotICAgICAgICBhc3NpZ25BdWRp
b0J1ZmZlcnNUb0J1cyhidWZmZXJzLCAqbV9yZW5kZXJCdXMsIG51bWJlck9mQnVmZmVycywgbnVt
YmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlzVGltZSk7Ci0KLSAgICAgICAgaWYg
KCFmcmFtZXNUaGlzVGltZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoZnJhbWVz
VGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgbV9jYWxsYmFjay5y
ZW5kZXIoMCwgbV9zcGFyZUJ1cy5nZXQoKSwga1JlbmRlckJ1ZmZlclNpemUpOwotICAgICAgICAg
ICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UoKm1fc3BhcmVCdXMsIDAsIGZyYW1lc1RoaXNU
aW1lKTsKLSAgICAgICAgICAgIG1fc3RhcnRTcGFyZUZyYW1lID0gZnJhbWVzVGhpc1RpbWU7Ci0g
ICAgICAgICAgICBtX2VuZFNwYXJlRnJhbWUgPSBrUmVuZGVyQnVmZmVyU2l6ZTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigwLCBtX3JlbmRlckJ1cy5nZXQo
KSwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICBmcmFtZU9mZnNldCArPSBmcmFtZXNUaGlzVGlt
ZTsKLSAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09IGZyYW1lc1RoaXNUaW1lOwotICAgIH0KLQot
ICAgIHJldHVybiBub0VycjsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpzZXRJc1Bs
YXlpbmcoYm9vbCBpc1BsYXlpbmcpCi17Ci0gICAgaWYgKG1faXNQbGF5aW5nID09IGlzUGxheWlu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7Ci0gICAg
bV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKLX0KLQotLy8gRGVmYXVsdE91dHB1dFVu
aXQgY2FsbGJhY2sKLU9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25JT1M6OmlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciovLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogaW9EYXRhKQotewotICAgIEF1ZGlvRGVzdGluYXRpb25JT1MqIGF1ZGlvT3V0
cHV0ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbklPUyo+KHVzZXJEYXRhKTsKLSAgICBy
ZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihudW1iZXJPZkZyYW1lcywgaW9EYXRhKTsKLX0KLQog
dm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpmcmFtZVNpemVDaGFuZ2VkUHJvYyh2b2lkICppblJl
ZkNvbiwgQXVkaW9Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRpb1VuaXRTY29wZSwgQXVk
aW9Vbml0RWxlbWVudCkKIHsKICAgICBBdWRpb0Rlc3RpbmF0aW9uSU9TKiBhdWRpb091dHB1dCA9
IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRpb25JT1MqPihpblJlZkNvbik7CiAgICAgVUludDMy
IGJ1ZmZlclNpemUgPSAwOwogICAgIFVJbnQzMiBkYXRhU2l6ZSA9IHNpemVvZihidWZmZXJTaXpl
KTsKLSAgICBBdWRpb1VuaXRHZXRQcm9wZXJ0eShhdWRpb091dHB1dC0+bV9vdXRwdXRVbml0LCBr
QXVkaW9Vbml0UHJvcGVydHlfTWF4aW11bUZyYW1lc1BlclNsaWNlLCBrQXVkaW9Vbml0U2NvcGVf
R2xvYmFsLCAwLCAodm9pZCopJmJ1ZmZlclNpemUsICZkYXRhU2l6ZSk7CisgICAgQXVkaW9Vbml0
R2V0UHJvcGVydHkoYXVkaW9PdXRwdXQtPm91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5
X01heGltdW1GcmFtZXNQZXJTbGljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgKHZvaWQq
KSZidWZmZXJTaXplLCAmZGF0YVNpemUpOwogICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBmcmFt
ZVNpemVDaGFuZ2VkID0gJWx1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihidWZmZXJT
aXplKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lv
cy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
b3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCmluZGV4IGQ2OTIzOWZhY2I5NjYzOWMxNTllYmZlMTNl
OWFlODAyZWRlMTZmNzUuLjkyNjYxZjFiMjFhMTBlMTQ5ZGQ0NTVlNjc1MDVjMTgxMmI1NGRmNjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3Rp
bmF0aW9uSU9TLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlv
RGVzdGluYXRpb25JT1MuaApAQCAtMjksNTEgKzI5LDI0IEBACiAKICNwcmFnbWEgb25jZQogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9S
TShJT1NfRkFNSUxZKQogCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0Rl
c3RpbmF0aW9uLmgiCi0jaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5oPgotI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBBbiBBdWRpb0Rlc3RpbmF0aW9uIHVzaW5nIENvcmVBdWRp
bydzIGRlZmF1bHQgb3V0cHV0IEF1ZGlvVW5pdAotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9uSU9T
IGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24geworY2xhc3MgQXVkaW9EZXN0aW5hdGlv
bklPUyBmaW5hbCA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgewogcHVibGljOgogICAg
IEF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiwgZG91YmxlIHNhbXBsZVJhdGUp
OwogICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25JT1MoKTsKIAotcHJpdmF0ZToKICAgICB2
b2lkIGNvbmZpZ3VyZSgpOwogCi0gICAgLy8gQXVkaW9EZXN0aW5hdGlvbgotICAgIHZvaWQgc3Rh
cnQoKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICBib29sIGlzUGxh
eWluZygpIG92ZXJyaWRlIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9Ci0gICAgZmxvYXQgc2FtcGxl
UmF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQotCitwcml2YXRl
OgogICAgIC8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCi0gICAgc3RhdGljIE9TU3RhdHVz
IGlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZy
YW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOwogICAgIHN0YXRpYyB2b2lkIGZyYW1lU2l6
ZUNoYW5nZWRQcm9jKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQ
cm9wZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFNjb3BlIGluU2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQg
aW5FbGVtZW50KTsKLQotICAgIGZyaWVuZCBmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2Fy
ZVNhbXBsZVJhdGUoKTsKLQotICAgIE9TU3RhdHVzIHJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKLSAgICB2b2lkIHNldElzUGxheWluZyhib29s
KTsKLQotICAgIEF1ZGlvVW5pdCBtX291dHB1dFVuaXQ7Ci0gICAgQXVkaW9JT0NhbGxiYWNrJiBt
X2NhbGxiYWNrOwotICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9yZW5kZXJCdXM7Ci0gICAgUmVmUHRy
PEF1ZGlvQnVzPiBtX3NwYXJlQnVzOwotICAgIHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZyYW1lIHsg
MCB9OwotICAgIHVuc2lnbmVkIG1fZW5kU3BhcmVGcmFtZSB7IDAgfTsKLQotICAgIGRvdWJsZSBt
X3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBtX2lzUGxheWluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcApp
bmRleCA5ZmU2NGJhYWE0Nzg0ZmVjZGFiM2Q2ZGRiNWUyNzgzODFlMWUwNzAwLi42NTYxMzRlM2Mx
ZjAzZTUzYTllYTZjZmRhNTlkOWU5MDRkMmFjZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCkBAIC00
NCwxMCArNDQsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNvbnN0IGludCBrQnVmZmVy
U2l6ZSA9IDEyODsKLWNvbnN0IGZsb2F0IGtMb3dUaHJlc2hvbGQgPSAtMTsKLWNvbnN0IGZsb2F0
IGtIaWdoVGhyZXNob2xkID0gMTsKLQogLy8gRmFjdG9yeSBtZXRob2Q6IE1hYy1pbXBsZW1lbnRh
dGlvbgogc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246
OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25l
ZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMs
IGZsb2F0IHNhbXBsZVJhdGUpCiB7CkBAIC02MSw3ICs1Nyw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxB
dWRpb0Rlc3RpbmF0aW9uPiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNr
JiBjYWxsCiAgICAgaWYgKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgIT0gMikKICAgICAgICAgTE9H
KE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVk
IG91dHB1dCBjaGFubmVscyIsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscywgc2FtcGxlUmF0ZSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0Rlc3Rp
bmF0aW9uTWFjPihjYWxsYmFjaywgc2FtcGxlUmF0ZSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9
IG1ha2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbk1hYz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOwor
ICAgIGRlc3RpbmF0aW9uLT5jb25maWd1cmUoKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb247CiB9
CiAKIGZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCkBAIC04MCwx
MSArNzgsMTUgQEAgdW5zaWduZWQgbG9uZyBBdWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291
bnQoKQogfQogCiBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpBdWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlv
SU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVu
aXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRp
b0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXplLCBmYWxzZSkpCi0gICAgLCBtX3NhbXBsZVJhdGUo
c2FtcGxlUmF0ZSkKLSAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQorICAgIDogQXVkaW9EZXN0aW5h
dGlvbkNvY29hKGNhbGxiYWNrLCBzYW1wbGVSYXRlKQoreworfQorCitBdWRpb0Rlc3RpbmF0aW9u
TWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCit7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlv
bk1hYzo6Y29uZmlndXJlKCkKIHsKICAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRP
dXRwdXRVbml0CiAgICAgQXVkaW9Db21wb25lbnQgY29tcDsKQEAgLTk5LDMzICsxMDEsMjIgQEAg
QXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2sm
IGNhbGxiYWNrLCBmbG9hdCBzYW1wbGUKIAogICAgIEFTU0VSVChjb21wKTsKIAotICAgIE9TU3Rh
dHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoY29tcCwgJm1fb3V0cHV0VW5p
dCk7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21w
LCAmb3V0cHV0VW5pdCgpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBB
dWRpb1VuaXRJbml0aWFsaXplKG1fb3V0cHV0VW5pdCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0
SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNv
bmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1h
YygpCi17Ci0gICAgaWYgKG1fb3V0cHV0VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0
YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFj
Ojpjb25maWd1cmUoKQotewogICAgIC8vIFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRl
ckNhbGxiYWNrU3RydWN0IGlucHV0OwogICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsK
ICAgICBpbnB1dC5pbnB1dFByb2NSZWZDb24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9
IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1Nl
dFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVv
ZihpbnB1dCkpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQo
KSwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVf
R2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsK
IAogICAgIC8vIFNldCBzdHJlYW0gZm9ybWF0CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uIHN0cmVhbUZvcm1hdDsKLSAgICBzdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBs
ZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0ZSgpOwogICAg
IHN0cmVhbUZvcm1hdC5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007CiAgICAgc3Ry
ZWFtRm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNr
ZWQgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKICAgICBzdHJlYW1Gb3JtYXQu
bUJpdHNQZXJDaGFubmVsID0gOCAqIHNpemVvZihGbG9hdDMyKTsKQEAgLTEzNCw2MiArMTI1LDEw
IEBAIHZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6Y29uZmlndXJlKCkKICAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyUGFja2V0ID0gc2l6ZW9mKEZsb2F0MzIpOwogICAgIHN0cmVhbUZvcm1hdC5t
Qnl0ZXNQZXJGcmFtZSA9IHNpemVvZihGbG9hdDMyKTsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5p
dFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1h
dCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9m
KEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwg
a0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIH0KIAot
dm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzdGFydCgpCi17Ci0gICAgT1NTdGF0dXMgcmVzdWx0
ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRVbml0KTsKLQotICAgIGlmICghcmVzdWx0
KQotICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlv
bk1hYzo6c3RvcCgpCi17Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3Rv
cChtX291dHB1dFVuaXQpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHNldElzUGxheWlu
ZyhmYWxzZSk7Ci19Ci0KLS8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQg
YXVkaW8gc3RyZWFtLgotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6cmVuZGVyKFVJbnQz
MiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9C
dWZmZXIqIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOwotICAgIG1fcmVuZGVyQnVzLT5zZXRD
aGFubmVsTWVtb3J5KDAsIChmbG9hdCopYnVmZmVyc1swXS5tRGF0YSwgbnVtYmVyT2ZGcmFtZXMp
OwotICAgIG1fcmVuZGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDEsIChmbG9hdCopYnVmZmVyc1sx
XS5tRGF0YSwgbnVtYmVyT2ZGcmFtZXMpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBsb2NhbC9saXZlIGF1ZGlvIGlucHV0LgotICAgIG1fY2FsbGJhY2sucmVuZGVyKDAsIG1fcmVu
ZGVyQnVzLmdldCgpLCBudW1iZXJPZkZyYW1lcyk7Ci0KLSAgICAvLyBDbGFtcCB2YWx1ZXMgYXQg
MGRiIChpLmUuLCBbLTEuMCwgMS4wXSkKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9y
ZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvQ2hhbm5l
bCogY2hhbm5lbCA9IG1fcmVuZGVyQnVzLT5jaGFubmVsKGkpOwotICAgICAgICBpZiAoIWNoYW5u
ZWwtPmlzU2lsZW50KCkpCi0gICAgICAgICAgICBWZWN0b3JNYXRoOjp2Y2xpcChjaGFubmVsLT5k
YXRhKCksIDEsICZrTG93VGhyZXNob2xkLCAma0hpZ2hUaHJlc2hvbGQsIGNoYW5uZWwtPm11dGFi
bGVEYXRhKCksIDEsIG51bWJlck9mRnJhbWVzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbm9FcnI7
Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c2V0SXNQbGF5aW5nKGJvb2wgaXNQbGF5
aW5nKQotewotICAgIGlmIChtX2lzUGxheWluZyA9PSBpc1BsYXlpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOwotICAgIG1fY2FsbGJhY2suaXNQbGF5
aW5nRGlkQ2hhbmdlKCk7Ci19Ci0KLS8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCi1PU1N0
YXR1cyBBdWRpb0Rlc3RpbmF0aW9uTWFjOjppbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlv
VW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypi
dXNOdW1iZXIqLywgVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0
YSkKLXsKLSAgICBBdWRpb0Rlc3RpbmF0aW9uTWFjKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0
PEF1ZGlvRGVzdGluYXRpb25NYWMqPih1c2VyRGF0YSk7Ci0gICAgcmV0dXJuIGF1ZGlvT3V0cHV0
LT5yZW5kZXIobnVtYmVyT2ZGcmFtZXMsIGlvRGF0YSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCmluZGV4IDE4YjEw
YWJlYmQ1ZGE0OTUxYzA5ZTE5NmY0ZTM3MjA0MTFmYmM3NjUuLjdmZjY0MjhmMDA4ZGYyY2E4MDVm
YzFhNjViYjY1MTFjZjlkYThhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaApAQCAtMjYsNDUgKzI2LDE4IEBA
CiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQXVkaW9EZXN0aW5hdGlvbk1hY19oCi0jZGVm
aW5lIEF1ZGlvRGVzdGluYXRpb25NYWNfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBdWRp
b0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1Vu
aXQvQXVkaW9Vbml0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25Db2NvYS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEFuIEF1ZGlv
RGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0Ci0K
LWNsYXNzIEF1ZGlvRGVzdGluYXRpb25NYWMgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7Citj
bGFzcyBBdWRpb0Rlc3RpbmF0aW9uTWFjIGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25D
b2NvYSB7CiBwdWJsaWM6CiAgICAgQXVkaW9EZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2sm
LCBmbG9hdCBzYW1wbGVSYXRlKTsKICAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTWFjKCk7
CiAKLXByaXZhdGU6CiAgICAgdm9pZCBjb25maWd1cmUoKTsKLQotICAgIC8vIERlZmF1bHRPdXRw
dXRVbml0IGNhbGxiYWNrCi0gICAgc3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiB1c2Vy
RGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCos
IFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0
KiBpb0RhdGEpOwotCi0gICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywg
QXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOwotICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOwot
Ci0gICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAg
ICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zYW1wbGVSYXRl
OyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OwotICAgIEF1ZGlvSU9DYWxsYmFjayYg
bV9jYWxsYmFjazsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwotCi0gICAgZmxv
YXQgbV9zYW1wbGVSYXRlOwotICAgIGJvb2wgbV9pc1BsYXlpbmc7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381181</attachid>
            <date>2019-10-17 01:53:20 -0700</date>
            <delta_ts>2019-10-17 02:31:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191017105317.patch</filename>
            <type>text/plain</type>
            <size>55367</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjViZjMyZGYxZWY3NmQ5
ZGU1NWZiMGI2ZmJlNjZjYmEzMjk3MGFkNC4uZDAyZGUxYjdhZjdjZmY0MGQwZDMwNzJlNmZkZTZj
ZjhmZWZiOTY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE5LTEwLTE3ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjM0MDg2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgQXVkaW9EZXN0aW5hdGlvbkNvY29hIHRvIHNoYXJl
IGNvZGUgYmV0d2VlbiBpT1MgYW5kIE1hYy4KKyAgICAgICAgTW9zdCBjb2RlIGlzIG5vdyBzaGFy
ZWQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF1ZGlvIHVuaXQgd2hpY2gg
aXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gTWFjIGFuZCBpT1MuCisKKyAgICAgICAgSW50
cm9kdWNlIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgdG8gYWxsb3cgbW9yZSBjb2RlIGNvdmVy
YWdlIG9mIHRoZSBzaGFyZWQgY29kZS4KKyAgICAgICAgVGhpcyBjb3VsZCBhbHNvIGFsbG93IHVz
IHRvIHZhbGlkYXRlIGR5bmFtaWMgY2hhbmdlcyBpbiBmcmFtZSByYXRlLCBudW1iZXIgb2YgZnJh
bWVzIHRvIHByb2Nlc3MuLi4KKyAgICAgICAgQWRkIEludGVybmFscyBBUEkgdG8gZW5hYmxlIHRo
ZSBtb2NrIGRlc3RpbmF0aW9uLgorIAorICAgICAgICBDb3ZlcmVkIGJ5IGFkZGVkIHRlc3QuCisK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJk
d2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6
QXVkaW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25Db2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldElzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjph
c3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpvdXRwdXRVbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9E
ZXN0aW5hdGlvbklPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGlu
YXRpb25JT1MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2E6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EpOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjp0aWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29h
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmlkbDoKKwogMjAxOS0xMC0xNSAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBoZWFkZXJzIHRvIGtlZXAgZnJvbSBhIEhUVFBIZWFkZXJOYW1l
U2V0IHRvIGFuIE9wdGlvblNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZDg0ODQ3Y2Uz
MjIwMjk2MzM0ODI5ZDQ5Njk2OTI5MDg5ZDA2YjEzOS4uODBhMmZjZDk5ODJkMDA2NmYwZGIxNzNl
MDk4NGY0YWMxNDgwZjE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xNjMsNiArMTYz
LDcgQEAgcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVNYWMuY3BwCiAKIHBsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU2Vzc2lvbi5jcHAKIAorcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3BwCiAK
QEAgLTQ5Miw2ICs0OTMsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0KIAogcGxhdGZvcm0vbW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svTWVkaWFQbGF5YmFja1RhcmdldE1vY2suY3BwCitw
bGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCiAKIHBsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0RO
U1Jlc29sdmVRdWV1ZUNGTmV0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU0NWFkNTgzZDkyYzBmZWI4YjY4ZDM4YTdlODYx
Y2IyN2U2MGI4OTkuLmUzNWQ3ZjE5ZGQwMzFmZjQ2MjI1NzI0ZDdkMTg0ZTljNTJiOWUzZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTcyMTgsNiArNzIxOCw4IEBACiAJCTQxMzAxNUQ2MUM3QjU3MDQwMDA5MUM2RSAvKiBGZXRj
aFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoUmVzcG9u
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkx
QzZGIC8qIEZldGNoQm9keVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEJvZHlTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMDE1
RDcxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVzcG9uc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEZldGNoUmVzcG9uc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEF1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9EZXN0aW5hdGlvbkNvY29hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMzFGM0IxMUY5NTUyODEwMDU5OTk1QSAvKiBKU0Zl
dGNoRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNGZXRjaEV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEz
MUYzQjQxRjk1NUJDMzAwNTk5OTVBIC8qIEV4dGVuZGFibGVFdmVudEluaXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kYWJsZUV2ZW50SW5pdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNCNTFGOTU1QkM1MDA1OTk5NUEgLyogRXh0ZW5kYWJs
ZUV2ZW50SW5pdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXh0ZW5kYWJsZUV2ZW50SW5p
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzc4LDYgKzczODAsOCBAQAog
CQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlFRDFGNTVFQkM3MDAwMEY2RkQgLyogUmVh
ZGFibGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVh
ZGFibGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUI5MTM3NjIz
NTg0RDBFMDAyNUJGQTMgLyogTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjkxMzc4MjM1ODREMEYwMDI1QkZBMyAvKiBNb2Nr
QXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUJGMjA0MDIyQjk0NzE2MDAwNEY4MTIgLyogUmVhbHRpbWVWaWRlb1NvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQkYyMDQyMjJCOTQ3MTcwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVv
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyog
U2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5ODUyLDYgKzE5ODU2LDggQEAK
IAkJCQkwNzdCNjQxNTFCOTVGNzAzMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1RhcmdldE1vY2su
aCAqLywKIAkJCQkwNzdCNjQxMDFCOTRGMTJFMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck1vY2suY3BwICovLAogCQkJCTA3N0I2NDExMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5oICovLAorCQkJCTQxQjkxMzc4MjM1ODREMEYwMDI1
QkZBMyAvKiBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLywKKwkJCQk0MUI5MTM3NjIz
NTg0RDBFMDAyNUJGQTMgLyogTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovLAogCQkJCTQx
M0NDRDQ4MjBERTAxM0MwMDY1QTIxQSAvKiBNb2NrTWVkaWFEZXZpY2UuaCAqLywKIAkJCQkwN0Q2
QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAog
CQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5o
ICovLApAQCAtMjU4MjMsNiArMjU4MjksOCBAQAogCQlDRDY2OUQ2NTFEMjMyREY0MDA0RDE4NjYg
LyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTQxMzE1MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICov
LAorCQkJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2Eu
aCAqLywKIAkJCQk0MTdGN0FFRDIxMzlCRjY1MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLmggKi8sCiAJCQkJNDE3RjdBRUEyMTM5QkY2NDAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lv
bk1hbmFnZXJDb2NvYS5tbSAqLywKIAkJCQk0MTdGN0FFQjIxMzlCRjY0MDBGQkE3RUMgLyogV2Vi
QXVkaW9CdWZmZXJMaXN0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzMmY1NjVjN2VlMWIwNWJmNmNhMzY2MjU4NWI4ZGZhZjJkYjJlZTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgorCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9JT0Nh
bGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPENvcmVBdWRpby9BdWRpb0hhcmR3YXJl
Lmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPHd0Zi9Tb2Z0
TGlua2luZy5oPgorU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xib3gpCitTT0ZUX0xJTkso
QXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZSwgT1NTdGF0dXMsIChB
dWRpb0NvbXBvbmVudEluc3RhbmNlIGluSW5zdGFuY2UpLCAoaW5JbnN0YW5jZSkpCitTT0ZUX0xJ
TksoQXVkaW9Ub29sYm94LCBBdWRpb091dHB1dFVuaXRTdGFydCwgT1NTdGF0dXMsIChBdWRpb1Vu
aXQgY2kpLCAoY2kpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3Rv
cCwgT1NTdGF0dXMsIChBdWRpb1VuaXQgY2kpLCAoY2kpKQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
U19GQU1JTFkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZm
ZXJTaXplID0gMTI4OworCitDcmVhdGVBdWRpb0Rlc3RpbmF0aW9uQ29jb2FPdmVycmlkZSBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92ZXJyaWRlID0gbnVsbHB0cjsKKworc3RkOjp1bmlx
dWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lP
Q2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJh
dGUpCit7CisgICAgLy8gRklYTUU6IG1ha2UgdXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9w
cmlhdGUuCisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8g
aW5wdXQuCisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscykKKyAgICAgICAgTE9HKE1lZGlh
LCAiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIGlucHV0
IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxz
LCBzYW1wbGVSYXRlKTsKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGktY2hh
bm5lbCAoPiBzdGVyZW8pIG91dHB1dC4KKyAgICBpZiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyAh
PSAyKQorICAgICAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1
LCAlZikgLSB1bmhhbmRsZWQgb3V0cHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxz
LCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKKworICAgIGlmIChBdWRpb0Rl
c3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92ZXJyaWRlKQorICAgICAgICByZXR1cm4gQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpjcmVhdGVPdmVycmlkZShjYWxsYmFjaywgc2FtcGxlUmF0ZSk7CisKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uID0gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uQ29jb2E+KGNh
bGxiYWNrLCBzYW1wbGVSYXRlKTsKKyAgICBkZXN0aW5hdGlvbi0+Y29uZmlndXJlKCk7CisgICAg
cmV0dXJuIGRlc3RpbmF0aW9uOworfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2Fy
ZVNhbXBsZVJhdGUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5zYW1wbGVSYXRlKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KCkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRlZmF1bHQgYXVkaW8g
aGFyZHdhcmUgZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgorICAgIC8vIG9mIGNo
YW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcgRklYTUUgaW4gY3Jl
YXRlKCkuCisgICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29kZSB3aGljaCBhc3N1
bWVzIHN0ZXJlbyB3aGljaCBjYW4gYmUgdXBncmFkZWQuCisgICAgcmV0dXJuIDA7Cit9CisKK0F1
ZGlvRGVzdGluYXRpb25Db2NvYTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFj
ayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBtX291dHB1dFVuaXQoMCkKKyAg
ICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3Jl
YXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAs
IG1fc3BhcmVCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgdHJ1ZSku
cmVsZWFzZU5vbk51bGwoKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQoreworICAg
IGNvbmZpZ3VyZSgpOworfQorCitBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6On5BdWRpb0Rlc3RpbmF0
aW9uQ29jb2EoKQoreworICAgIGlmIChtX291dHB1dFVuaXQpCisgICAgICAgIEF1ZGlvQ29tcG9u
ZW50SW5zdGFuY2VEaXNwb3NlKG1fb3V0cHV0VW5pdCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbkNvY29hOjpzdGFydCgpCit7CisgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbkNv
Y29hOjpzdGFydCIpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0
KG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgc2V0SXNQbGF5aW5n
KHRydWUpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCgpCit7CisgICAg
TE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpzdG9wIik7CisgICAgT1NTdGF0dXMg
cmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOworCisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCit7CisgICAgaWYgKG1f
aXNQbGF5aW5nID09IGlzUGxheWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1BsYXlp
bmcgPSBpc1BsYXlpbmc7CisgICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKK30K
Kwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbUZvcm1hdCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMy
KTsKKyAgICBjb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OworICAgIHN0cmVhbUZvcm1hdC5tU2Ft
cGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRp
b0Zvcm1hdExpbmVhclBDTTsKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOworICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0
OworICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OworICAgIHN0cmVhbUZvcm1hdC5tQ2hh
bm5lbHNQZXJGcmFtZSA9IDI7CisgICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJp
dHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKK30KKworc3RhdGljIHZvaWQgYXNzaWduQXVkaW9C
dWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzJiBidXMsIFVJbnQzMiBu
dW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZyYW1lT2Zmc2V0
LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCit7CisgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1ZmZlcnM7ICsraSkgeworICAgICAgICBVSW50MzIgYnl0ZXNQZXJGcmFtZSA9IGJ1
ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOworICAgICAgICBVSW50MzIg
Ynl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKKyAgICAgICAgYXV0byog
bWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGJ1ZmZlcnNbaV0ubURhdGEpICsgYnl0ZU9mZnNldCk7CisgICAgICAgIGJ1cy5zZXRDaGFubmVs
TWVtb3J5KGksIG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOworICAgIH0KK30KKworLy8gUHVsbHMg
b24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCitPU1N0YXR1cyBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIGF1dG8qIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZm
ZXJzOworICAgIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMgPSBpb0RhdGEtPm1OdW1iZXJCdWZmZXJz
OworICAgIFVJbnQzMiBmcmFtZXNSZW1haW5pbmcgPSBudW1iZXJPZkZyYW1lczsKKyAgICBVSW50
MzIgZnJhbWVPZmZzZXQgPSAwOworICAgIHdoaWxlIChmcmFtZXNSZW1haW5pbmcgPiAwKSB7Cisg
ICAgICAgIGlmIChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKTsKKyAgICAg
ICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4obV9lbmRTcGFy
ZUZyYW1lIC0gbV9zdGFydFNwYXJlRnJhbWUsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgICAg
IGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1i
ZXJPZkJ1ZmZlcnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUp
OworICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFyZUJ1cy5nZXQo
KSwgbV9zdGFydFNwYXJlRnJhbWUsIG1fZW5kU3BhcmVGcmFtZSk7CisgICAgICAgICAgICBmcmFt
ZU9mZnNldCArPSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIGZyYW1lc1JlbWFpbmluZyAt
PSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIG1fc3RhcnRTcGFyZUZyYW1lICs9IGZyYW1l
c1RoaXNUaW1lOworICAgICAgICB9CisKKyAgICAgICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0g
c3RkOjptaW48VUludDMyPihrUmVuZGVyQnVmZmVyU2l6ZSwgZnJhbWVzUmVtYWluaW5nKTsKKyAg
ICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJCdXMuZ2V0KCks
IG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlz
VGltZSk7CisKKyAgICAgICAgaWYgKCFmcmFtZXNUaGlzVGltZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoZnJhbWVzVGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6ZSkgeworICAg
ICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9zcGFyZUJ1cy5wdHIoKSwga1JlbmRlckJ1
ZmZlclNpemUpOworICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFy
ZUJ1cy5nZXQoKSwgMCwgZnJhbWVzVGhpc1RpbWUpOworICAgICAgICAgICAgbV9zdGFydFNwYXJl
RnJhbWUgPSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9IGtS
ZW5kZXJCdWZmZXJTaXplOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2FsbGJhY2su
cmVuZGVyKDAsIG1fcmVuZGVyQnVzLnB0cigpLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgIGZy
YW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0g
ZnJhbWVzVGhpc1RpbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJyOworfQorCisvLyBEZWZh
dWx0T3V0cHV0VW5pdCBjYWxsYmFjaworT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpp
bnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypidXNOdW1iZXIqLywgVUludDMyIG51bWJlck9m
RnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBhdXRvKiBhdWRpb091dHB1
dCA9IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRpb25Db2NvYSo+KHVzZXJEYXRhKTsKKyAgICBy
ZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihudW1iZXJPZkZyYW1lcywgaW9EYXRhKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGlu
YXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9E
ZXN0aW5hdGlvbkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmE3OWVjNTJkMzY0MjYwMjg1MGM3OTk0Yzhh
M2M0YWVhMjA0NjQ0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNs
dWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCisjaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb0J1czsKKwordXNpbmcgQ3JlYXRlQXVkaW9EZXN0aW5hdGlvbkNvY29hT3ZlcnJpZGUg
PSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4oKikoQXVkaW9JT0NhbGxiYWNrJiwg
ZmxvYXQgc2FtcGxlUmF0ZSk7CisKKy8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1
ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0CitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CitwdWJsaWM6CisgICAgQXVkaW9EZXN0aW5h
dGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZpcnR1
YWwgfkF1ZGlvRGVzdGluYXRpb25Db2NvYSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IENyZWF0ZUF1ZGlvRGVzdGluYXRpb25Db2NvYU92ZXJyaWRlIGNyZWF0ZU92ZXJyaWRlOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7CisKKyAgICBib29sIGlzUGxh
eWluZygpIGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisgICAgZmxvYXQgc2FtcGxlUmF0
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQorICAgIEF1ZGlvVW5pdCYg
b3V0cHV0VW5pdCgpIHsgcmV0dXJuIG1fb3V0cHV0VW5pdDsgfQorICAgIAorICAgIC8vIERlZmF1
bHRPdXRwdXRVbml0IGNhbGxiYWNrCisgICAgc3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZm
ZXJMaXN0KiBpb0RhdGEpOworCisgICAgdm9pZCBzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24oQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOworCisgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9uPiBBdWRp
b0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiwgY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CisgICAgCisgICAgdm9pZCBjb25maWd1cmUoKTsKKyAg
ICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSk7CisKKyAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OworICAgIEF1ZGlvSU9DYWxs
YmFjayYgbV9jYWxsYmFjazsKKyAgICBSZWY8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIFJl
ZjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKKworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBi
b29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZy
YW1lIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5kU3BhcmVGcmFtZSB7IDAgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlv
bklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5h
dGlvbklPUy5jcHAKaW5kZXggNGJkZTdlNDFlMmI2NDM3Y2QwZmY3MjVlNGQwNzlkNjhmODllN2Rj
NS4uMjQyMTdjZDQ2NGJjZDlhNzU4NDEzOGQ3YjZjMmNkNWZiMjk2ODFhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcApAQCAtMzEsMjUgKzMxLDE0IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQ
TEFURk9STShJT1NfRkFNSUxZKQogCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbklPUy5oIgor
I2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgogCi0jaW5jbHVkZSAiQXVkaW9JT0Nh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1NlcnZpY2VzLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9Tb2Z0TGlua2luZy5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKIFNP
RlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50RmluZE5leHQsIEF1ZGlvQ29tcG9u
ZW50LCAoQXVkaW9Db21wb25lbnQgaW5Db21wb25lbnQsIGNvbnN0IEF1ZGlvQ29tcG9uZW50RGVz
Y3JpcHRpb24gKmluRGVzYyksIChpbkNvbXBvbmVudCwgaW5EZXNjKSkKLVNPRlRfTElOSyhBdWRp
b1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlLCBPU1N0YXR1cywgKEF1ZGlv
Q29tcG9uZW50SW5zdGFuY2UgaW5JbnN0YW5jZSksIChpbkluc3RhbmNlKSkKIFNPRlRfTElOSyhB
dWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcsIE9TU3RhdHVzLCAoQXVkaW9D
b21wb25lbnQgaW5Db21wb25lbnQsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgKm91dEluc3RhbmNl
KSwgKGluQ29tcG9uZW50LCBvdXRJbnN0YW5jZSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBB
dWRpb091dHB1dFVuaXRTdGFydCwgT1NTdGF0dXMsIChBdWRpb1VuaXQgY2kpLCAoY2kpKQotU09G
VF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3RvcCwgT1NTdGF0dXMsIChBdWRp
b1VuaXQgY2kpLCAoY2kpKQogU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9Vbml0QWRkUHJv
cGVydHlMaXN0ZW5lciwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9w
ZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFByb3BlcnR5TGlzdGVuZXJQcm9jIGluUHJvYywgdm9pZCAq
aW5Qcm9jVXNlckRhdGEpLCAoaW5Vbml0LCBpbklELCBpblByb2MsIGluUHJvY1VzZXJEYXRhKSkK
IFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvVW5pdEdldFByb3BlcnR5LCBPU1N0YXR1cywg
KEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvVW5pdFByb3BlcnR5SUQgaW5JRCwgQXVkaW9Vbml0U2Nv
cGUgaW5TY29wZSwgQXVkaW9Vbml0RWxlbWVudCBpbkVsZW1lbnQsIHZvaWQgKm91dERhdGEsIFVJ
bnQzMiAqaW9EYXRhU2l6ZSksIChpblVuaXQsIGluSUQsIGluU2NvcGUsIGluRWxlbWVudCwgb3V0
RGF0YSwgaW9EYXRhU2l6ZSkpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRJbml0
aWFsaXplLCBPU1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQpLCAoaW5Vbml0KSkKQEAgLTU3LDU1
ICs0Niw5IEBAIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvVW5pdFNldFByb3BlcnR5LCBP
U1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXplID0gMTI4OwotY29uc3QgaW50IGtQcmVmZXJy
ZWRCdWZmZXJTaXplID0gMjU2OwotCi10eXBlZGVmIEhhc2hTZXQ8QXVkaW9EZXN0aW5hdGlvbklP
Uyo+IEF1ZGlvRGVzdGluYXRpb25TZXQ7Ci1zdGF0aWMgQXVkaW9EZXN0aW5hdGlvblNldCYgYXVk
aW9EZXN0aW5hdGlvbnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb0Rlc3Rp
bmF0aW9uU2V0PiBhdWRpb0Rlc3RpbmF0aW9uU2V0OwotICAgIHJldHVybiBhdWRpb0Rlc3RpbmF0
aW9uU2V0OwotfQotCi0vLyBGYWN0b3J5IG1ldGhvZDogaU9TLWltcGxlbWVudGF0aW9uCi1zdGQ6
OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1
ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG51bWJlck9m
SW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2Ft
cGxlUmF0ZSkKLXsKLSAgICAvLyBGSVhNRTogbWFrZSB1c2Ugb2YgaW5wdXREZXZpY2VJZCBhcyBh
cHByb3ByaWF0ZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBh
dWRpbyBpbnB1dC4KLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQotICAgICAgICBMT0co
TWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQg
aW5wdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtdWx0
aS1jaGFubmVsICg+IHN0ZXJlbykgb3V0cHV0LgotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5u
ZWxzICE9IDIpCi0gICAgICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgl
dSwgJXUsICVmKSAtIHVuaGFuZGxlZCBvdXRwdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hh
bm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbklPUz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOwot
fQotCi1mbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQordm9pZCBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSgpCiB7Ci0gICAgcmV0dXJuIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBB
dWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQotewotICAgIC8vIEZJWE1FOiBxdWVy
eSB0aGUgZGVmYXVsdCBhdWRpbyBoYXJkd2FyZSBkZXZpY2UgdG8gcmV0dXJuIHRoZSBhY3R1YWwg
bnVtYmVyCi0gICAgLy8gb2YgY2hhbm5lbHMgb2YgdGhlIGRldmljZS4gQWxzbyBzZWUgY29ycmVz
cG9uZGluZyBGSVhNRSBpbiBjcmVhdGUoKS4KLSAgICAvLyBUaGVyZSBpcyBhIHNtYWxsIGFtb3Vu
dCBvZiBjb2RlIHdoaWNoIGFzc3VtZXMgc3RlcmVvIGluIEF1ZGlvRGVzdGluYXRpb25JT1Mgd2hp
Y2gKLSAgICAvLyBjYW4gYmUgdXBncmFkZWQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUF1ZGlvRGVz
dGluYXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFj
aywgZG91YmxlIHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2Fs
bGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtS
ZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkpCi0gICAgLCBtX3NwYXJlQnVzKEF1ZGlvQnVzOjpjcmVh
dGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIHRydWUpKQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBs
ZVJhdGUpCi0gICAgLCBtX2lzUGxheWluZyhmYWxzZSkKLXsKLSAgICBhdWRpb0Rlc3RpbmF0aW9u
cygpLmFkZCh0aGlzKTsKKyAgICBjb25zdCBpbnQga1ByZWZlcnJlZEJ1ZmZlclNpemUgPSAyNTY7
CiAKICAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRwdXRVbml0CiAgICAgQXVk
aW9Db21wb25lbnQgY29tcDsKQEAgLTEyMCwxNTggKzYzLDQyIEBAIEF1ZGlvRGVzdGluYXRpb25J
T1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZG91Ymxl
IHNhbXBsCiAKICAgICBBU1NFUlQoY29tcCk7CiAKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRp
b0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZtX291dHB1dFVuaXQpOworICAgIE9TU3RhdHVz
IHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoY29tcCwgJm91dHB1dFVuaXQoKSk7
CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgVUludDMyIGZsYWcgPSAxOwotICAgIHJlc3Vs
dCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwgCi0gICAgICAgIGtBdWRpb091
dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywgCi0gICAgICAgIGtBdWRpb1VuaXRTY29wZV9PdXRw
dXQsIAorICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwKKyAg
ICAgICAga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLAorICAgICAgICBrQXVkaW9V
bml0U2NvcGVfT3V0cHV0LAogICAgICAgICAwLAotICAgICAgICAmZmxhZywgCisgICAgICAgICZm
bGFnLAogICAgICAgICBzaXplb2YoZmxhZykpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAg
IHJlc3VsdCA9IEF1ZGlvVW5pdEFkZFByb3BlcnR5TGlzdGVuZXIobV9vdXRwdXRVbml0LCBrQXVk
aW9Vbml0UHJvcGVydHlfTWF4aW11bUZyYW1lc1BlclNsaWNlLCBmcmFtZVNpemVDaGFuZ2VkUHJv
YywgdGhpcyk7Ci0gICAgQVNTRVJUKCFyZXN1bHQpOwotCi0gICAgcmVzdWx0ID0gQXVkaW9Vbml0
SW5pdGlhbGl6ZShtX291dHB1dFVuaXQpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxp
emUob3V0cHV0VW5pdCgpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7Ci0KLSAgICBjb25maWd1cmUo
KTsKLX0KLQotQXVkaW9EZXN0aW5hdGlvbklPUzo6fkF1ZGlvRGVzdGluYXRpb25JT1MoKQotewot
ICAgIGF1ZGlvRGVzdGluYXRpb25zKCkucmVtb3ZlKHRoaXMpOwotCi0gICAgaWYgKG1fb3V0cHV0
VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0
KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpjb25maWd1cmUoKQotewogICAgIC8v
IFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0Owog
ICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZD
b24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
b3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIDAsICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisgICAgcmVzdWx0ID0g
QXVkaW9Vbml0U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0
UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJmlucHV0LCBzaXplb2Yo
aW5wdXQpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKICAgICAvLyBTZXQgc3RyZWFtIGZvcm1h
dAogICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJlYW1Gb3JtYXQ7CiAKICAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pOwotICAgIHJl
c3VsdCA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgKHZvaWQqKSZzdHJl
YW1Gb3JtYXQsICZzaXplKTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShvdXRw
dXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29w
ZV9PdXRwdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCAmc2l6ZSk7CiAgICAgQVNTRVJUKCFy
ZXN1bHQpOwogCi0gICAgY29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7
Ci0gICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODsKLSAgICBzdHJlYW1Gb3JtYXQubVNhbXBs
ZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRp
b0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0
OwotICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKLSAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OwotICAgIHN0cmVhbUZvcm1hdC5tQ2hh
bm5lbHNQZXJGcmFtZSA9IDI7Ci0gICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJp
dHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKyAgICBzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24oc3RyZWFtRm9ybWF0LCBzYW1wbGVSYXRlKCkpOwogCi0gICAgcmVzdWx0ID0gQXVkaW9V
bml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCBzaXpl
b2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0
U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0
LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCBzaXplb2Yo
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAg
ICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVyU2l6ZShr
UHJlZmVycmVkQnVmZmVyU2l6ZSk7CiB9CiAKLXZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3Rh
cnQoKQotewotICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb25JT1M6OnN0YXJ0Iik7Ci0K
LSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX291dHB1dFVuaXQp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7Ci19Ci0KLXZv
aWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCgpCi17Ci0gICAgTE9HKE1lZGlhLCAiQXVkaW9E
ZXN0aW5hdGlvbklPUzo6c3RvcCIpOwotCi0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRw
dXRVbml0U3RvcChtX291dHB1dFVuaXQpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJ
c1BsYXlpbmcoZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1
cyhBdWRpb0J1ZmZlciogYnVmZmVycywgQXVkaW9CdXMmIGJ1cywgVUludDMyIG51bWJlck9mQnVm
ZmVycywgVUludDMyIG51bWJlck9mRnJhbWVzLCBVSW50MzIgZnJhbWVPZmZzZXQsIFVJbnQzMiBm
cmFtZXNUaGlzVGltZSkKLXsKLSAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IG51bWJlck9mQnVm
ZmVyczsgKytpKSB7Ci0gICAgICAgIFVJbnQzMiBieXRlc1BlckZyYW1lID0gYnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gbnVtYmVyT2ZGcmFtZXM7Ci0gICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0
ID0gZnJhbWVPZmZzZXQgKiBieXRlc1BlckZyYW1lOwotICAgICAgICBmbG9hdCogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcnNb
aV0ubURhdGEpICsgYnl0ZU9mZnNldCk7Ci0gICAgICAgIGJ1cy5zZXRDaGFubmVsTWVtb3J5KGks
IG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOwotICAgIH0KLX0KLQotLy8gUHVsbHMgb24gb3VyIHBy
b3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCi1PU1N0YXR1cyBBdWRpb0Rlc3Rp
bmF0aW9uSU9TOjpyZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSkKLXsKLSAgICBBdWRpb0J1ZmZlciogYnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7
Ci0gICAgVUludDMyIG51bWJlck9mQnVmZmVycyA9IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7Ci0g
ICAgVUludDMyIGZyYW1lc1JlbWFpbmluZyA9IG51bWJlck9mRnJhbWVzOwotICAgIFVJbnQzMiBm
cmFtZU9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKGZyYW1lc1JlbWFpbmluZyA+IDApIHsKLSAgICAg
ICAgaWYgKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9zdGFydFNwYXJlRnJhbWUgPCBtX2VuZFNwYXJlRnJhbWUpOwotICAgICAgICAg
ICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0gc3RkOjptaW48VUludDMyPihtX2VuZFNwYXJlRnJh
bWUgLSBtX3N0YXJ0U3BhcmVGcmFtZSwgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAgICAgYXNz
aWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgKm1fcmVuZGVyQnVzLCBudW1iZXJPZkJ1ZmZl
cnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAg
ICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UoKm1fc3BhcmVCdXMsIG1fc3RhcnRTcGFy
ZUZyYW1lLCBtX2VuZFNwYXJlRnJhbWUpOwotICAgICAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJh
bWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1Rp
bWU7Ci0gICAgICAgICAgICBtX3N0YXJ0U3BhcmVGcmFtZSArPSBmcmFtZXNUaGlzVGltZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQz
Mj4oa1JlbmRlckJ1ZmZlclNpemUsIGZyYW1lc1JlbWFpbmluZyk7Ci0gICAgICAgIGFzc2lnbkF1
ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsICptX3JlbmRlckJ1cywgbnVtYmVyT2ZCdWZmZXJzLCBu
dW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKLQotICAgICAgICBp
ZiAoIWZyYW1lc1RoaXNUaW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChmcmFt
ZXNUaGlzVGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
LnJlbmRlcigwLCBtX3NwYXJlQnVzLmdldCgpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7Ci0gICAgICAg
ICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgqbV9zcGFyZUJ1cywgMCwgZnJhbWVzVGhp
c1RpbWUpOwotICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgPSBmcmFtZXNUaGlzVGltZTsK
LSAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9IGtSZW5kZXJCdWZmZXJTaXplOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fY2FsbGJhY2sucmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdl
dCgpLCBmcmFtZXNUaGlzVGltZSk7Ci0gICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNU
aW1lOwotICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnNldElz
UGxheWluZyhib29sIGlzUGxheWluZykKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAg
ICBtX2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0
VW5pdCBjYWxsYmFjawotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6aW5wdXRQcm9jKHZv
aWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGlt
ZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVk
aW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9EZXN0aW5hdGlvbklPUyogYXVkaW9P
dXRwdXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uSU9TKj4odXNlckRhdGEpOwotICAg
IHJldHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOwotfQot
Ci12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQcm9jKHZvaWQgKmlu
UmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBB
dWRpb1VuaXRFbGVtZW50KQotewotICAgIEF1ZGlvRGVzdGluYXRpb25JT1MqIGF1ZGlvT3V0cHV0
ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbklPUyo+KGluUmVmQ29uKTsKLSAgICBVSW50
MzIgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgVUludDMyIGRhdGFTaXplID0gc2l6ZW9mKGJ1ZmZlclNp
emUpOwotICAgIEF1ZGlvVW5pdEdldFByb3BlcnR5KGF1ZGlvT3V0cHV0LT5tX291dHB1dFVuaXQs
IGtBdWRpb1VuaXRQcm9wZXJ0eV9NYXhpbXVtRnJhbWVzUGVyU2xpY2UsIGtBdWRpb1VuaXRTY29w
ZV9HbG9iYWwsIDAsICh2b2lkKikmYnVmZmVyU2l6ZSwgJmRhdGFTaXplKTsKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIj4+Pj4gZnJhbWVTaXplQ2hhbmdlZCA9ICVsdVxuIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oYnVmZmVyU2l6ZSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRp
b25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2OTIzOWZhY2I5NjYzOWMx
NTllYmZlMTNlOWFlODAyZWRlMTZmNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVz
dGluYXRpb25JT1MuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFu
IEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9V
bml0Ci0KLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25JT1MgZmluYWwgOiBwdWJsaWMgQXVkaW9EZXN0
aW5hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbklPUyhBdWRpb0lPQ2FsbGJh
Y2smLCBkb3VibGUgc2FtcGxlUmF0ZSk7Ci0gICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbklP
UygpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY29uZmlndXJlKCk7Ci0KLSAgICAvLyBBdWRpb0Rl
c3RpbmF0aW9uCi0gICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92
ZXJyaWRlOwotICAgIGJvb2wgaXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlp
bmc7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9z
YW1wbGVSYXRlOyB9Ci0KLSAgICAvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjawotICAgIHN0
YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgYnVzTnVtYmVyLCBVSW50
MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKLSAgICBzdGF0aWMg
dm9pZCBmcmFtZVNpemVDaGFuZ2VkUHJvYyh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0IGluVW5p
dCwgQXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCBBdWRpb1VuaXRTY29wZSBpblNjb3BlLCBBdWRp
b1VuaXRFbGVtZW50IGluRWxlbWVudCk7Ci0KLSAgICBmcmllbmQgZmxvYXQgQXVkaW9EZXN0aW5h
dGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCk7Ci0KLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMy
IG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0gICAgdm9pZCBzZXRJ
c1BsYXlpbmcoYm9vbCk7Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OwotICAgIEF1ZGlv
SU9DYWxsYmFjayYgbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVz
OwotICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKLSAgICB1bnNpZ25lZCBtX3N0YXJ0
U3BhcmVGcmFtZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2VuZFNwYXJlRnJhbWUgeyAwIH07Ci0K
LSAgICBkb3VibGUgbV9zYW1wbGVSYXRlOwotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVz
dGluYXRpb25NYWMuY3BwCmluZGV4IDlmZTY0YmFhYTQ3ODRmZWNkYWIzZDZkZGI1ZTI3ODM4MWUx
ZTA3MDAuLmJiZDE4ZWVhZGU2ZjA1Y2M2Y2I1ODhiYTBkMzgyYmI2MDZiYzgzMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5h
dGlvbk1hYy5jcHAKQEAgLTI3LDY0ICsyNywxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAotI2lmIEVOQUJMRShXRUJf
QVVESU8pCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oTUFDKQogCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1hYy5oIgotCi0jaW5jbHVk
ZSAiQXVkaW9JT0NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKICNp
bmNsdWRlIDxDb3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDEyODsKLWNvbnN0IGZsb2F0IGtMb3dUaHJlc2hv
bGQgPSAtMTsKLWNvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xkID0gMTsKLQotLy8gRmFjdG9yeSBt
ZXRob2Q6IE1hYy1pbXBsZW1lbnRhdGlvbgotc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRp
b24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gRklYTUU6
IG1ha2UgdXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9wcmlhdGUuCi0KLSAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCi0gICAgaWYgKG51bWJl
ck9mSW5wdXRDaGFubmVscykKLSAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6
Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIGlucHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJ
bnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKLQotICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGktY2hhbm5lbCAoPiBzdGVyZW8pIG91dHB1
dC4KLSAgICBpZiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyAhPSAyKQotICAgICAgICBMT0coTWVk
aWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgb3V0
cHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5u
ZWxzLCBzYW1wbGVSYXRlKTsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlvRGVzdGluYXRp
b25NYWM+KGNhbGxiYWNrLCBzYW1wbGVSYXRlKTsKLX0KLQotZmxvYXQgQXVkaW9EZXN0aW5hdGlv
bjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQg
b3V0cHV0IGRldmljZSdzIHNhbXBsZS1yYXRlLgotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNo
YXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQXVkaW9EZXN0
aW5hdGlvbjo6bWF4Q2hhbm5lbENvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRl
ZmF1bHQgYXVkaW8gaGFyZHdhcmUgZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgot
ICAgIC8vIG9mIGNoYW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcg
RklYTUUgaW4gY3JlYXRlKCkuCi0gICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29k
ZSB3aGljaCBhc3N1bWVzIHN0ZXJlbyBpbiBBdWRpb0Rlc3RpbmF0aW9uTWFjIHdoaWNoCi0gICAg
Ly8gY2FuIGJlIHVwZ3JhZGVkLgotICAgIHJldHVybiAwOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9u
TWFjOjpBdWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0
IHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXpl
LCBmYWxzZSkpCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1faXNQbGF5
aW5nKGZhbHNlKQordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSgpCiB7CiAg
ICAgLy8gT3BlbiBhbmQgaW5pdGlhbGl6ZSBEZWZhdWx0T3V0cHV0VW5pdAogICAgIEF1ZGlvQ29t
cG9uZW50IGNvbXA7CkBAIC05OSw5OSArNTAsMjcgQEAgQXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVk
aW9EZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1wbGUK
IAogICAgIEFTU0VSVChjb21wKTsKIAotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9u
ZW50SW5zdGFuY2VOZXcoY29tcCwgJm1fb3V0cHV0VW5pdCk7CisgICAgT1NTdGF0dXMgcmVzdWx0
ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmb3V0cHV0VW5pdCgpKTsKICAgICBB
U1NFUlQoIXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1fb3V0
cHV0VW5pdCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkp
OwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rl
c3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCi17Ci0gICAgaWYgKG1fb3V0cHV0
VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0
KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUoKQotewogICAgIC8v
IFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0Owog
ICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZD
b24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
b3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9V
bml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIHJlc3VsdCA9
IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1Nl
dFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVv
ZihpbnB1dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIC8vIFNldCBzdHJlYW0gZm9y
bWF0CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0cmVhbUZvcm1hdDsKLSAgICBz
dHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3RyZWFtRm9ybWF0
Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1Gb3JtYXQubUZv
cm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zv
cm1hdEZsYWdJc05vbkludGVybGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQml0c1BlckNoYW5u
ZWwgPSA4ICogc2l6ZW9mKEZsb2F0MzIpOwotICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IDI7Ci0gICAgc3RyZWFtRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOwotICAgIHN0
cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgc3RyZWFt
Rm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIHNldEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbihzdHJlYW1Gb3JtYXQsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICBy
ZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRpb1VuaXRQcm9w
ZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJl
YW1Gb3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKKyAgICByZXN1
bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0
eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJlYW1G
b3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKICAgICBBU1NFUlQo
IXJlc3VsdCk7CiB9CiAKLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQoKQotewotICAg
IE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7Ci0K
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwotfQotCi12b2lk
IEF1ZGlvRGVzdGluYXRpb25NYWM6OnN0b3AoKQotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1
ZGlvT3V0cHV0VW5pdFN0b3AobV9vdXRwdXRVbml0KTsKLQotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICBzZXRJc1BsYXlpbmcoZmFsc2UpOwotfQotCi0vLyBQdWxscyBvbiBvdXIgcHJvdmlkZXIg
dG8gZ2V0IHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4KLU9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25N
YWM6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRh
KQotewotICAgIEF1ZGlvQnVmZmVyKiBidWZmZXJzID0gaW9EYXRhLT5tQnVmZmVyczsKLSAgICBt
X3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgwLCAoZmxvYXQqKWJ1ZmZlcnNbMF0ubURhdGEs
IG51bWJlck9mRnJhbWVzKTsKLSAgICBtX3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgxLCAo
ZmxvYXQqKWJ1ZmZlcnNbMV0ubURhdGEsIG51bWJlck9mRnJhbWVzKTsKLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dC4KLSAgICBtX2NhbGxiYWNr
LnJlbmRlcigwLCBtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMpOwotCi0gICAgLy8g
Q2xhbXAgdmFsdWVzIGF0IDBkYiAoaS5lLiwgWy0xLjAsIDEuMF0pCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcmVuZGVyQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgewotICAg
ICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWwgPSBtX3JlbmRlckJ1cy0+Y2hhbm5lbChpKTsKLSAg
ICAgICAgaWYgKCFjaGFubmVsLT5pc1NpbGVudCgpKQotICAgICAgICAgICAgVmVjdG9yTWF0aDo6
dmNsaXAoY2hhbm5lbC0+ZGF0YSgpLCAxLCAma0xvd1RocmVzaG9sZCwgJmtIaWdoVGhyZXNob2xk
LCBjaGFubmVsLT5tdXRhYmxlRGF0YSgpLCAxLCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OnNldElzUGxh
eWluZyhib29sIGlzUGxheWluZykKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5aW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBt
X2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0VW5p
dCBjYWxsYmFjawotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQq
IHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9C
dWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk1hYyogYXVkaW9PdXRw
dXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uTWFjKj4odXNlckRhdGEpOwotICAgIHJl
dHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBM
QVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
OGIxMGFiZWJkNWRhNDk1MWMwOWUxOTZmNGUzNzIwNDExZmJjNzY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEF1ZGlvRGVzdGluYXRpb25NYWNfaAotI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gK
LQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgot
I2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQW4gQXVkaW9EZXN0aW5hdGlvbiB1c2luZyBD
b3JlQXVkaW8ncyBkZWZhdWx0IG91dHB1dCBBdWRpb1VuaXQKLQotY2xhc3MgQXVkaW9EZXN0aW5h
dGlvbk1hYyA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKLXB1YmxpYzoKLSAgICBBdWRpb0Rl
c3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIHZp
cnR1YWwgfkF1ZGlvRGVzdGluYXRpb25NYWMoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbmZp
Z3VyZSgpOwotCi0gICAgLy8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLSAgICBzdGF0aWMg
T1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGJ1c051bWJlciwgVUludDMyIG51
bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0KLSAgICBPU1N0YXR1cyBy
ZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0g
ICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7Ci0KLSAgICB2b2lkIHN0YXJ0KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1BsYXlpbmcoKSBvdmVycmlk
ZSB7IHJldHVybiBtX2lzUGxheWluZzsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAgIEF1ZGlvVW5pdCBtX291dHB1
dFVuaXQ7Ci0gICAgQXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxBdWRp
b0J1cz4gbV9yZW5kZXJCdXM7Ci0KLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBt
X2lzUGxheWluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1
ZGlvRGVzdGluYXRpb25NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQyMDA5
Y2RkMDYzNTY3MGNhMWI4N2FhZDYwNGExYTUwOTAxNWVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiV2Vi
QXVkaW9CdWZmZXJMaXN0LmgiCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXpl
ID0gMTI4OworCitNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpNb2NrQXVkaW9EZXN0aW5hdGlv
bkNvY29hKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAg
OiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoY2FsbGJhY2ssIHNhbXBsZVJhdGUpCisgICAgLCBtX3dv
cmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSBSZW5k
ZXIgUXVldWUiKSkKKyAgICAsIG1fdGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6dGljaykKK3sKK30KKwordm9pZCBNb2NrQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpzdGFydCgpCit7CisgICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhTZWNv
bmRzIHsgbV9udW1iZXJPZkZyYW1lc1RvUHJvY2VzcyAvIHNhbXBsZVJhdGUoKSB9KTsKKyAgICBz
ZXRJc1BsYXlpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6
c3RvcCgpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsK
KworICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgbV93b3JrUXVldWUtPmRpc3Bh
dGNoKFsmc2VtYXBob3JlXSB7CisgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICB9KTsK
KyAgICBzZW1hcGhvcmUud2FpdCgpOworfQorCit2b2lkIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnRpY2soKQoreworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgc2FtcGxlUmF0
ZSA9IHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZGcmFtZXNUb1Byb2Nlc3MgPSBtX251bWJlck9mRnJh
bWVzVG9Qcm9jZXNzXSB7CisgICAgICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJl
YW1Gb3JtYXQ7CisgICAgICAgIHNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbihzdHJlYW1G
b3JtYXQsIHNhbXBsZVJhdGUpOworCisgICAgICAgIFdlYkF1ZGlvQnVmZmVyTGlzdCB3ZWJBdWRp
b0J1ZmZlckxpc3QgeyBzdHJlYW1Gb3JtYXQsIG51bWJlck9mRnJhbWVzVG9Qcm9jZXNzIH07Cisg
ICAgICAgIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6aW5wdXRQcm9jKHRoaXMsIDAsIDAsIDAsIG51
bWJlck9mRnJhbWVzVG9Qcm9jZXNzLCB3ZWJBdWRpb0J1ZmZlckxpc3QubGlzdCgpKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlv
RGVzdGluYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2UxMzNhMjIyYmY1MDRmZTVkNWYzNTJh
MDUzMzlhNjU2ZWUzYzZmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNs
dWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgor
I2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb0lPQ2FsbGJhY2s7CisKK2NsYXNzIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgZmlu
YWwgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbkNvY29hIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGlu
YXRpb24+IGNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1wbGVSYXRl
KSB7IHJldHVybiBtYWtlVW5pcXVlPE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E+KGNhbGxiYWNr
LCBzYW1wbGVSYXRlKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIE1vY2tBdWRpb0Rlc3RpbmF0aW9u
Q29jb2EoQXVkaW9JT0NhbGxiYWNrJiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBzdGFydCgpIGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOworCisgICAgdm9p
ZCB0aWNrKCk7CisKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyAgICBSdW5Mb29w
OjpUaW1lcjxNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hPiBtX3RpbWVyOworICAgIHVpbnQzMl90
IG1fbnVtYmVyT2ZGcmFtZXNUb1Byb2Nlc3MgeyAzODQgfTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKaW5kZXggM2E5ZTZjMmIyYjc3NWVmNDQ4ODNmZDM4NDllMDlkMTk3M2E2
OTUwNy4uNjI5NTRhMmY2YWRjZmMwOGRlOTZjNGRkNjZhNGMyN2VkNGM4OGEzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTIxLDYgKzEyMSw3IEBACiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAi
TWVtb3J5SW5mby5oIgorI2luY2x1ZGUgIk1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKICNp
bmNsdWRlICJNb2NrTGliV2ViUlRDUGVlckNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJNb2NrUGFn
ZU92ZXJsYXkuaCIKICNpbmNsdWRlICJNb2NrUGFnZU92ZXJsYXlDbGllbnQuaCIKQEAgLTU3Nyw2
ICs1NzgsMTAgQEAgSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQmIGRvY3VtZW50KQogI2Vu
ZGlmCiAKICAgICBtX3Vuc3VzcGVuZGFibGVBY3RpdmVET01PYmplY3QgPSBudWxscHRyOworCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmICBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6Y3JlYXRlT3ZlcnJpZGUgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIERvY3Vt
ZW50KiBJbnRlcm5hbHM6OmNvbnRleHREb2N1bWVudCgpIGNvbnN0CkBAIC00MDcxLDcgKzQwNzYs
NiBAQCB2b2lkIEludGVybmFsczo6c2VuZE1lZGlhQ29udHJvbEV2ZW50KE1lZGlhQ29udHJvbEV2
ZW50IGV2ZW50KQogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TRVNTSU9OKQogCiAjaWYgRU5BQkxF
KFdFQl9BVURJTykKLQogdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9u
cyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKQog
ewogICAgIEF1ZGlvQ29udGV4dDo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVzdHJpY3Rpb25zID0g
Y29udGV4dC5iZWhhdmlvclJlc3RyaWN0aW9ucygpOwpAQCAtNDA5MCw2ICs0MDk0LDEyIEBAIHZv
aWQgSW50ZXJuYWxzOjpzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoQXVkaW9Db250ZXh0JiBj
b250ZXh0LCBTdHJpbmdWaWV3IHJlCiAgICAgY29udGV4dC5hZGRCZWhhdmlvclJlc3RyaWN0aW9u
KHJlc3RyaWN0aW9ucyk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxzOjp1c2VNb2NrQXVkaW9EZXN0aW5h
dGlvbkNvY29hKCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBBdWRpb0Rlc3RpbmF0aW9u
Q29jb2E6OmNyZWF0ZU92ZXJyaWRlID0gTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y3JlYXRl
OworI2VuZGlmCit9CiAjZW5kaWYKIAogdm9pZCBJbnRlcm5hbHM6OnNpbXVsYXRlU3lzdGVtU2xl
ZXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggYmEyYmI5NzRhOTJj
ZWYxYWM3ZTM0NDc2ZWJiMTJlYWVkZDcwN2E4OS4uZTRjZjg2ZGZlMTgzNzk0NDE4YzM3NjhlZjQ4
ZWJkYjVhOWFmY2U4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC02MzMsNiAr
NjMzLDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICB2b2lkIHNldEF1
ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmLCBTdHJpbmdWaWV3IHJlc3RyaWN0
aW9uc1N0cmluZyk7CisgICAgdm9pZCB1c2VNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hKCk7CiAj
ZW5kaWYKIAogICAgIHZvaWQgc2ltdWxhdGVTeXN0ZW1TbGVlcCgpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDFlZWUzYzlkM2FlM2IyNmVlN2Y0YWQxMjcwOTg1
NTZiYWRjNjJlYzMuLjYzN2U0ZjE1YjVhOGYwODEzYzg4YjA1OTA1OWNlMWU0NDk4NTdiYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTYxMiw2ICs2MTIsOCBAQCBlbnVt
IENvbXBvc2l0aW5nUG9saWN5IHsKICAgICBbQ29uZGl0aW9uYWw9TUVESUFfU1RSRUFNXSB2b2lk
IHNldE1vY2tNZWRpYUNhcHR1cmVEZXZpY2VzRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogICAg
IFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU1dIHZvaWQgc2V0Q3VzdG9tUHJpdmF0ZVJlY29yZGVy
Q3JlYXRvcigpOwogCisgICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJT10gdm9pZCB1c2VNb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hKCk7CisKICAgICBbQ29uZGl0aW9uYWw9V0VCX1JUQ10gdm9pZCBl
bXVsYXRlUlRDUGVlckNvbm5lY3Rpb25QbGF0Zm9ybUV2ZW50KFJUQ1BlZXJDb25uZWN0aW9uIGNv
bm5lY3Rpb24sIERPTVN0cmluZyBhY3Rpb24pOwogICAgIFtDb25kaXRpb25hbD1XRUJfUlRDXSB2
b2lkIHVzZU1vY2tSVENQZWVyQ29ubmVjdGlvbkZhY3RvcnkoRE9NU3RyaW5nIHRlc3RDYXNlKTsK
ICAgICBbQ29uZGl0aW9uYWw9V0VCX1JUQ10gdm9pZCBzZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmco
Ym9vbGVhbiBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYWI3MmVlODNkOGVhZGRmMGI3ZDZmNDhkNTEyMmVi
OThiNTRjNzJkLi5jMWViZmI4M2M0ZDYyYjhhZTIzZTgzODQzMzRmZjE3ZGQ5MzkwZjE3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTAtMTcgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBw
bGUuY29tPgorCisgICAgICAgIFNoYXJlIGNvZGUgYmV0d2VlbiBBdWRpb0Rlc3RpbmF0aW9uSU9T
IGFuZCBBdWRpb0Rlc3RpbmF0aW9uTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDMwNDcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU2MzQwODY2
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8tZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWw6CisKIDIwMTkt
MTAtMTMgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldXNl
IGV4aXN0aW5nIHdlYiBwcm9jZXNzZXMgZm9yIHJ1bm5pbmcgc2VydmljZSB3b3JrZXJzCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRp
by1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRp
YS13ZWJhdWRpby1leHBlY3RlZC50eHQKaW5kZXggYjJhODkwMGRkNTE2NDU2NDM3MzU5M2FmMDQz
YTk0ZDc4NWY2NDBiOS4uZjc0ZDg4ODgyYzk4ODRiYzVlM2M4NWI2NmUzYzY4ZGY0ZmRiYzc4YiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2Vi
YXVkaW8tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0
VXNlck1lZGlhLXdlYmF1ZGlvLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDUgQEAKIAogUEFTUyBQ
bHVnZ2luZyBpbiBnZXRVc2VyTWVkaWEgYXVkaW8gc3RyZWFtIGludG8gV2ViIEF1ZGlvIAogUEFT
UyBXZWIgQXVkaW8gc2hvdWxkIHdvcmsgZXZlbiBpZiBudW1iZXIgb2YgY2hhbm5lbHMgb2YgYSB0
cmFjayBpbmNyZWFzZXMgZnJvbSAxIHRvIDIgCitQQVNTIFdlYiBBdWRpbyBzaG91bGQgd29yayB3
aXRoIG1vY2sgYXVkaW8gZGVzdGluYXRpb24gCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5odG1sCmluZGV4IGFlNWYwMGQw
ZDE5MjExNDIzZmNiZjQ2ZDZkYzQ1NzRlNDg1NWFmOWIuLjcyMDQzNWE3N2I3YWIyYzNiNmUyOGUz
ODcyZmNlMDZiYzcwNGUyMTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8uaHRtbApAQCAtNjUsNiArNjUsMjYgQEAgcHJv
bWlzZV90ZXN0KGFzeW5jICh0ZXN0KSA9PiB7CiAgICAgc291cmNlLmRpc2Nvbm5lY3Qoc2NyaXB0
KTsKICAgICBzY3JpcHQuZGlzY29ubmVjdChhdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOwogfSwg
IldlYiBBdWRpbyBzaG91bGQgd29yayBldmVuIGlmIG51bWJlciBvZiBjaGFubmVscyBvZiBhIHRy
YWNrIGluY3JlYXNlcyBmcm9tIDEgdG8gMiIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3Qp
ID0+IHsKKyAgICBpZiAoIXdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIHJldHVybiBQcm9taXNl
LnJlamVjdCgiSW50ZXJuYWxzIEFQSSByZXF1aXJlZCIpOworICAgIGNvbnN0IHN0cmVhbSA9IGF3
YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUsIHZp
ZGVvOiBmYWxzZSB9KTsKKyAgICBpbnRlcm5hbHMudXNlTW9ja0F1ZGlvRGVzdGluYXRpb25Db2Nv
YSgpOworCisgICAgdmFyIGF1ZGlvQ29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsK
KyAgICB2YXIgYW5hbHl6ZXIgPSBhdWRpb0NvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTsKKyAgICBh
bmFseXplci5mZnRTaXplID0gMjU2OworICAgIGxldCBzb3VyY2UgPSBhdWRpb0NvbnRleHQuY3Jl
YXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3RyZWFtKTsKKyAgICBzb3VyY2UuY29ubmVjdChhbmFseXpl
cik7CisgICAgYW5hbHl6ZXIuY29ubmVjdChhdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworCisg
ICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMCkp
OworCisgICAgc291cmNlLmRpc2Nvbm5lY3QoYW5hbHl6ZXIpOworICAgIGFuYWx5emVyLmRpc2Nv
bm5lY3QoYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTsKK30sICJXZWIgQXVkaW8gc2hvdWxkIHdv
cmsgd2l0aCBtb2NrIGF1ZGlvIGRlc3RpbmF0aW9uIik7CisKICAgICAgICAgPC9zY3JpcHQ+CiAg
ICAgPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381183</attachid>
            <date>2019-10-17 02:31:19 -0700</date>
            <delta_ts>2019-10-18 03:02:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191017113116.patch</filename>
            <type>text/plain</type>
            <size>55405</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjViZjMyZGYxZWY3NmQ5
ZGU1NWZiMGI2ZmJlNjZjYmEzMjk3MGFkNC4uZDAyZGUxYjdhZjdjZmY0MGQwZDMwNzJlNmZkZTZj
ZjhmZWZiOTY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE5LTEwLTE3ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjM0MDg2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgQXVkaW9EZXN0aW5hdGlvbkNvY29hIHRvIHNoYXJl
IGNvZGUgYmV0d2VlbiBpT1MgYW5kIE1hYy4KKyAgICAgICAgTW9zdCBjb2RlIGlzIG5vdyBzaGFy
ZWQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF1ZGlvIHVuaXQgd2hpY2gg
aXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gTWFjIGFuZCBpT1MuCisKKyAgICAgICAgSW50
cm9kdWNlIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgdG8gYWxsb3cgbW9yZSBjb2RlIGNvdmVy
YWdlIG9mIHRoZSBzaGFyZWQgY29kZS4KKyAgICAgICAgVGhpcyBjb3VsZCBhbHNvIGFsbG93IHVz
IHRvIHZhbGlkYXRlIGR5bmFtaWMgY2hhbmdlcyBpbiBmcmFtZSByYXRlLCBudW1iZXIgb2YgZnJh
bWVzIHRvIHByb2Nlc3MuLi4KKyAgICAgICAgQWRkIEludGVybmFscyBBUEkgdG8gZW5hYmxlIHRo
ZSBtb2NrIGRlc3RpbmF0aW9uLgorIAorICAgICAgICBDb3ZlcmVkIGJ5IGFkZGVkIHRlc3QuCisK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJk
d2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6
QXVkaW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25Db2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldElzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjph
c3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpvdXRwdXRVbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9E
ZXN0aW5hdGlvbklPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGlu
YXRpb25JT1MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9E
ZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2E6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EpOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjp0aWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2Nr
L01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9J
bnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpJbnRlcm5hbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29h
KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50
ZXJuYWxzLmlkbDoKKwogMjAxOS0xMC0xNSAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CiAKICAgICAgICAgTW92ZSBoZWFkZXJzIHRvIGtlZXAgZnJvbSBhIEhUVFBIZWFkZXJOYW1l
U2V0IHRvIGFuIE9wdGlvblNldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZDg0ODQ3Y2Uz
MjIwMjk2MzM0ODI5ZDQ5Njk2OTI5MDg5ZDA2YjEzOS4uODBhMmZjZDk5ODJkMDA2NmYwZGIxNzNl
MDk4NGY0YWMxNDgwZjE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xNjMsNiArMTYz
LDcgQEAgcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVNYWMuY3BwCiAKIHBsYXRmb3Jt
L2F1ZGlvL0F1ZGlvU2Vzc2lvbi5jcHAKIAorcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3BwCiAK
QEAgLTQ5Miw2ICs0OTMsNyBAQCBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWMubW0KIAogcGxhdGZvcm0vbW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0UGlj
a2VyTW9jay5jcHAKIHBsYXRmb3JtL21vY2svTWVkaWFQbGF5YmFja1RhcmdldE1vY2suY3BwCitw
bGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCiAKIHBsYXRmb3JtL25l
dHdvcmsvY2YvQ2VydGlmaWNhdGVJbmZvQ0ZOZXQuY3BwCiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0RO
U1Jlc29sdmVRdWV1ZUNGTmV0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU0NWFkNTgzZDkyYzBmZWI4YjY4ZDM4YTdlODYx
Y2IyN2U2MGI4OTkuLmUzNWQ3ZjE5ZGQwMzFmZjQ2MjI1NzI0ZDdkMTg0ZTljNTJiOWUzZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTcyMTgsNiArNzIxOCw4IEBACiAJCTQxMzAxNUQ2MUM3QjU3MDQwMDA5MUM2RSAvKiBGZXRj
aFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoUmVzcG9u
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkx
QzZGIC8qIEZldGNoQm9keVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGZXRjaEJvZHlTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEzMDE1
RDcxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVzcG9uc2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEZldGNoUmVzcG9uc2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
MTMxNTE4NDIzNTc3NDVFMDAxMTVFNkUgLyogQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEF1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9EZXN0aW5hdGlvbkNvY29hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMzFGM0IxMUY5NTUyODEwMDU5OTk1QSAvKiBKU0Zl
dGNoRXZlbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNGZXRjaEV2ZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEz
MUYzQjQxRjk1NUJDMzAwNTk5OTVBIC8qIEV4dGVuZGFibGVFdmVudEluaXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5kYWJsZUV2ZW50SW5pdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNCNTFGOTU1QkM1MDA1OTk5NUEgLyogRXh0ZW5kYWJs
ZUV2ZW50SW5pdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXh0ZW5kYWJsZUV2ZW50SW5p
dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Mzc4LDYgKzczODAsOCBAQAog
CQk0MUIyQTYyNTFFRjFCRjYwMDAyQjlEN0EgLyogV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQxQjQ1OURBMUY0Q0FEQjkwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWFkYWJsZVN0cmVhbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUI0NTlFRDFGNTVFQkM3MDAwMEY2RkQgLyogUmVh
ZGFibGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVh
ZGFibGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MUI5MTM3NjIz
NTg0RDBFMDAyNUJGQTMgLyogTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjkxMzc4MjM1ODREMEYwMDI1QkZBMyAvKiBNb2Nr
QXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0MUJGMjA0MDIyQjk0NzE2MDAwNEY4MTIgLyogUmVhbHRpbWVWaWRlb1NvdXJj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQxQkYyMDQyMjJCOTQ3MTcwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVv
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyog
U2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5ODUyLDYgKzE5ODU2LDggQEAK
IAkJCQkwNzdCNjQxNTFCOTVGNzAzMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1RhcmdldE1vY2su
aCAqLywKIAkJCQkwNzdCNjQxMDFCOTRGMTJFMDAzRTlBRDUgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dFBpY2tlck1vY2suY3BwICovLAogCQkJCTA3N0I2NDExMUI5NEYxMkUwMDNFOUFENSAvKiBNZWRp
YVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5oICovLAorCQkJCTQxQjkxMzc4MjM1ODREMEYwMDI1
QkZBMyAvKiBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCAqLywKKwkJCQk0MUI5MTM3NjIz
NTg0RDBFMDAyNUJGQTMgLyogTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovLAogCQkJCTQx
M0NDRDQ4MjBERTAxM0MwMDY1QTIxQSAvKiBNb2NrTWVkaWFEZXZpY2UuaCAqLywKIAkJCQkwN0Q2
QTRGMTFCRUQ1Rjg4MDAxNzQxNDYgLyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2UuY3BwICovLAog
CQkJCTA3RDZBNEYyMUJFRDVGODgwMDE3NDE0NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5o
ICovLApAQCAtMjU4MjMsNiArMjU4MjksOCBAQAogCQlDRDY2OUQ2NTFEMjMyREY0MDA0RDE4NjYg
LyogY29jb2EgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTQxMzE1MTg0MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICov
LAorCQkJCTQxMzE1MTg2MjM1Nzc0NUUwMDExNUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2Eu
aCAqLywKIAkJCQk0MTdGN0FFRDIxMzlCRjY1MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdl
ckNvY29hLmggKi8sCiAJCQkJNDE3RjdBRUEyMTM5QkY2NDAwRkJBN0VDIC8qIE1lZGlhU2Vzc2lv
bk1hbmFnZXJDb2NvYS5tbSAqLywKIAkJCQk0MTdGN0FFQjIxMzlCRjY0MDBGQkE3RUMgLyogV2Vi
QXVkaW9CdWZmZXJMaXN0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmYzMmY1NjVjN2VlMWIwNWJmNmNhMzY2MjU4NWI4ZGZhZjJkYjJlZTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuY3BwCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgorCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9JT0Nh
bGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPENvcmVBdWRpby9BdWRpb0hhcmR3YXJl
Lmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPHd0Zi9Tb2Z0
TGlua2luZy5oPgorU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRpb1Rvb2xib3gpCitTT0ZUX0xJTkso
QXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZSwgT1NTdGF0dXMsIChB
dWRpb0NvbXBvbmVudEluc3RhbmNlIGluSW5zdGFuY2UpLCAoaW5JbnN0YW5jZSkpCitTT0ZUX0xJ
TksoQXVkaW9Ub29sYm94LCBBdWRpb091dHB1dFVuaXRTdGFydCwgT1NTdGF0dXMsIChBdWRpb1Vu
aXQgY2kpLCAoY2kpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3Rv
cCwgT1NTdGF0dXMsIChBdWRpb1VuaXQgY2kpLCAoY2kpKQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
U19GQU1JTFkpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZm
ZXJTaXplID0gMTI4OworCitDcmVhdGVBdWRpb0Rlc3RpbmF0aW9uQ29jb2FPdmVycmlkZSBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92ZXJyaWRlID0gbnVsbHB0cjsKKworc3RkOjp1bmlx
dWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lP
Q2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0
Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJh
dGUpCit7CisgICAgLy8gRklYTUU6IG1ha2UgdXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9w
cmlhdGUuCisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8g
aW5wdXQuCisgICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscykKKyAgICAgICAgTE9HKE1lZGlh
LCAiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIGlucHV0
IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxz
LCBzYW1wbGVSYXRlKTsKKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGktY2hh
bm5lbCAoPiBzdGVyZW8pIG91dHB1dC4KKyAgICBpZiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyAh
PSAyKQorICAgICAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1
LCAlZikgLSB1bmhhbmRsZWQgb3V0cHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxz
LCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKKworICAgIGlmIChBdWRpb0Rl
c3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92ZXJyaWRlKQorICAgICAgICByZXR1cm4gQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpjcmVhdGVPdmVycmlkZShjYWxsYmFjaywgc2FtcGxlUmF0ZSk7CisKKyAg
ICBhdXRvIGRlc3RpbmF0aW9uID0gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uQ29jb2E+KGNh
bGxiYWNrLCBzYW1wbGVSYXRlKTsKKyAgICBkZXN0aW5hdGlvbi0+Y29uZmlndXJlKCk7CisgICAg
cmV0dXJuIGRlc3RpbmF0aW9uOworfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2Fy
ZVNhbXBsZVJhdGUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5zYW1wbGVSYXRlKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KCkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRlZmF1bHQgYXVkaW8g
aGFyZHdhcmUgZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgorICAgIC8vIG9mIGNo
YW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcgRklYTUUgaW4gY3Jl
YXRlKCkuCisgICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29kZSB3aGljaCBhc3N1
bWVzIHN0ZXJlbyB3aGljaCBjYW4gYmUgdXBncmFkZWQuCisgICAgcmV0dXJuIDA7Cit9CisKK0F1
ZGlvRGVzdGluYXRpb25Db2NvYTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFj
ayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBtX291dHB1dFVuaXQoMCkKKyAg
ICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3Jl
YXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAs
IG1fc3BhcmVCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgdHJ1ZSku
cmVsZWFzZU5vbk51bGwoKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQoreworICAg
IGNvbmZpZ3VyZSgpOworfQorCitBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6On5BdWRpb0Rlc3RpbmF0
aW9uQ29jb2EoKQoreworICAgIGlmIChtX291dHB1dFVuaXQpCisgICAgICAgIEF1ZGlvQ29tcG9u
ZW50SW5zdGFuY2VEaXNwb3NlKG1fb3V0cHV0VW5pdCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5h
dGlvbkNvY29hOjpzdGFydCgpCit7CisgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbkNv
Y29hOjpzdGFydCIpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0
KG1fb3V0cHV0VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgc2V0SXNQbGF5aW5n
KHRydWUpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCgpCit7CisgICAg
TE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpzdG9wIik7CisgICAgT1NTdGF0dXMg
cmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOworCisgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCit7CisgICAgaWYgKG1f
aXNQbGF5aW5nID09IGlzUGxheWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1BsYXlp
bmcgPSBpc1BsYXlpbmc7CisgICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKK30K
Kwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbUZvcm1hdCwgZmxvYXQgc2Ft
cGxlUmF0ZSkKK3sKKyAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMy
KTsKKyAgICBjb25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OworICAgIHN0cmVhbUZvcm1hdC5tU2Ft
cGxlUmF0ZSA9IHNhbXBsZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRp
b0Zvcm1hdExpbmVhclBDTTsKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOworICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0
OworICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OworICAgIHN0cmVhbUZvcm1hdC5tQ2hh
bm5lbHNQZXJGcmFtZSA9IDI7CisgICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJp
dHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKK30KKworc3RhdGljIHZvaWQgYXNzaWduQXVkaW9C
dWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzJiBidXMsIFVJbnQzMiBu
dW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZyYW1lT2Zmc2V0
LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCit7CisgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1ZmZlcnM7ICsraSkgeworICAgICAgICBVSW50MzIgYnl0ZXNQZXJGcmFtZSA9IGJ1
ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOworICAgICAgICBVSW50MzIg
Ynl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKKyAgICAgICAgYXV0byog
bWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGJ1ZmZlcnNbaV0ubURhdGEpICsgYnl0ZU9mZnNldCk7CisgICAgICAgIGJ1cy5zZXRDaGFubmVs
TWVtb3J5KGksIG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOworICAgIH0KK30KKworLy8gUHVsbHMg
b24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCitPU1N0YXR1cyBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlv
QnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIGF1dG8qIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZm
ZXJzOworICAgIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMgPSBpb0RhdGEtPm1OdW1iZXJCdWZmZXJz
OworICAgIFVJbnQzMiBmcmFtZXNSZW1haW5pbmcgPSBudW1iZXJPZkZyYW1lczsKKyAgICBVSW50
MzIgZnJhbWVPZmZzZXQgPSAwOworICAgIHdoaWxlIChmcmFtZXNSZW1haW5pbmcgPiAwKSB7Cisg
ICAgICAgIGlmIChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSkgeworICAgICAg
ICAgICAgQVNTRVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKTsKKyAgICAg
ICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4obV9lbmRTcGFy
ZUZyYW1lIC0gbV9zdGFydFNwYXJlRnJhbWUsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgICAg
IGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1i
ZXJPZkJ1ZmZlcnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUp
OworICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFyZUJ1cy5nZXQo
KSwgbV9zdGFydFNwYXJlRnJhbWUsIG1fZW5kU3BhcmVGcmFtZSk7CisgICAgICAgICAgICBmcmFt
ZU9mZnNldCArPSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIGZyYW1lc1JlbWFpbmluZyAt
PSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIG1fc3RhcnRTcGFyZUZyYW1lICs9IGZyYW1l
c1RoaXNUaW1lOworICAgICAgICB9CisKKyAgICAgICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0g
c3RkOjptaW48VUludDMyPihrUmVuZGVyQnVmZmVyU2l6ZSwgZnJhbWVzUmVtYWluaW5nKTsKKyAg
ICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJCdXMuZ2V0KCks
IG51bWJlck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlz
VGltZSk7CisKKyAgICAgICAgaWYgKCFmcmFtZXNUaGlzVGltZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBpZiAoZnJhbWVzVGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6ZSkgeworICAg
ICAgICAgICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9zcGFyZUJ1cy5wdHIoKSwga1JlbmRlckJ1
ZmZlclNpemUpOworICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFy
ZUJ1cy5nZXQoKSwgMCwgZnJhbWVzVGhpc1RpbWUpOworICAgICAgICAgICAgbV9zdGFydFNwYXJl
RnJhbWUgPSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9IGtS
ZW5kZXJCdWZmZXJTaXplOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2FsbGJhY2su
cmVuZGVyKDAsIG1fcmVuZGVyQnVzLnB0cigpLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgIGZy
YW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0g
ZnJhbWVzVGhpc1RpbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJyOworfQorCisvLyBEZWZh
dWx0T3V0cHV0VW5pdCBjYWxsYmFjaworT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpp
bnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypidXNOdW1iZXIqLywgVUludDMyIG51bWJlck9m
RnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBhdXRvKiBhdWRpb091dHB1
dCA9IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRpb25Db2NvYSo+KHVzZXJEYXRhKTsKKyAgICBy
ZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihudW1iZXJPZkZyYW1lcywgaW9EYXRhKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGlu
YXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9E
ZXN0aW5hdGlvbkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmE3OWVjNTJkMzY0MjYwMjg1MGM3OTk0Yzhh
M2M0YWVhMjA0NjQ0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsODMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNs
dWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCisjaW5jbHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb0J1czsKKwordXNpbmcgQ3JlYXRlQXVkaW9EZXN0aW5hdGlvbkNvY29hT3ZlcnJpZGUg
PSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4oKikoQXVkaW9JT0NhbGxiYWNrJiwg
ZmxvYXQgc2FtcGxlUmF0ZSk7CisKKy8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1
ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0CitjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CitwdWJsaWM6CisgICAgQXVkaW9EZXN0aW5h
dGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZpcnR1
YWwgfkF1ZGlvRGVzdGluYXRpb25Db2NvYSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IENyZWF0ZUF1ZGlvRGVzdGluYXRpb25Db2NvYU92ZXJyaWRlIGNyZWF0ZU92ZXJyaWRlOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7CisKKyAgICBib29sIGlzUGxh
eWluZygpIGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisgICAgZmxvYXQgc2FtcGxlUmF0
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQorICAgIEF1ZGlvVW5pdCYg
b3V0cHV0VW5pdCgpIHsgcmV0dXJuIG1fb3V0cHV0VW5pdDsgfQorICAgIAorICAgIC8vIERlZmF1
bHRPdXRwdXRVbml0IGNhbGxiYWNrCisgICAgc3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lk
KiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVT
dGFtcCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZm
ZXJMaXN0KiBpb0RhdGEpOworCisgICAgdm9pZCBzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24oQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3RvcCgpIG92ZXJy
aWRlOworCisgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9uPiBBdWRp
b0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiwgY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CisgICAgCisgICAgdm9pZCBjb25maWd1cmUoKTsKKyAg
ICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSk7CisKKyAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OworICAgIEF1ZGlvSU9DYWxs
YmFjayYgbV9jYWxsYmFjazsKKyAgICBSZWY8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOworICAgIFJl
ZjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKKworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBi
b29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZy
YW1lIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5kU3BhcmVGcmFtZSB7IDAgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlv
bklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5h
dGlvbklPUy5jcHAKaW5kZXggNGJkZTdlNDFlMmI2NDM3Y2QwZmY3MjVlNGQwNzlkNjhmODllN2Rj
NS4uMjQyMTdjZDQ2NGJjZDlhNzU4NDEzOGQ3YjZjMmNkNWZiMjk2ODFhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9u
SU9TLmNwcApAQCAtMzEsMjUgKzMxLDE0IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQ
TEFURk9STShJT1NfRkFNSUxZKQogCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbklPUy5oIgor
I2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgogCi0jaW5jbHVkZSAiQXVkaW9JT0Nh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb1NlcnZpY2VzLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rvb2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9Tb2Z0TGlua2luZy5oPgogCiBTT0ZUX0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKIFNP
RlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50RmluZE5leHQsIEF1ZGlvQ29tcG9u
ZW50LCAoQXVkaW9Db21wb25lbnQgaW5Db21wb25lbnQsIGNvbnN0IEF1ZGlvQ29tcG9uZW50RGVz
Y3JpcHRpb24gKmluRGVzYyksIChpbkNvbXBvbmVudCwgaW5EZXNjKSkKLVNPRlRfTElOSyhBdWRp
b1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3NlLCBPU1N0YXR1cywgKEF1ZGlv
Q29tcG9uZW50SW5zdGFuY2UgaW5JbnN0YW5jZSksIChpbkluc3RhbmNlKSkKIFNPRlRfTElOSyhB
dWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcsIE9TU3RhdHVzLCAoQXVkaW9D
b21wb25lbnQgaW5Db21wb25lbnQsIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgKm91dEluc3RhbmNl
KSwgKGluQ29tcG9uZW50LCBvdXRJbnN0YW5jZSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBB
dWRpb091dHB1dFVuaXRTdGFydCwgT1NTdGF0dXMsIChBdWRpb1VuaXQgY2kpLCAoY2kpKQotU09G
VF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3RvcCwgT1NTdGF0dXMsIChBdWRp
b1VuaXQgY2kpLCAoY2kpKQogU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9Vbml0QWRkUHJv
cGVydHlMaXN0ZW5lciwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9w
ZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFByb3BlcnR5TGlzdGVuZXJQcm9jIGluUHJvYywgdm9pZCAq
aW5Qcm9jVXNlckRhdGEpLCAoaW5Vbml0LCBpbklELCBpblByb2MsIGluUHJvY1VzZXJEYXRhKSkK
IFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvVW5pdEdldFByb3BlcnR5LCBPU1N0YXR1cywg
KEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvVW5pdFByb3BlcnR5SUQgaW5JRCwgQXVkaW9Vbml0U2Nv
cGUgaW5TY29wZSwgQXVkaW9Vbml0RWxlbWVudCBpbkVsZW1lbnQsIHZvaWQgKm91dERhdGEsIFVJ
bnQzMiAqaW9EYXRhU2l6ZSksIChpblVuaXQsIGluSUQsIGluU2NvcGUsIGluRWxlbWVudCwgb3V0
RGF0YSwgaW9EYXRhU2l6ZSkpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRJbml0
aWFsaXplLCBPU1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQpLCAoaW5Vbml0KSkKQEAgLTU3LDU1
ICs0Niw5IEBAIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvVW5pdFNldFByb3BlcnR5LCBP
U1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXplID0gMTI4OwotY29uc3QgaW50IGtQcmVmZXJy
ZWRCdWZmZXJTaXplID0gMjU2OwotCi10eXBlZGVmIEhhc2hTZXQ8QXVkaW9EZXN0aW5hdGlvbklP
Uyo+IEF1ZGlvRGVzdGluYXRpb25TZXQ7Ci1zdGF0aWMgQXVkaW9EZXN0aW5hdGlvblNldCYgYXVk
aW9EZXN0aW5hdGlvbnMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdWRpb0Rlc3Rp
bmF0aW9uU2V0PiBhdWRpb0Rlc3RpbmF0aW9uU2V0OwotICAgIHJldHVybiBhdWRpb0Rlc3RpbmF0
aW9uU2V0OwotfQotCi0vLyBGYWN0b3J5IG1ldGhvZDogaU9TLWltcGxlbWVudGF0aW9uCi1zdGQ6
OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1
ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG51bWJlck9m
SW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2Ft
cGxlUmF0ZSkKLXsKLSAgICAvLyBGSVhNRTogbWFrZSB1c2Ugb2YgaW5wdXREZXZpY2VJZCBhcyBh
cHByb3ByaWF0ZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBh
dWRpbyBpbnB1dC4KLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQotICAgICAgICBMT0co
TWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQg
aW5wdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtdWx0
aS1jaGFubmVsICg+IHN0ZXJlbykgb3V0cHV0LgotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5u
ZWxzICE9IDIpCi0gICAgICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgl
dSwgJXUsICVmKSAtIHVuaGFuZGxlZCBvdXRwdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hh
bm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbklPUz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOwot
fQotCi1mbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQordm9pZCBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSgpCiB7Ci0gICAgcmV0dXJuIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBB
dWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQotewotICAgIC8vIEZJWE1FOiBxdWVy
eSB0aGUgZGVmYXVsdCBhdWRpbyBoYXJkd2FyZSBkZXZpY2UgdG8gcmV0dXJuIHRoZSBhY3R1YWwg
bnVtYmVyCi0gICAgLy8gb2YgY2hhbm5lbHMgb2YgdGhlIGRldmljZS4gQWxzbyBzZWUgY29ycmVz
cG9uZGluZyBGSVhNRSBpbiBjcmVhdGUoKS4KLSAgICAvLyBUaGVyZSBpcyBhIHNtYWxsIGFtb3Vu
dCBvZiBjb2RlIHdoaWNoIGFzc3VtZXMgc3RlcmVvIGluIEF1ZGlvRGVzdGluYXRpb25JT1Mgd2hp
Y2gKLSAgICAvLyBjYW4gYmUgdXBncmFkZWQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUF1ZGlvRGVz
dGluYXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFj
aywgZG91YmxlIHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2Fs
bGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtS
ZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkpCi0gICAgLCBtX3NwYXJlQnVzKEF1ZGlvQnVzOjpjcmVh
dGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIHRydWUpKQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBs
ZVJhdGUpCi0gICAgLCBtX2lzUGxheWluZyhmYWxzZSkKLXsKLSAgICBhdWRpb0Rlc3RpbmF0aW9u
cygpLmFkZCh0aGlzKTsKKyAgICBjb25zdCBpbnQga1ByZWZlcnJlZEJ1ZmZlclNpemUgPSAyNTY7
CiAKICAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRwdXRVbml0CiAgICAgQXVk
aW9Db21wb25lbnQgY29tcDsKQEAgLTEyMCwxNTggKzYzLDQyIEBAIEF1ZGlvRGVzdGluYXRpb25J
T1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZG91Ymxl
IHNhbXBsCiAKICAgICBBU1NFUlQoY29tcCk7CiAKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRp
b0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZtX291dHB1dFVuaXQpOworICAgIE9TU3RhdHVz
IHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VOZXcoY29tcCwgJm91dHB1dFVuaXQoKSk7
CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgVUludDMyIGZsYWcgPSAxOwotICAgIHJlc3Vs
dCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwgCi0gICAgICAgIGtBdWRpb091
dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywgCi0gICAgICAgIGtBdWRpb1VuaXRTY29wZV9PdXRw
dXQsIAorICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwKKyAg
ICAgICAga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5X0VuYWJsZUlPLAorICAgICAgICBrQXVkaW9V
bml0U2NvcGVfT3V0cHV0LAogICAgICAgICAwLAotICAgICAgICAmZmxhZywgCisgICAgICAgICZm
bGFnLAogICAgICAgICBzaXplb2YoZmxhZykpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAg
IHJlc3VsdCA9IEF1ZGlvVW5pdEFkZFByb3BlcnR5TGlzdGVuZXIobV9vdXRwdXRVbml0LCBrQXVk
aW9Vbml0UHJvcGVydHlfTWF4aW11bUZyYW1lc1BlclNsaWNlLCBmcmFtZVNpemVDaGFuZ2VkUHJv
YywgdGhpcyk7Ci0gICAgQVNTRVJUKCFyZXN1bHQpOwotCi0gICAgcmVzdWx0ID0gQXVkaW9Vbml0
SW5pdGlhbGl6ZShtX291dHB1dFVuaXQpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxp
emUob3V0cHV0VW5pdCgpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7Ci0KLSAgICBjb25maWd1cmUo
KTsKLX0KLQotQXVkaW9EZXN0aW5hdGlvbklPUzo6fkF1ZGlvRGVzdGluYXRpb25JT1MoKQotewot
ICAgIGF1ZGlvRGVzdGluYXRpb25zKCkucmVtb3ZlKHRoaXMpOwotCi0gICAgaWYgKG1fb3V0cHV0
VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0
KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpjb25maWd1cmUoKQotewogICAgIC8v
IFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0Owog
ICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZD
b24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
b3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9V
bml0U2NvcGVfSW5wdXQsIDAsICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisgICAgcmVzdWx0ID0g
QXVkaW9Vbml0U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0
UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgJmlucHV0LCBzaXplb2Yo
aW5wdXQpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7CiAKICAgICAvLyBTZXQgc3RyZWFtIGZvcm1h
dAogICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJlYW1Gb3JtYXQ7CiAKICAgICBV
SW50MzIgc2l6ZSA9IHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pOwotICAgIHJl
c3VsdCA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwgMCwgKHZvaWQqKSZzdHJl
YW1Gb3JtYXQsICZzaXplKTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShvdXRw
dXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29w
ZV9PdXRwdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCAmc2l6ZSk7CiAgICAgQVNTRVJUKCFy
ZXN1bHQpOwogCi0gICAgY29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7
Ci0gICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0gODsKLSAgICBzdHJlYW1Gb3JtYXQubVNhbXBs
ZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRp
b0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlv
Rm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVy
bGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0
OwotICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKLSAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OwotICAgIHN0cmVhbUZvcm1hdC5tQ2hh
bm5lbHNQZXJGcmFtZSA9IDI7Ci0gICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJp
dHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKyAgICBzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24oc3RyZWFtRm9ybWF0LCBzYW1wbGVSYXRlKCkpOwogCi0gICAgcmVzdWx0ID0gQXVkaW9V
bml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9y
bWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCBzaXpl
b2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0
U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0
LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICh2b2lkKikmc3RyZWFtRm9ybWF0LCBzaXplb2Yo
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAg
ICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0UHJlZmVycmVkQnVmZmVyU2l6ZShr
UHJlZmVycmVkQnVmZmVyU2l6ZSk7CiB9CiAKLXZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3Rh
cnQoKQotewotICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb25JT1M6OnN0YXJ0Iik7Ci0K
LSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX291dHB1dFVuaXQp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7Ci19Ci0KLXZv
aWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCgpCi17Ci0gICAgTE9HKE1lZGlhLCAiQXVkaW9E
ZXN0aW5hdGlvbklPUzo6c3RvcCIpOwotCi0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRw
dXRVbml0U3RvcChtX291dHB1dFVuaXQpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJ
c1BsYXlpbmcoZmFsc2UpOwotfQotCi1zdGF0aWMgdm9pZCBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1
cyhBdWRpb0J1ZmZlciogYnVmZmVycywgQXVkaW9CdXMmIGJ1cywgVUludDMyIG51bWJlck9mQnVm
ZmVycywgVUludDMyIG51bWJlck9mRnJhbWVzLCBVSW50MzIgZnJhbWVPZmZzZXQsIFVJbnQzMiBm
cmFtZXNUaGlzVGltZSkKLXsKLSAgICBmb3IgKFVJbnQzMiBpID0gMDsgaSA8IG51bWJlck9mQnVm
ZmVyczsgKytpKSB7Ci0gICAgICAgIFVJbnQzMiBieXRlc1BlckZyYW1lID0gYnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gbnVtYmVyT2ZGcmFtZXM7Ci0gICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0
ID0gZnJhbWVPZmZzZXQgKiBieXRlc1BlckZyYW1lOwotICAgICAgICBmbG9hdCogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcnNb
aV0ubURhdGEpICsgYnl0ZU9mZnNldCk7Ci0gICAgICAgIGJ1cy5zZXRDaGFubmVsTWVtb3J5KGks
IG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOwotICAgIH0KLX0KLQotLy8gUHVsbHMgb24gb3VyIHBy
b3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCi1PU1N0YXR1cyBBdWRpb0Rlc3Rp
bmF0aW9uSU9TOjpyZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3Qq
IGlvRGF0YSkKLXsKLSAgICBBdWRpb0J1ZmZlciogYnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7
Ci0gICAgVUludDMyIG51bWJlck9mQnVmZmVycyA9IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7Ci0g
ICAgVUludDMyIGZyYW1lc1JlbWFpbmluZyA9IG51bWJlck9mRnJhbWVzOwotICAgIFVJbnQzMiBm
cmFtZU9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKGZyYW1lc1JlbWFpbmluZyA+IDApIHsKLSAgICAg
ICAgaWYgKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9zdGFydFNwYXJlRnJhbWUgPCBtX2VuZFNwYXJlRnJhbWUpOwotICAgICAgICAg
ICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0gc3RkOjptaW48VUludDMyPihtX2VuZFNwYXJlRnJh
bWUgLSBtX3N0YXJ0U3BhcmVGcmFtZSwgbnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICAgICAgYXNz
aWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgKm1fcmVuZGVyQnVzLCBudW1iZXJPZkJ1ZmZl
cnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAg
ICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UoKm1fc3BhcmVCdXMsIG1fc3RhcnRTcGFy
ZUZyYW1lLCBtX2VuZFNwYXJlRnJhbWUpOwotICAgICAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJh
bWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1Rp
bWU7Ci0gICAgICAgICAgICBtX3N0YXJ0U3BhcmVGcmFtZSArPSBmcmFtZXNUaGlzVGltZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQz
Mj4oa1JlbmRlckJ1ZmZlclNpemUsIGZyYW1lc1JlbWFpbmluZyk7Ci0gICAgICAgIGFzc2lnbkF1
ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsICptX3JlbmRlckJ1cywgbnVtYmVyT2ZCdWZmZXJzLCBu
dW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKLQotICAgICAgICBp
ZiAoIWZyYW1lc1RoaXNUaW1lKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChmcmFt
ZXNUaGlzVGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNr
LnJlbmRlcigwLCBtX3NwYXJlQnVzLmdldCgpLCBrUmVuZGVyQnVmZmVyU2l6ZSk7Ci0gICAgICAg
ICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSgqbV9zcGFyZUJ1cywgMCwgZnJhbWVzVGhp
c1RpbWUpOwotICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgPSBmcmFtZXNUaGlzVGltZTsK
LSAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9IGtSZW5kZXJCdWZmZXJTaXplOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIG1fY2FsbGJhY2sucmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdl
dCgpLCBmcmFtZXNUaGlzVGltZSk7Ci0gICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNU
aW1lOwotICAgICAgICBmcmFtZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG5vRXJyOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnNldElz
UGxheWluZyhib29sIGlzUGxheWluZykKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAg
ICBtX2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0
VW5pdCBjYWxsYmFjawotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6aW5wdXRQcm9jKHZv
aWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGlt
ZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVk
aW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9EZXN0aW5hdGlvbklPUyogYXVkaW9P
dXRwdXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uSU9TKj4odXNlckRhdGEpOwotICAg
IHJldHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOwotfQot
Ci12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZyYW1lU2l6ZUNoYW5nZWRQcm9jKHZvaWQgKmlu
UmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVW5pdFByb3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBB
dWRpb1VuaXRFbGVtZW50KQotewotICAgIEF1ZGlvRGVzdGluYXRpb25JT1MqIGF1ZGlvT3V0cHV0
ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbklPUyo+KGluUmVmQ29uKTsKLSAgICBVSW50
MzIgYnVmZmVyU2l6ZSA9IDA7Ci0gICAgVUludDMyIGRhdGFTaXplID0gc2l6ZW9mKGJ1ZmZlclNp
emUpOwotICAgIEF1ZGlvVW5pdEdldFByb3BlcnR5KGF1ZGlvT3V0cHV0LT5tX291dHB1dFVuaXQs
IGtBdWRpb1VuaXRQcm9wZXJ0eV9NYXhpbXVtRnJhbWVzUGVyU2xpY2UsIGtBdWRpb1VuaXRTY29w
ZV9HbG9iYWwsIDAsICh2b2lkKikmYnVmZmVyU2l6ZSwgJmRhdGFTaXplKTsKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIj4+Pj4gZnJhbWVTaXplQ2hhbmdlZCA9ICVsdVxuIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oYnVmZmVyU2l6ZSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRp
b25JT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0
aW9uSU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2OTIzOWZhY2I5NjYzOWMx
NTllYmZlMTNlOWFlODAyZWRlMTZmNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVz
dGluYXRpb25JT1MuaAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFu
IEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9V
bml0Ci0KLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25JT1MgZmluYWwgOiBwdWJsaWMgQXVkaW9EZXN0
aW5hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbklPUyhBdWRpb0lPQ2FsbGJh
Y2smLCBkb3VibGUgc2FtcGxlUmF0ZSk7Ci0gICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbklP
UygpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY29uZmlndXJlKCk7Ci0KLSAgICAvLyBBdWRpb0Rl
c3RpbmF0aW9uCi0gICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92
ZXJyaWRlOwotICAgIGJvb2wgaXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlp
bmc7IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9z
YW1wbGVSYXRlOyB9Ci0KLSAgICAvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjawotICAgIHN0
YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgYnVzTnVtYmVyLCBVSW50
MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKLSAgICBzdGF0aWMg
dm9pZCBmcmFtZVNpemVDaGFuZ2VkUHJvYyh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0IGluVW5p
dCwgQXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCBBdWRpb1VuaXRTY29wZSBpblNjb3BlLCBBdWRp
b1VuaXRFbGVtZW50IGluRWxlbWVudCk7Ci0KLSAgICBmcmllbmQgZmxvYXQgQXVkaW9EZXN0aW5h
dGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCk7Ci0KLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMy
IG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0gICAgdm9pZCBzZXRJ
c1BsYXlpbmcoYm9vbCk7Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OwotICAgIEF1ZGlv
SU9DYWxsYmFjayYgbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVz
OwotICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKLSAgICB1bnNpZ25lZCBtX3N0YXJ0
U3BhcmVGcmFtZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2VuZFNwYXJlRnJhbWUgeyAwIH07Ci0K
LSAgICBkb3VibGUgbV9zYW1wbGVSYXRlOwotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGlu
YXRpb25NYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVz
dGluYXRpb25NYWMuY3BwCmluZGV4IDlmZTY0YmFhYTQ3ODRmZWNkYWIzZDZkZGI1ZTI3ODM4MWUx
ZTA3MDAuLmJiZDE4ZWVhZGU2ZjA1Y2M2Y2I1ODhiYTBkMzgyYmI2MDZiYzgzMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5h
dGlvbk1hYy5jcHAKQEAgLTI3LDY0ICsyNywxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAotI2lmIEVOQUJMRShXRUJf
QVVESU8pCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oTUFDKQogCi0jaWYgUExB
VEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1hYy5oIgotCi0jaW5jbHVk
ZSAiQXVkaW9JT0NhbGxiYWNrLmgiCi0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlci5oIgotI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKICNp
bmNsdWRlIDxDb3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDEyODsKLWNvbnN0IGZsb2F0IGtMb3dUaHJlc2hv
bGQgPSAtMTsKLWNvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xkID0gMTsKLQotLy8gRmFjdG9yeSBt
ZXRob2Q6IE1hYy1pbXBsZW1lbnRhdGlvbgotc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRp
b24+IEF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBj
b25zdCBTdHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gRklYTUU6
IG1ha2UgdXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9wcmlhdGUuCi0KLSAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCi0gICAgaWYgKG51bWJl
ck9mSW5wdXRDaGFubmVscykKLSAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6
Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIGlucHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJ
bnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKLQotICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGktY2hhbm5lbCAoPiBzdGVyZW8pIG91dHB1
dC4KLSAgICBpZiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyAhPSAyKQotICAgICAgICBMT0coTWVk
aWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgb3V0
cHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5u
ZWxzLCBzYW1wbGVSYXRlKTsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlvRGVzdGluYXRp
b25NYWM+KGNhbGxiYWNrLCBzYW1wbGVSYXRlKTsKLX0KLQotZmxvYXQgQXVkaW9EZXN0aW5hdGlv
bjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQg
b3V0cHV0IGRldmljZSdzIHNhbXBsZS1yYXRlLgotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNo
YXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQXVkaW9EZXN0
aW5hdGlvbjo6bWF4Q2hhbm5lbENvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRl
ZmF1bHQgYXVkaW8gaGFyZHdhcmUgZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgot
ICAgIC8vIG9mIGNoYW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcg
RklYTUUgaW4gY3JlYXRlKCkuCi0gICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29k
ZSB3aGljaCBhc3N1bWVzIHN0ZXJlbyBpbiBBdWRpb0Rlc3RpbmF0aW9uTWFjIHdoaWNoCi0gICAg
Ly8gY2FuIGJlIHVwZ3JhZGVkLgotICAgIHJldHVybiAwOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9u
TWFjOjpBdWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0
IHNhbXBsZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2Fs
bGJhY2spCi0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXpl
LCBmYWxzZSkpCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1faXNQbGF5
aW5nKGZhbHNlKQordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSgpCiB7CiAg
ICAgLy8gT3BlbiBhbmQgaW5pdGlhbGl6ZSBEZWZhdWx0T3V0cHV0VW5pdAogICAgIEF1ZGlvQ29t
cG9uZW50IGNvbXA7CkBAIC05OSw5OSArNTAsMjcgQEAgQXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVk
aW9EZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1wbGUK
IAogICAgIEFTU0VSVChjb21wKTsKIAotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9u
ZW50SW5zdGFuY2VOZXcoY29tcCwgJm1fb3V0cHV0VW5pdCk7CisgICAgT1NTdGF0dXMgcmVzdWx0
ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmb3V0cHV0VW5pdCgpKTsKICAgICBB
U1NFUlQoIXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1fb3V0
cHV0VW5pdCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkp
OwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rl
c3RpbmF0aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCi17Ci0gICAgaWYgKG1fb3V0cHV0
VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0
KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUoKQotewogICAgIC8v
IFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0Owog
ICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZD
b24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1f
b3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9V
bml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIHJlc3VsdCA9
IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1Nl
dFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVv
ZihpbnB1dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIC8vIFNldCBzdHJlYW0gZm9y
bWF0CiAgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0cmVhbUZvcm1hdDsKLSAgICBz
dHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3RyZWFtRm9ybWF0
Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1Gb3JtYXQubUZv
cm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zv
cm1hdEZsYWdJc05vbkludGVybGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQml0c1BlckNoYW5u
ZWwgPSA4ICogc2l6ZW9mKEZsb2F0MzIpOwotICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IDI7Ci0gICAgc3RyZWFtRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOwotICAgIHN0
cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgc3RyZWFt
Rm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIHNldEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbihzdHJlYW1Gb3JtYXQsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICBy
ZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRpb1VuaXRQcm9w
ZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJl
YW1Gb3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKKyAgICByZXN1
bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0
eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJlYW1G
b3JtYXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKICAgICBBU1NFUlQo
IXJlc3VsdCk7CiB9CiAKLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQoKQotewotICAg
IE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7Ci0K
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwotfQotCi12b2lk
IEF1ZGlvRGVzdGluYXRpb25NYWM6OnN0b3AoKQotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1
ZGlvT3V0cHV0VW5pdFN0b3AobV9vdXRwdXRVbml0KTsKLQotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICBzZXRJc1BsYXlpbmcoZmFsc2UpOwotfQotCi0vLyBQdWxscyBvbiBvdXIgcHJvdmlkZXIg
dG8gZ2V0IHJlbmRlcmVkIGF1ZGlvIHN0cmVhbS4KLU9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25N
YWM6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRh
KQotewotICAgIEF1ZGlvQnVmZmVyKiBidWZmZXJzID0gaW9EYXRhLT5tQnVmZmVyczsKLSAgICBt
X3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgwLCAoZmxvYXQqKWJ1ZmZlcnNbMF0ubURhdGEs
IG51bWJlck9mRnJhbWVzKTsKLSAgICBtX3JlbmRlckJ1cy0+c2V0Q2hhbm5lbE1lbW9yeSgxLCAo
ZmxvYXQqKWJ1ZmZlcnNbMV0ubURhdGEsIG51bWJlck9mRnJhbWVzKTsKLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dC4KLSAgICBtX2NhbGxiYWNr
LnJlbmRlcigwLCBtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZGcmFtZXMpOwotCi0gICAgLy8g
Q2xhbXAgdmFsdWVzIGF0IDBkYiAoaS5lLiwgWy0xLjAsIDEuMF0pCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcmVuZGVyQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgewotICAg
ICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWwgPSBtX3JlbmRlckJ1cy0+Y2hhbm5lbChpKTsKLSAg
ICAgICAgaWYgKCFjaGFubmVsLT5pc1NpbGVudCgpKQotICAgICAgICAgICAgVmVjdG9yTWF0aDo6
dmNsaXAoY2hhbm5lbC0+ZGF0YSgpLCAxLCAma0xvd1RocmVzaG9sZCwgJmtIaWdoVGhyZXNob2xk
LCBjaGFubmVsLT5tdXRhYmxlRGF0YSgpLCAxLCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OnNldElzUGxh
eWluZyhib29sIGlzUGxheWluZykKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5aW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBt
X2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5nZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0VW5p
dCBjYWxsYmFjawotT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQq
IHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9C
dWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk1hYyogYXVkaW9PdXRw
dXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uTWFjKj4odXNlckRhdGEpOwotICAgIHJl
dHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBM
QVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
OGIxMGFiZWJkNWRhNDk1MWMwOWUxOTZmNGUzNzIwNDExZmJjNzY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEF1ZGlvRGVzdGluYXRpb25NYWNfaAotI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gK
LQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgot
I2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQW4gQXVkaW9EZXN0aW5hdGlvbiB1c2luZyBD
b3JlQXVkaW8ncyBkZWZhdWx0IG91dHB1dCBBdWRpb1VuaXQKLQotY2xhc3MgQXVkaW9EZXN0aW5h
dGlvbk1hYyA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKLXB1YmxpYzoKLSAgICBBdWRpb0Rl
c3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIHZp
cnR1YWwgfkF1ZGlvRGVzdGluYXRpb25NYWMoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbmZp
Z3VyZSgpOwotCi0gICAgLy8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLSAgICBzdGF0aWMg
T1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25G
bGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGJ1c051bWJlciwgVUludDMyIG51
bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0KLSAgICBPU1N0YXR1cyBy
ZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0g
ICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7Ci0KLSAgICB2b2lkIHN0YXJ0KCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1BsYXlpbmcoKSBvdmVycmlk
ZSB7IHJldHVybiBtX2lzUGxheWluZzsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAgIEF1ZGlvVW5pdCBtX291dHB1
dFVuaXQ7Ci0gICAgQXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxBdWRp
b0J1cz4gbV9yZW5kZXJCdXM7Ci0KLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBt
X2lzUGxheWluZzsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1
ZGlvRGVzdGluYXRpb25NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9Nb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQyMDA5
Y2RkMDYzNTY3MGNhMWI4N2FhZDYwNGExYTUwOTAxNWVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorCisjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiV2Vi
QXVkaW9CdWZmZXJMaXN0LmgiCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3Jl
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXpl
ID0gMTI4OworCitNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpNb2NrQXVkaW9EZXN0aW5hdGlv
bkNvY29hKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAg
OiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoY2FsbGJhY2ssIHNhbXBsZVJhdGUpCisgICAgLCBtX3dv
cmtRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSBSZW5k
ZXIgUXVldWUiKSkKKyAgICAsIG1fdGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6dGljaykKK3sKK30KKwordm9pZCBNb2NrQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjpzdGFydCgpCit7CisgICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhTZWNv
bmRzIHsgbV9udW1iZXJPZkZyYW1lc1RvUHJvY2VzcyAvIHNhbXBsZVJhdGUoKSB9KTsKKyAgICBz
ZXRJc1BsYXlpbmcodHJ1ZSk7Cit9CisKK3ZvaWQgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6
c3RvcCgpCit7CisgICAgbV90aW1lci5zdG9wKCk7CisgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsK
KworICAgIEJpbmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgbV93b3JrUXVldWUtPmRpc3Bh
dGNoKFsmc2VtYXBob3JlXSB7CisgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICB9KTsK
KyAgICBzZW1hcGhvcmUud2FpdCgpOworfQorCit2b2lkIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnRpY2soKQoreworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgc2FtcGxlUmF0
ZSA9IHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZGcmFtZXNUb1Byb2Nlc3MgPSBtX251bWJlck9mRnJh
bWVzVG9Qcm9jZXNzXSB7CisgICAgICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJl
YW1Gb3JtYXQ7CisgICAgICAgIHNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbihzdHJlYW1G
b3JtYXQsIHNhbXBsZVJhdGUpOworCisgICAgICAgIFdlYkF1ZGlvQnVmZmVyTGlzdCB3ZWJBdWRp
b0J1ZmZlckxpc3QgeyBzdHJlYW1Gb3JtYXQsIG51bWJlck9mRnJhbWVzVG9Qcm9jZXNzIH07Cisg
ICAgICAgIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6aW5wdXRQcm9jKHRoaXMsIDAsIDAsIDAsIG51
bWJlck9mRnJhbWVzVG9Qcm9jZXNzLCB3ZWJBdWRpb0J1ZmZlckxpc3QubGlzdCgpKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlv
RGVzdGluYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNkNGQ5MDlkMmM3NDM2MDVmMmExZTAz
MjNhZDkzM2ZkNTI5Y2I2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRG
T1JNKENPQ09BKQorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgiCisjaW5jbHVk
ZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9JT0NhbGxiYWNrOworCitjbGFzcyBNb2NrQXVkaW9E
ZXN0aW5hdGlvbkNvY29hIGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Db2NvYSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxBdWRpb0Rlc3RpbmF0aW9uPiBjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFj
aywgZmxvYXQgc2FtcGxlUmF0ZSkgeyByZXR1cm4gbWFrZVVuaXF1ZTxNb2NrQXVkaW9EZXN0aW5h
dGlvbkNvY29hPihjYWxsYmFjaywgc2FtcGxlUmF0ZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJh
dGUpOworCitwcml2YXRlOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3Ao
KSBmaW5hbDsKKworICAgIHZvaWQgdGljaygpOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3Jr
UXVldWU7CisgICAgUnVuTG9vcDo6VGltZXI8TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYT4gbV90
aW1lcjsKKyAgICB1aW50MzJfdCBtX251bWJlck9mRnJhbWVzVG9Qcm9jZXNzIHsgMzg0IH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KSAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAzYTllNmMyYjJiNzc1ZWY0NDg4M2ZkMzg0OWUwOWQxOTczYTY5NTA3Li42Mjk1NGEyZjZhZGNm
YzA4ZGU5NmM0ZGQ2NmE0YzI3ZWQ0Yzg4YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0xMjEsNiArMTIxLDcgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgi
CiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNZW1vcnlJbmZvLmgiCisjaW5j
bHVkZSAiTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oIgogI2luY2x1ZGUgIk1vY2tMaWJXZWJS
VENQZWVyQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIk1vY2tQYWdlT3ZlcmxheS5oIgogI2luY2x1
ZGUgIk1vY2tQYWdlT3ZlcmxheUNsaWVudC5oIgpAQCAtNTc3LDYgKzU3OCwxMCBAQCBJbnRlcm5h
bHM6OkludGVybmFscyhEb2N1bWVudCYgZG9jdW1lbnQpCiAjZW5kaWYKIAogICAgIG1fdW5zdXNw
ZW5kYWJsZUFjdGl2ZURPTU9iamVjdCA9IG51bGxwdHI7CisKKyNpZiBQTEFURk9STShDT0NPQSkg
JiYgIEVOQUJMRShXRUJfQVVESU8pCisgICAgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpjcmVhdGVP
dmVycmlkZSA9IG51bGxwdHI7CisjZW5kaWYKIH0KIAogRG9jdW1lbnQqIEludGVybmFsczo6Y29u
dGV4dERvY3VtZW50KCkgY29uc3QKQEAgLTQwNzEsNyArNDA3Niw2IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZW5kTWVkaWFDb250cm9sRXZlbnQoTWVkaWFDb250cm9sRXZlbnQgZXZlbnQpCiAjZW5kaWYg
Ly8gRU5BQkxFKE1FRElBX1NFU1NJT04pCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotCiB2b2lk
IEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCYgY29u
dGV4dCwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcpCiB7CiAgICAgQXVkaW9Db250ZXh0
OjpCZWhhdmlvclJlc3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBjb250ZXh0LmJlaGF2aW9yUmVz
dHJpY3Rpb25zKCk7CkBAIC00MDkwLDYgKzQwOTQsMTIgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEF1
ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIFN0cmluZ1ZpZXcg
cmUKICAgICBjb250ZXh0LmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKIH0K
IAordm9pZCBJbnRlcm5hbHM6OnVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKQoreworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y3JlYXRlT3ZlcnJp
ZGUgPSBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpjcmVhdGU7CisjZW5kaWYKK30KICNlbmRp
ZgogCiB2b2lkIEludGVybmFsczo6c2ltdWxhdGVTeXN0ZW1TbGVlcCgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCBiYTJiYjk3NGE5MmNlZjFhYzdlMzQ0NzZlYmIxMmVh
ZWRkNzA3YTg5Li5lNGNmODZkZmUxODM3OTQ0MThjMzc2OGVmNDhlYmRiNWE5YWZjZTg3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTYzMyw2ICs2MzMsNyBAQCBwdWJsaWM6CiAK
ICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rp
b25zKEF1ZGlvQ29udGV4dCYsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKTsKKyAgICB2
b2lkIHVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKICNlbmRpZgogCiAgICAgdm9pZCBz
aW11bGF0ZVN5c3RlbVNsZWVwKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwKaW5kZXggMWVlZTNjOWQzYWUzYjI2ZWU3ZjRhZDEyNzA5ODU1NmJhZGM2MmVjMy4uNjM3ZTRm
MTViNWE4ZjA4MTNjODhiMDU5MDU5Y2UxZTQ0OTg1N2JhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbApAQCAtNjEyLDYgKzYxMiw4IEBAIGVudW0gQ29tcG9zaXRpbmdQb2xpY3kg
ewogICAgIFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU1dIHZvaWQgc2V0TW9ja01lZGlhQ2FwdHVy
ZURldmljZXNFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW0NvbmRpdGlvbmFsPU1FRElB
X1NUUkVBTV0gdm9pZCBzZXRDdXN0b21Qcml2YXRlUmVjb3JkZXJDcmVhdG9yKCk7CiAKKyAgICBb
Q29uZGl0aW9uYWw9V0VCX0FVRElPXSB2b2lkIHVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2Eo
KTsKKwogICAgIFtDb25kaXRpb25hbD1XRUJfUlRDXSB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVj
dGlvblBsYXRmb3JtRXZlbnQoUlRDUGVlckNvbm5lY3Rpb24gY29ubmVjdGlvbiwgRE9NU3RyaW5n
IGFjdGlvbik7CiAgICAgW0NvbmRpdGlvbmFsPVdFQl9SVENdIHZvaWQgdXNlTW9ja1JUQ1BlZXJD
b25uZWN0aW9uRmFjdG9yeShET01TdHJpbmcgdGVzdENhc2UpOwogICAgIFtDb25kaXRpb25hbD1X
RUJfUlRDXSB2b2lkIHNldElDRUNhbmRpZGF0ZUZpbHRlcmluZyhib29sZWFuIGVuYWJsZWQpOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGZhYjcyZWU4M2Q4ZWFkZGYwYjdkNmY0OGQ1MTIyZWI5OGI1NGM3MmQuLmMxZWJmYjgz
YzRkNjJiOGFlMjNlODM4NDMzNGZmMTdkZDkzOTBmMTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxOS0xMC0xNyAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAg
U2hhcmUgY29kZSBiZXR3ZWVuIEF1ZGlvRGVzdGluYXRpb25JT1MgYW5kIEF1ZGlvRGVzdGluYXRp
b25NYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
MzA0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTYzNDA4NjY+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2dldFVz
ZXJNZWRpYS13ZWJhdWRpby1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVh
bS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8uaHRtbDoKKwogMjAxOS0xMC0xMyAgeW91ZW5uIGZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV1c2UgZXhpc3Rpbmcgd2ViIHByb2Nl
c3NlcyBmb3IgcnVubmluZyBzZXJ2aWNlIHdvcmtlcnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLWV4cGVjdGVk
LnR4dAppbmRleCBiMmE4OTAwZGQ1MTY0NTY0MzczNTkzYWYwNDNhOTRkNzg1ZjY0MGI5Li5mNzRk
ODg4ODJjOTg4NGJjNWUzYzg1YjY2ZTNjNjhkZjRmZGJjNzhiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8t
ZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNSBAQAogCiBQQVNTIFBsdWdnaW5nIGluIGdldFVzZXJN
ZWRpYSBhdWRpbyBzdHJlYW0gaW50byBXZWIgQXVkaW8gCiBQQVNTIFdlYiBBdWRpbyBzaG91bGQg
d29yayBldmVuIGlmIG51bWJlciBvZiBjaGFubmVscyBvZiBhIHRyYWNrIGluY3JlYXNlcyBmcm9t
IDEgdG8gMiAKK1BBU1MgV2ViIEF1ZGlvIHNob3VsZCB3b3JrIHdpdGggbW9jayBhdWRpbyBkZXN0
aW5hdGlvbiAKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRV
c2VyTWVkaWEtd2ViYXVkaW8uaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0
VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWwKaW5kZXggYWU1ZjAwZDBkMTkyMTE0MjNmY2JmNDZkNmRj
NDU3NGU0ODU1YWY5Yi4uNzIwNDM1YTc3YjdhYjJjM2I2ZTI4ZTM4NzJmY2UwNmJjNzA0ZTIxNyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2Vi
YXVkaW8uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRp
YS13ZWJhdWRpby5odG1sCkBAIC02NSw2ICs2NSwyNiBAQCBwcm9taXNlX3Rlc3QoYXN5bmMgKHRl
c3QpID0+IHsKICAgICBzb3VyY2UuZGlzY29ubmVjdChzY3JpcHQpOwogICAgIHNjcmlwdC5kaXNj
b25uZWN0KGF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7CiB9LCAiV2ViIEF1ZGlvIHNob3VsZCB3
b3JrIGV2ZW4gaWYgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIGEgdHJhY2sgaW5jcmVhc2VzIGZyb20g
MSB0byAyIik7CisKK3Byb21pc2VfdGVzdChhc3luYyAodGVzdCkgPT4geworICAgIGlmICghd2lu
ZG93LmludGVybmFscykKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJJbnRlcm5hbHMg
QVBJIHJlcXVpcmVkIik7CisgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlh
RGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSwgdmlkZW86IGZhbHNlIH0pOworICAg
IGludGVybmFscy51c2VNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hKCk7CisKKyAgICB2YXIgYXVk
aW9Db250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgpOworICAgIHZhciBhbmFseXplciA9
IGF1ZGlvQ29udGV4dC5jcmVhdGVBbmFseXNlcigpOworICAgIGFuYWx5emVyLmZmdFNpemUgPSAy
NTY7CisgICAgbGV0IHNvdXJjZSA9IGF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJj
ZShzdHJlYW0pOworICAgIHNvdXJjZS5jb25uZWN0KGFuYWx5emVyKTsKKyAgICBhbmFseXplci5j
b25uZWN0KGF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7CisKKyAgICBhd2FpdCBuZXcgUHJvbWlz
ZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwKSk7CisKKyAgICBzb3VyY2UuZGlz
Y29ubmVjdChhbmFseXplcik7CisgICAgYW5hbHl6ZXIuZGlzY29ubmVjdChhdWRpb0NvbnRleHQu
ZGVzdGluYXRpb24pOworfSwgIldlYiBBdWRpbyBzaG91bGQgd29yayB3aXRoIG1vY2sgYXVkaW8g
ZGVzdGluYXRpb24iKTsKKwogICAgICAgICA8L3NjcmlwdD4KICAgICA8L2JvZHk+CiA8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381290</attachid>
            <date>2019-10-18 03:02:54 -0700</date>
            <delta_ts>2019-10-18 03:10:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191018120251.patch</filename>
            <type>text/plain</type>
            <size>56426</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I3ZTUwZWVmYzQ5YTdj
Yzk4NTA4N2NhYzY3MTMxMTViNTRkNzZhMi4uYzkwYmFhYzZiY2VkMWY0NjYzODhhZGQzY2FhZGU1
YzE5N2ExNjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTEwLTE4ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjM0MDg2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgQXVkaW9EZXN0aW5hdGlvbkNvY29hIHRvIHNoYXJl
IGNvZGUgYmV0d2VlbiBpT1MgYW5kIE1hYy4KKyAgICAgICAgTW9zdCBjb2RlIGlzIG5vdyBzaGFy
ZWQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF1ZGlvIHVuaXQgd2hpY2gg
aXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gTWFjIGFuZCBpT1MuCisKKyAgICAgICAgSW50
cm9kdWNlIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgdG8gYWxsb3cgbW9yZSBjb2RlIGNvdmVy
YWdlIG9mIHRoZSBzaGFyZWQgY29kZS4KKyAgICAgICAgVGhpcyBjb3VsZCBhbHNvIGFsbG93IHVz
IHRvIHZhbGlkYXRlIGR5bmFtaWMgY2hhbmdlcyBpbiBmcmFtZSByYXRlLCBudW1iZXIgb2YgZnJh
bWVzIHRvIHByb2Nlc3MuLi4KKyAgICAgICAgQWRkIEludGVybmFscyBBUEkgdG8gZW5hYmxlIHRo
ZSBtb2NrIGRlc3RpbmF0aW9uLgorIAorICAgICAgICBDb3ZlcmVkIGJ5IGFkZGVkIHRlc3QuCisK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJk
d2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6
QXVkaW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25Db2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldElzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjph
c3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpvdXRwdXRVbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9E
ZXN0aW5hdGlvbklPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6
OnByb2Nlc3NCdXNBZnRlclJlbmRlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvRGVzdGluYXRpb25JT1MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnByb2Nlc3NCdXNBZnRlclJlbmRlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjp0aWNrKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VNb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxOS0xMC0xOCAgeW91ZW5uIGZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBzZXJ2aWNlIHdvcmtlciByZWdp
c3RyYXRpb24gbWF0Y2hpbmcgZm9yIG5hdmlnYXRpb24gbG9hZHMgdG8gbmV0d29yayBwcm9jZXNz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAxMmZmMTFkMmVmZTE3MjE1YjUzNjEwMDA5N2Q3
MmVkYzY1NjljOGE1Li5kYTVlNzQ4ZjViNjEyYjgxNjA0ODBkYTUzMzU5NzNhOGMxZjUwMjg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTE2Myw2ICsxNjMsNyBAQCBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5jcHAKIAogcGxhdGZvcm0vYXVkaW8vQXVkaW9TZXNzaW9u
LmNwcAogCitwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCiBw
bGF0Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0KIHBsYXRmb3Jt
L2F1ZGlvL2NvY29hL1dlYkF1ZGlvQnVmZmVyTGlzdC5jcHAKIApAQCAtNDkzLDYgKzQ5NCw3IEBA
IHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQog
CiBwbGF0Zm9ybS9tb2NrL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmNwcAogcGxhdGZv
cm0vbW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5jcHAKK3BsYXRmb3JtL21vY2svTW9ja0F1
ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKIAogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0
ZUluZm9DRk5ldC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvY2YvRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOTE1NTQ4MzU5ODBjYjMwMjEyMTgwOWJmZTQ0ZjQ4MzBiNGZjMDhkMy4uODhkYTcw
NWJkOWUwMzExYmM3ZGVlZWQ2MGViNTMzMGEzMGI0NzAxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzI0Miw2ICs3MjQyLDgg
QEAKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVzcG9uc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTMwMTVENjFDN0I1NzA0MDAwOTFDNkYgLyogRmV0Y2hCb2R5U291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoQm9keVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENzFDN0I1NzA0MDAwOTFDNkUg
LyogRmV0Y2hSZXNwb25zZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRmV0Y2hSZXNwb25z
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMzE1MTg0MjM1Nzc0NUUwMDEx
NUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEz
MTUxODYyMzU3NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEzMUYzQjExRjk1NTI4MTAwNTk5OTVBIC8qIEpTRmV0Y2hFdmVudEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoRXZlbnRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNCNDFGOTU1QkMzMDA1OTk5
NUEgLyogRXh0ZW5kYWJsZUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxMzFGM0I1MUY5NTVCQzUwMDU5OTk1QSAvKiBFeHRlbmRhYmxlRXZlbnRJbml0LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc0MDIsNiArNzQwNCw4IEBACiAJCTQxQjJBNjI1MUVGMUJGNjAw
MDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkF1
ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCNDU5
REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjkxMzc2MjM1ODREMEUwMDI1QkZBMyAvKiBN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFCOTEzNzgyMzU4NEQwRjAwMjVCRkEzIC8qIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja0F1ZGlvRGVz
dGluYXRpb25Db2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkYyMDQw
MjJCOTQ3MTYwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlYWx0aW1lVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFC
RjIwNDIyMkI5NDcxNzAwMDRGODEyIC8qIFJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk5MDMsNiArMTk5MDcsOCBAQAogCQkJCTA3N0I2NDE1MUI5NUY3
MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3N0I2NDEw
MUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5jcHAgKi8s
CiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNb2NrLmggKi8sCisJCQkJNDFCOTEzNzgyMzU4NEQwRjAwMjVCRkEzIC8qIE1vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwICovLAorCQkJCTQxQjkxMzc2MjM1ODREMEUwMDI1QkZBMyAvKiBN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8sCiAJCQkJNDEzQ0NENDgyMERFMDEzQzAwNjVB
MjFBIC8qIE1vY2tNZWRpYURldmljZS5oICovLAogCQkJCTA3RDZBNEYxMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJMDdENkE0RjIxQkVENUY4
ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmggKi8sCkBAIC0yNTg4MSw2ICsy
NTg4Nyw4IEBACiAJCUNENjY5RDY1MUQyMzJERjQwMDREMTg2NiAvKiBjb2NvYSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDEzMTUxODQyMzU3NzQ1RTAw
MTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAgKi8sCisJCQkJNDEzMTUxODYyMzU3
NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovLAogCQkJCTQxN0Y3QUVE
MjEzOUJGNjUwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EuaCAqLywKIAkJCQk0
MTdGN0FFQTIxMzlCRjY0MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tICov
LAogCQkJCTQxN0Y3QUVCMjEzOUJGNjQwMEZCQTdFQyAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuY3Bw
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudExvYWRlci5jcHAKaW5kZXggZjNjMTIw
NDhmOThkZWFkNmRmMDRiN2E0NDA3Nzk2MTc4Y2ZhNGM2Ni4uOTY4YTQxMjg0ZGNhMDU4ZTFjNzA5
NDNmYTQxYjcwYTg1MTM1NjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Rv
Y3VtZW50TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRMb2Fk
ZXIuY3BwCkBAIC0xNzIsMTAgKzE3MiwxMyBAQCBEb2N1bWVudExvYWRlcjo6fkRvY3VtZW50TG9h
ZGVyKCkKIAogICAgIG1fY2FjaGVkUmVzb3VyY2VMb2FkZXItPmNsZWFyRG9jdW1lbnRMb2FkZXIo
KTsKICAgICBjbGVhck1haW5SZXNvdXJjZSgpOworCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VS
KQogICAgIGlmIChtX3RlbXBvcmFyeVNlcnZpY2VXb3JrZXJDbGllbnQpIHsKICAgICAgICAgQVNT
RVJUKHRlbXBvcmFyeUlkZW50aWZpZXJUb0xvYWRlck1hcCgpLmNvbnRhaW5zKCptX3RlbXBvcmFy
eVNlcnZpY2VXb3JrZXJDbGllbnQpKTsKICAgICAgICAgdGVtcG9yYXJ5SWRlbnRpZmllclRvTG9h
ZGVyTWFwKCkucmVtb3ZlKCptX3RlbXBvcmFyeVNlcnZpY2VXb3JrZXJDbGllbnQpOwogICAgIH0K
KyNlbmRpZgogfQogCiBSZWZQdHI8U2hhcmVkQnVmZmVyPiBEb2N1bWVudExvYWRlcjo6bWFpblJl
c291cmNlRGF0YSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
YjNkODg1ZTViMmQ3ZmQ1YzVjOGNiNzk5MmU0Y2ZhZTVmY2Q4YmMwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNv
Y29hLmNwcApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQga1JlbmRlckJ1ZmZlclNpemUgPSAxMjg7
CisKK0NyZWF0ZUF1ZGlvRGVzdGluYXRpb25Db2NvYU92ZXJyaWRlIEF1ZGlvRGVzdGluYXRpb25D
b2NvYTo6Y3JlYXRlT3ZlcnJpZGUgPSBudWxscHRyOworCitzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9E
ZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2Fs
bGJhY2ssIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5z
aWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICAv
LyBGSVhNRTogbWFrZSB1c2Ugb2YgaW5wdXREZXZpY2VJZCBhcyBhcHByb3ByaWF0ZS4KKworICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dC4KKyAgICBp
ZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQorICAgICAgICBXVEZMb2dBbHdheXMoIkF1ZGlvRGVz
dGluYXRpb246OmNyZWF0ZSgldSwgJXUsICVmKSAtIHVuaGFuZGxlZCBpbnB1dCBjaGFubmVscyIs
IG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0
ZSk7CisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG11bHRpLWNoYW5uZWwgKD4gc3Rl
cmVvKSBvdXRwdXQuCisgICAgaWYgKG51bWJlck9mT3V0cHV0Q2hhbm5lbHMgIT0gMikKKyAgICAg
ICAgV1RGTG9nQWx3YXlzKCJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1
bmhhbmRsZWQgb3V0cHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJP
Zk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKKworICAgIGlmIChBdWRpb0Rlc3RpbmF0aW9u
Q29jb2E6OmNyZWF0ZU92ZXJyaWRlKQorICAgICAgICByZXR1cm4gQXVkaW9EZXN0aW5hdGlvbkNv
Y29hOjpjcmVhdGVPdmVycmlkZShjYWxsYmFjaywgc2FtcGxlUmF0ZSk7CisKKyAgICBhdXRvIGRl
c3RpbmF0aW9uID0gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uQ29jb2E+KGNhbGxiYWNrLCBz
YW1wbGVSYXRlKTsKKyAgICBkZXN0aW5hdGlvbi0+Y29uZmlndXJlKCk7CisgICAgcmV0dXJuIGRl
c3RpbmF0aW9uOworfQorCitmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJh
dGUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVS
YXRlKCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4Q2hhbm5lbENv
dW50KCkKK3sKKyAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRlZmF1bHQgYXVkaW8gaGFyZHdhcmUg
ZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgorICAgIC8vIG9mIGNoYW5uZWxzIG9m
IHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcgRklYTUUgaW4gY3JlYXRlKCkuCisg
ICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29kZSB3aGljaCBhc3N1bWVzIHN0ZXJl
byB3aGljaCBjYW4gYmUgdXBncmFkZWQuCisgICAgcmV0dXJuIDA7Cit9CisKK0F1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6QXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJh
Y2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBtX291dHB1dFVuaXQoMCkKKyAgICAsIG1fY2Fs
bGJhY2soY2FsbGJhY2spCisgICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtS
ZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAsIG1fc3BhcmVC
dXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgdHJ1ZSkucmVsZWFzZU5v
bk51bGwoKSkKKyAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQoreworICAgIGNvbmZpZ3Vy
ZSgpOworfQorCitBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6On5BdWRpb0Rlc3RpbmF0aW9uQ29jb2Eo
KQoreworICAgIGlmIChtX291dHB1dFVuaXQpCisgICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFu
Y2VEaXNwb3NlKG1fb3V0cHV0VW5pdCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkNvY29h
OjpzdGFydCgpCit7CisgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpzdGFy
dCIpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0
VW5pdCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwor
fQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCgpCit7CisgICAgTE9HKE1lZGlh
LCAiQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpzdG9wIik7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0g
QXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOworCisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkNv
Y29hOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCit7CisgICAgaWYgKG1faXNQbGF5aW5n
ID09IGlzUGxheWluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1BsYXlpbmcgPSBpc1Bs
YXlpbmc7CisgICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKK30KKwordm9pZCBB
dWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbihBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbUZvcm1hdCwgZmxvYXQgc2FtcGxlUmF0ZSkK
K3sKKyAgICBjb25zdCBpbnQgYnl0ZXNQZXJGbG9hdCA9IHNpemVvZihGbG9hdDMyKTsKKyAgICBj
b25zdCBpbnQgYml0c1BlckJ5dGUgPSA4OworICAgIHN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9
IHNhbXBsZVJhdGU7CisgICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExp
bmVhclBDTTsKKyAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0Rmxh
Z3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwor
ICAgIHN0cmVhbUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OworICAgIHN0
cmVhbUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBzdHJlYW1Gb3JtYXQubUJ5dGVz
UGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OworICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZSA9IDI7CisgICAgc3RyZWFtRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRl
ICogYnl0ZXNQZXJGbG9hdDsKK30KKworc3RhdGljIHZvaWQgYXNzaWduQXVkaW9CdWZmZXJzVG9C
dXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzJiBidXMsIFVJbnQzMiBudW1iZXJPZkJ1
ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZyYW1lT2Zmc2V0LCBVSW50MzIg
ZnJhbWVzVGhpc1RpbWUpCit7CisgICAgZm9yIChVSW50MzIgaSA9IDA7IGkgPCBudW1iZXJPZkJ1
ZmZlcnM7ICsraSkgeworICAgICAgICBVSW50MzIgYnl0ZXNQZXJGcmFtZSA9IGJ1ZmZlcnNbaV0u
bURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOworICAgICAgICBVSW50MzIgYnl0ZU9mZnNl
dCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKKyAgICAgICAgYXV0byogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcnNb
aV0ubURhdGEpICsgYnl0ZU9mZnNldCk7CisgICAgICAgIGJ1cy5zZXRDaGFubmVsTWVtb3J5KGks
IG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOworICAgIH0KK30KKworLy8gUHVsbHMgb24gb3VyIHBy
b3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBzdHJlYW0uCitPU1N0YXR1cyBBdWRpb0Rlc3Rp
bmF0aW9uQ29jb2E6OnJlbmRlcihVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlz
dCogaW9EYXRhKQoreworICAgIGF1dG8qIGJ1ZmZlcnMgPSBpb0RhdGEtPm1CdWZmZXJzOworICAg
IFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMgPSBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOworICAgIFVJ
bnQzMiBmcmFtZXNSZW1haW5pbmcgPSBudW1iZXJPZkZyYW1lczsKKyAgICBVSW50MzIgZnJhbWVP
ZmZzZXQgPSAwOworICAgIHdoaWxlIChmcmFtZXNSZW1haW5pbmcgPiAwKSB7CisgICAgICAgIGlm
IChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSkgeworICAgICAgICAgICAgQVNT
RVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1lKTsKKyAgICAgICAgICAgIFVJ
bnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4obV9lbmRTcGFyZUZyYW1lIC0g
bV9zdGFydFNwYXJlRnJhbWUsIG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgICAgIGFzc2lnbkF1
ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsIG1fcmVuZGVyQnVzLmdldCgpLCBudW1iZXJPZkJ1ZmZl
cnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNldCwgZnJhbWVzVGhpc1RpbWUpOworICAgICAg
ICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFyZUJ1cy5nZXQoKSwgbV9zdGFy
dFNwYXJlRnJhbWUsIG1fZW5kU3BhcmVGcmFtZSk7CisgICAgICAgICAgICBwcm9jZXNzQnVzQWZ0
ZXJSZW5kZXIobV9yZW5kZXJCdXMuZ2V0KCksIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAgICAgICAg
IGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgZnJhbWVzUmVtYWlu
aW5nIC09IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgKz0g
ZnJhbWVzVGhpc1RpbWU7CisgICAgICAgIH0KKworICAgICAgICBVSW50MzIgZnJhbWVzVGhpc1Rp
bWUgPSBzdGQ6Om1pbjxVSW50MzI+KGtSZW5kZXJCdWZmZXJTaXplLCBmcmFtZXNSZW1haW5pbmcp
OworICAgICAgICBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhidWZmZXJzLCBtX3JlbmRlckJ1cy5n
ZXQoKSwgbnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1l
c1RoaXNUaW1lKTsKKworICAgICAgICBpZiAoIWZyYW1lc1RoaXNUaW1lKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGlmIChmcmFtZXNUaGlzVGltZSA8IGtSZW5kZXJCdWZmZXJTaXplKSB7
CisgICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigwLCBtX3NwYXJlQnVzLnB0cigpLCBrUmVu
ZGVyQnVmZmVyU2l6ZSk7CisgICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5nZSht
X3NwYXJlQnVzLmdldCgpLCAwLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBtX3N0YXJ0
U3BhcmVGcmFtZSA9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICAgICAgbV9lbmRTcGFyZUZyYW1l
ID0ga1JlbmRlckJ1ZmZlclNpemU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jYWxs
YmFjay5yZW5kZXIoMCwgbV9yZW5kZXJCdXMucHRyKCksIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAg
ICAgcHJvY2Vzc0J1c0FmdGVyUmVuZGVyKG1fcmVuZGVyQnVzLmdldCgpLCBmcmFtZXNUaGlzVGlt
ZSk7CisgICAgICAgIGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOworICAgICAgICBmcmFt
ZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5vRXJy
OworfQorCisvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjaworT1NTdGF0dXMgQXVkaW9EZXN0
aW5hdGlvbkNvY29hOjppbnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFj
dGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgLypidXNOdW1iZXIqLywg
VUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAgICBh
dXRvKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0PEF1ZGlvRGVzdGluYXRpb25Db2NvYSo+KHVz
ZXJEYXRhKTsKKyAgICByZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihudW1iZXJPZkZyYW1lcywg
aW9EYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vY29jb2EvQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmU2OTQ3ZWI4MjIz
OGZkZjY1MjFkNjU3N2UzODllZDY4ZjhhMjI0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0w
LDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCisjaW5jbHVkZSA8QXVkaW9V
bml0L0F1ZGlvVW5pdC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKKwordXNpbmcgQ3JlYXRlQXVkaW9EZXN0aW5hdGlv
bkNvY29hT3ZlcnJpZGUgPSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4oKikoQXVk
aW9JT0NhbGxiYWNrJiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisKKy8vIEFuIEF1ZGlvRGVzdGluYXRp
b24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0CitjbGFzcyBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2EgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CitwdWJsaWM6Cisg
ICAgQXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJh
dGUpOworICAgIHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Db2NvYSgpOworCisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIENyZWF0ZUF1ZGlvRGVzdGluYXRpb25Db2NvYU92ZXJyaWRlIGNyZWF0
ZU92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7CisK
KyAgICBib29sIGlzUGxheWluZygpIGZpbmFsIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9CisgICAg
ZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQor
ICAgIEF1ZGlvVW5pdCYgb3V0cHV0VW5pdCgpIHsgcmV0dXJuIG1fb3V0cHV0VW5pdDsgfQorICAg
IAorICAgIC8vIERlZmF1bHRPdXRwdXRVbml0IGNhbGxiYWNrCisgICAgc3RhdGljIE9TU3RhdHVz
IGlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZy
YW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOworCisgICAgdm9pZCBzZXRBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24oQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgZmxvYXQgc2Ft
cGxlUmF0ZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOworICAgIHZv
aWQgc3RvcCgpIG92ZXJyaWRlOworCisgICAgZnJpZW5kIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0Rl
c3RpbmF0aW9uPiBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiwgY29u
c3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBmbG9hdCk7CisgICAgCisgICAgdm9pZCBj
b25maWd1cmUoKTsKKyAgICB2b2lkIHByb2Nlc3NCdXNBZnRlclJlbmRlcihBdWRpb0J1cyYsIFVJ
bnQzMiBudW1iZXJPZkZyYW1lcyk7CisKKyAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJl
ck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7CisKKyAgICBBdWRpb1VuaXQgbV9v
dXRwdXRVbml0OworICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9jYWxsYmFjazsKKyAgICBSZWY8QXVk
aW9CdXM+IG1fcmVuZGVyQnVzOworICAgIFJlZjxBdWRpb0J1cz4gbV9zcGFyZUJ1czsKKworICAg
IGZsb2F0IG1fc2FtcGxlUmF0ZTsKKyAgICBib29sIG1faXNQbGF5aW5nIHsgZmFsc2UgfTsKKwor
ICAgIHVuc2lnbmVkIG1fc3RhcnRTcGFyZUZyYW1lIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZW5k
U3BhcmVGcmFtZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5jcHAKaW5kZXggNGJkZTdlNDFlMmI2
NDM3Y2QwZmY3MjVlNGQwNzlkNjhmODllN2RjNS4uMzkyOTUyMzZlMzAzZTBjMTg3MDVmZmJlZTU0
NmI0ODhjNTJhYmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
aW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmNwcApAQCAtMzEsMjUgKzMxLDE0IEBACiAK
ICNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQogCi0jaW5jbHVk
ZSAiQXVkaW9EZXN0aW5hdGlvbklPUy5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb25Db2Nv
YS5oIgogCi0jaW5jbHVkZSAiQXVkaW9JT0NhbGxiYWNrLmgiCiAjaW5jbHVkZSAiQXVkaW9TZXNz
aW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgPEF1ZGlv
VG9vbGJveC9BdWRpb1NlcnZpY2VzLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9BdWRpb1Rv
b2xib3hTUEkuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgogCiBTT0ZUX0xJTktf
RlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29t
cG9uZW50RmluZE5leHQsIEF1ZGlvQ29tcG9uZW50LCAoQXVkaW9Db21wb25lbnQgaW5Db21wb25l
bnQsIGNvbnN0IEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gKmluRGVzYyksIChpbkNvbXBvbmVu
dCwgaW5EZXNjKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5zdGFu
Y2VEaXNwb3NlLCBPU1N0YXR1cywgKEF1ZGlvQ29tcG9uZW50SW5zdGFuY2UgaW5JbnN0YW5jZSks
IChpbkluc3RhbmNlKSkKIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvQ29tcG9uZW50SW5z
dGFuY2VOZXcsIE9TU3RhdHVzLCAoQXVkaW9Db21wb25lbnQgaW5Db21wb25lbnQsIEF1ZGlvQ29t
cG9uZW50SW5zdGFuY2UgKm91dEluc3RhbmNlKSwgKGluQ29tcG9uZW50LCBvdXRJbnN0YW5jZSkp
Ci1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb091dHB1dFVuaXRTdGFydCwgT1NTdGF0dXMs
IChBdWRpb1VuaXQgY2kpLCAoY2kpKQotU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9PdXRw
dXRVbml0U3RvcCwgT1NTdGF0dXMsIChBdWRpb1VuaXQgY2kpLCAoY2kpKQogU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgQXVkaW9Vbml0QWRkUHJvcGVydHlMaXN0ZW5lciwgT1NTdGF0dXMsIChBdWRp
b1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlEIGluSUQsIEF1ZGlvVW5pdFByb3BlcnR5
TGlzdGVuZXJQcm9jIGluUHJvYywgdm9pZCAqaW5Qcm9jVXNlckRhdGEpLCAoaW5Vbml0LCBpbklE
LCBpblByb2MsIGluUHJvY1VzZXJEYXRhKSkKIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlv
VW5pdEdldFByb3BlcnR5LCBPU1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvVW5pdFBy
b3BlcnR5SUQgaW5JRCwgQXVkaW9Vbml0U2NvcGUgaW5TY29wZSwgQXVkaW9Vbml0RWxlbWVudCBp
bkVsZW1lbnQsIHZvaWQgKm91dERhdGEsIFVJbnQzMiAqaW9EYXRhU2l6ZSksIChpblVuaXQsIGlu
SUQsIGluU2NvcGUsIGluRWxlbWVudCwgb3V0RGF0YSwgaW9EYXRhU2l6ZSkpCiBTT0ZUX0xJTkso
QXVkaW9Ub29sYm94LCBBdWRpb1VuaXRJbml0aWFsaXplLCBPU1N0YXR1cywgKEF1ZGlvVW5pdCBp
blVuaXQpLCAoaW5Vbml0KSkKQEAgLTU3LDU1ICs0Niw5IEBAIFNPRlRfTElOSyhBdWRpb1Rvb2xi
b3gsIEF1ZGlvVW5pdFNldFByb3BlcnR5LCBPU1N0YXR1cywgKEF1ZGlvVW5pdCBpblVuaXQsIEF1
ZGlvCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXpl
ID0gMTI4OwotY29uc3QgaW50IGtQcmVmZXJyZWRCdWZmZXJTaXplID0gMjU2OwotCi10eXBlZGVm
IEhhc2hTZXQ8QXVkaW9EZXN0aW5hdGlvbklPUyo+IEF1ZGlvRGVzdGluYXRpb25TZXQ7Ci1zdGF0
aWMgQXVkaW9EZXN0aW5hdGlvblNldCYgYXVkaW9EZXN0aW5hdGlvbnMoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxBdWRpb0Rlc3RpbmF0aW9uU2V0PiBhdWRpb0Rlc3RpbmF0aW9uU2V0
OwotICAgIHJldHVybiBhdWRpb0Rlc3RpbmF0aW9uU2V0OwotfQotCi0vLyBGYWN0b3J5IG1ldGhv
ZDogaU9TLWltcGxlbWVudGF0aW9uCi1zdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4g
QXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGNvbnN0
IFN0cmluZyYsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5zaWduZWQgbnVtYmVy
T2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKK3ZvaWQgQXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpjb25maWd1cmUoKQogewotICAgIC8vIEZJWE1FOiBtYWtlIHVzZSBvZiBpbnB1dERl
dmljZUlkIGFzIGFwcHJvcHJpYXRlLgotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBs
b2NhbC9saXZlIGF1ZGlvIGlucHV0LgotICAgIGlmIChudW1iZXJPZklucHV0Q2hhbm5lbHMpCi0g
ICAgICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgldSwgJXUsICVmKSAt
IHVuaGFuZGxlZCBpbnB1dCBjaGFubmVscyIsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVy
T2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0ZSk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG11bHRpLWNoYW5uZWwgKD4gc3RlcmVvKSBvdXRwdXQuCi0gICAgaWYgKG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMgIT0gMikKLSAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlv
bjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIG91dHB1dCBjaGFubmVscyIsIG51bWJl
ck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgc2FtcGxlUmF0ZSk7Ci0K
LSAgICByZXR1cm4gbWFrZVVuaXF1ZTxBdWRpb0Rlc3RpbmF0aW9uSU9TPihjYWxsYmFjaywgc2Ft
cGxlUmF0ZSk7Ci19Ci0KLWZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0
ZSgpCi17Ci0gICAgcmV0dXJuIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJh
dGUoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBBdWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291
bnQoKQotewotICAgIC8vIEZJWE1FOiBxdWVyeSB0aGUgZGVmYXVsdCBhdWRpbyBoYXJkd2FyZSBk
ZXZpY2UgdG8gcmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyCi0gICAgLy8gb2YgY2hhbm5lbHMgb2Yg
dGhlIGRldmljZS4gQWxzbyBzZWUgY29ycmVzcG9uZGluZyBGSVhNRSBpbiBjcmVhdGUoKS4KLSAg
ICAvLyBUaGVyZSBpcyBhIHNtYWxsIGFtb3VudCBvZiBjb2RlIHdoaWNoIGFzc3VtZXMgc3RlcmVv
IGluIEF1ZGlvRGVzdGluYXRpb25JT1Mgd2hpY2gKLSAgICAvLyBjYW4gYmUgdXBncmFkZWQuCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLUF1ZGlvRGVzdGluYXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25J
T1MoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZG91YmxlIHNhbXBsZVJhdGUpCi0gICAgOiBt
X291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3JlbmRl
ckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCBmYWxzZSkpCi0gICAg
LCBtX3NwYXJlQnVzKEF1ZGlvQnVzOjpjcmVhdGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIHRydWUp
KQotICAgICwgbV9zYW1wbGVSYXRlKHNhbXBsZVJhdGUpCi0gICAgLCBtX2lzUGxheWluZyhmYWxz
ZSkKLXsKLSAgICBhdWRpb0Rlc3RpbmF0aW9ucygpLmFkZCh0aGlzKTsKKyAgICBjb25zdCBpbnQg
a1ByZWZlcnJlZEJ1ZmZlclNpemUgPSAyNTY7CiAKICAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXpl
IERlZmF1bHRPdXRwdXRVbml0CiAgICAgQXVkaW9Db21wb25lbnQgY29tcDsKQEAgLTEyMCwxNTYg
KzYzLDQ0IEBAIEF1ZGlvRGVzdGluYXRpb25JT1M6OkF1ZGlvRGVzdGluYXRpb25JT1MoQXVkaW9J
T0NhbGxiYWNrJiBjYWxsYmFjaywgZG91YmxlIHNhbXBsCiAKICAgICBBU1NFUlQoY29tcCk7CiAK
LSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZt
X291dHB1dFVuaXQpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5zdGFu
Y2VOZXcoY29tcCwgJm91dHB1dFVuaXQoKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAg
VUludDMyIGZsYWcgPSAxOwotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0
cHV0VW5pdCwgCi0gICAgICAgIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywgCi0g
ICAgICAgIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIAorICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNl
dFByb3BlcnR5KG91dHB1dFVuaXQoKSwKKyAgICAgICAga0F1ZGlvT3V0cHV0VW5pdFByb3BlcnR5
X0VuYWJsZUlPLAorICAgICAgICBrQXVkaW9Vbml0U2NvcGVfT3V0cHV0LAogICAgICAgICAwLAot
ICAgICAgICAmZmxhZywgCisgICAgICAgICZmbGFnLAogICAgICAgICBzaXplb2YoZmxhZykpOwog
ICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEFkZFByb3BlcnR5
TGlzdGVuZXIobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfTWF4aW11bUZyYW1lc1Bl
clNsaWNlLCBmcmFtZVNpemVDaGFuZ2VkUHJvYywgdGhpcyk7CisgICAgcmVzdWx0ID0gQXVkaW9V
bml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKLQotICAg
IHJlc3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxpemUobV9vdXRwdXRVbml0KTsKLSAgICBBU1NFUlQo
IXJlc3VsdCk7Ci0KLSAgICBjb25maWd1cmUoKTsKLX0KLQotQXVkaW9EZXN0aW5hdGlvbklPUzo6
fkF1ZGlvRGVzdGluYXRpb25JT1MoKQotewotICAgIGF1ZGlvRGVzdGluYXRpb25zKCkucmVtb3Zl
KHRoaXMpOwotCi0gICAgaWYgKG1fb3V0cHV0VW5pdCkKLSAgICAgICAgQXVkaW9Db21wb25lbnRJ
bnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9u
SU9TOjpjb25maWd1cmUoKQotewogICAgIC8vIFNldCByZW5kZXIgY2FsbGJhY2sKICAgICBBVVJl
bmRlckNhbGxiYWNrU3RydWN0IGlucHV0OwogICAgIGlucHV0LmlucHV0UHJvYyA9IGlucHV0UHJv
YzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZDb24gPSB0aGlzOwotICAgIE9TU3RhdHVzIHJlc3Vs
dCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5
X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZpbnB1dCwgc2l6
ZW9mKGlucHV0KSk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkob3V0cHV0VW5p
dCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29w
ZV9JbnB1dCwgMCwgJmlucHV0LCBzaXplb2YoaW5wdXQpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7
CiAKICAgICAvLyBTZXQgc3RyZWFtIGZvcm1hdAogICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiBzdHJlYW1Gb3JtYXQ7CiAKICAgICBVSW50MzIgc2l6ZSA9IHNpemVvZihBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24pOwotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEdldFByb3BlcnR5KG1f
b3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNj
b3BlX091dHB1dCwgMCwgKHZvaWQqKSZzdHJlYW1Gb3JtYXQsICZzaXplKTsKKyAgICByZXN1bHQg
PSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9T
dHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIDAsICh2b2lkKikmc3RyZWFtRm9y
bWF0LCAmc2l6ZSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCi0gICAgY29uc3QgaW50IGJ5dGVz
UGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgY29uc3QgaW50IGJpdHNQZXJCeXRlID0g
ODsKLSAgICBzdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3Ry
ZWFtRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1G
b3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8
IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQnl0
ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OwotICAgIHN0cmVhbUZvcm1hdC5tRnJhbWVzUGVy
UGFja2V0ID0gMTsKLSAgICBzdHJlYW1Gb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZs
b2F0OwotICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IDI7Ci0gICAgc3RyZWFt
Rm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKyAg
ICBzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24oc3RyZWFtRm9ybWF0LCBzYW1wbGVSYXRl
KCkpOwogCi0gICAgcmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkobV9vdXRwdXRVbml0LCBr
QXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAs
ICh2b2lkKikmc3RyZWFtRm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
KSk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVk
aW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICh2
b2lkKikmc3RyZWFtRm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKSk7
CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9u
KCkuc2V0UHJlZmVycmVkQnVmZmVyU2l6ZShrUHJlZmVycmVkQnVmZmVyU2l6ZSk7CiB9CiAKLXZv
aWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RhcnQoKQotewotICAgIExPRyhNZWRpYSwgIkF1ZGlv
RGVzdGluYXRpb25JT1M6OnN0YXJ0Iik7Ci0KLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091
dHB1dFVuaXRTdGFydChtX291dHB1dFVuaXQpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICBz
ZXRJc1BsYXlpbmcodHJ1ZSk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCgp
Ci17Ci0gICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbklPUzo6c3RvcCIpOwotCi0gICAg
T1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQpOwotICAg
IGlmICghcmVzdWx0KQotICAgICAgICBzZXRJc1BsYXlpbmcoZmFsc2UpOwotfQotCi1zdGF0aWMg
dm9pZCBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhBdWRpb0J1ZmZlciogYnVmZmVycywgQXVkaW9C
dXMmIGJ1cywgVUludDMyIG51bWJlck9mQnVmZmVycywgVUludDMyIG51bWJlck9mRnJhbWVzLCBV
SW50MzIgZnJhbWVPZmZzZXQsIFVJbnQzMiBmcmFtZXNUaGlzVGltZSkKLXsKLSAgICBmb3IgKFVJ
bnQzMiBpID0gMDsgaSA8IG51bWJlck9mQnVmZmVyczsgKytpKSB7Ci0gICAgICAgIFVJbnQzMiBi
eXRlc1BlckZyYW1lID0gYnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gbnVtYmVyT2ZGcmFtZXM7
Ci0gICAgICAgIFVJbnQzMiBieXRlT2Zmc2V0ID0gZnJhbWVPZmZzZXQgKiBieXRlc1BlckZyYW1l
OwotICAgICAgICBmbG9hdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJ1ZmZlcnNbaV0ubURhdGEpICsgYnl0ZU9mZnNldCk7Ci0gICAg
ICAgIGJ1cy5zZXRDaGFubmVsTWVtb3J5KGksIG1lbW9yeSwgZnJhbWVzVGhpc1RpbWUpOwotICAg
IH0KLX0KLQotLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBhdWRpbyBz
dHJlYW0uCi1PU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpyZW5kZXIoVUludDMyIG51bWJl
ck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBdWRpb0J1ZmZlciog
YnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7Ci0gICAgVUludDMyIG51bWJlck9mQnVmZmVycyA9
IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7Ci0gICAgVUludDMyIGZyYW1lc1JlbWFpbmluZyA9IG51
bWJlck9mRnJhbWVzOwotICAgIFVJbnQzMiBmcmFtZU9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKGZy
YW1lc1JlbWFpbmluZyA+IDApIHsKLSAgICAgICAgaWYgKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9l
bmRTcGFyZUZyYW1lKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zdGFydFNwYXJlRnJhbWUgPCBt
X2VuZFNwYXJlRnJhbWUpOwotICAgICAgICAgICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0gc3Rk
OjptaW48VUludDMyPihtX2VuZFNwYXJlRnJhbWUgLSBtX3N0YXJ0U3BhcmVGcmFtZSwgbnVtYmVy
T2ZGcmFtZXMpOwotICAgICAgICAgICAgYXNzaWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywg
Km1fcmVuZGVyQnVzLCBudW1iZXJPZkJ1ZmZlcnMsIG51bWJlck9mRnJhbWVzLCBmcmFtZU9mZnNl
dCwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFu
Z2UoKm1fc3BhcmVCdXMsIG1fc3RhcnRTcGFyZUZyYW1lLCBtX2VuZFNwYXJlRnJhbWUpOwotICAg
ICAgICAgICAgZnJhbWVPZmZzZXQgKz0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBmcmFt
ZXNSZW1haW5pbmcgLT0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBtX3N0YXJ0U3BhcmVG
cmFtZSArPSBmcmFtZXNUaGlzVGltZTsKLSAgICAgICAgfQotCi0gICAgICAgIFVJbnQzMiBmcmFt
ZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4oa1JlbmRlckJ1ZmZlclNpemUsIGZyYW1lc1Jl
bWFpbmluZyk7Ci0gICAgICAgIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsICptX3Jl
bmRlckJ1cywgbnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZy
YW1lc1RoaXNUaW1lKTsKLQotICAgICAgICBpZiAoIWZyYW1lc1RoaXNUaW1lKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmIChmcmFtZXNUaGlzVGltZSA8IGtSZW5kZXJCdWZmZXJTaXpl
KSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigwLCBtX3NwYXJlQnVzLmdldCgpLCBr
UmVuZGVyQnVmZmVyU2l6ZSk7Ci0gICAgICAgICAgICBtX3JlbmRlckJ1cy0+Y29weUZyb21SYW5n
ZSgqbV9zcGFyZUJ1cywgMCwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICAgICAgbV9zdGFydFNw
YXJlRnJhbWUgPSBmcmFtZXNUaGlzVGltZTsKLSAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9
IGtSZW5kZXJCdWZmZXJTaXplOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY2FsbGJh
Y2sucmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdldCgpLCBmcmFtZXNUaGlzVGltZSk7Ci0gICAgICAg
IGZyYW1lT2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICBmcmFtZXNSZW1haW5pbmcg
LT0gZnJhbWVzVGhpc1RpbWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5vRXJyOwotfQotCi12b2lk
IEF1ZGlvRGVzdGluYXRpb25JT1M6OnNldElzUGxheWluZyhib29sIGlzUGxheWluZykKLXsKLSAg
ICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBtX2NhbGxiYWNrLmlzUGxheWluZ0RpZENoYW5n
ZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjawotT1NTdGF0dXMgQXVkaW9E
ZXN0aW5hdGlvbklPUzo6aW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJB
Y3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8s
IFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAg
QXVkaW9EZXN0aW5hdGlvbklPUyogYXVkaW9PdXRwdXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3Rp
bmF0aW9uSU9TKj4odXNlckRhdGEpOwotICAgIHJldHVybiBhdWRpb091dHB1dC0+cmVuZGVyKG51
bWJlck9mRnJhbWVzLCBpb0RhdGEpOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OmZy
YW1lU2l6ZUNoYW5nZWRQcm9jKHZvaWQgKmluUmVmQ29uLCBBdWRpb1VuaXQsIEF1ZGlvVW5pdFBy
b3BlcnR5SUQsIEF1ZGlvVW5pdFNjb3BlLCBBdWRpb1VuaXRFbGVtZW50KQordm9pZCBBdWRpb0Rl
c3RpbmF0aW9uQ29jb2E6OnByb2Nlc3NCdXNBZnRlclJlbmRlcihBdWRpb0J1cyYsIFVJbnQzMikK
IHsKLSAgICBBdWRpb0Rlc3RpbmF0aW9uSU9TKiBhdWRpb091dHB1dCA9IHN0YXRpY19jYXN0PEF1
ZGlvRGVzdGluYXRpb25JT1MqPihpblJlZkNvbik7Ci0gICAgVUludDMyIGJ1ZmZlclNpemUgPSAw
OwotICAgIFVJbnQzMiBkYXRhU2l6ZSA9IHNpemVvZihidWZmZXJTaXplKTsKLSAgICBBdWRpb1Vu
aXRHZXRQcm9wZXJ0eShhdWRpb091dHB1dC0+bV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVy
dHlfTWF4aW11bUZyYW1lc1BlclNsaWNlLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAodm9p
ZCopJmJ1ZmZlclNpemUsICZkYXRhU2l6ZSk7Ci0gICAgZnByaW50ZihzdGRlcnIsICI+Pj4+IGZy
YW1lU2l6ZUNoYW5nZWQgPSAlbHVcbiIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGJ1ZmZl
clNpemUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2OTIzOWZhY2I5NjYzOWMxNTllYmZlMTNlOWFlODAy
ZWRlMTZmNzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRGVzdGluYXRpb25JT1MuaAor
KysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvRGVzdGlu
YXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9Vbml0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFuIEF1ZGlvRGVzdGluYXRp
b24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQgQXVkaW9Vbml0Ci0KLWNsYXNzIEF1
ZGlvRGVzdGluYXRpb25JT1MgZmluYWwgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbklPUyhBdWRpb0lPQ2FsbGJhY2smLCBkb3VibGUgc2Ft
cGxlUmF0ZSk7Ci0gICAgdmlydHVhbCB+QXVkaW9EZXN0aW5hdGlvbklPUygpOwotCi1wcml2YXRl
OgotICAgIHZvaWQgY29uZmlndXJlKCk7Ci0KLSAgICAvLyBBdWRpb0Rlc3RpbmF0aW9uCi0gICAg
dm9pZCBzdGFydCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGJv
b2wgaXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0KLSAgICBmbG9h
dCBzYW1wbGVSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9Ci0K
LSAgICAvLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjawotICAgIHN0YXRpYyBPU1N0YXR1cyBp
bnB1dFByb2Modm9pZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29u
c3QgQXVkaW9UaW1lU3RhbXAqLCBVSW50MzIgYnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFt
ZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKTsKLSAgICBzdGF0aWMgdm9pZCBmcmFtZVNpemVD
aGFuZ2VkUHJvYyh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0IGluVW5pdCwgQXVkaW9Vbml0UHJv
cGVydHlJRCBpbklELCBBdWRpb1VuaXRTY29wZSBpblNjb3BlLCBBdWRpb1VuaXRFbGVtZW50IGlu
RWxlbWVudCk7Ci0KLSAgICBmcmllbmQgZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVT
YW1wbGVSYXRlKCk7Ci0KLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0gICAgdm9pZCBzZXRJc1BsYXlpbmcoYm9vbCk7
Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OwotICAgIEF1ZGlvSU9DYWxsYmFjayYgbV9j
YWxsYmFjazsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwotICAgIFJlZlB0cjxB
dWRpb0J1cz4gbV9zcGFyZUJ1czsKLSAgICB1bnNpZ25lZCBtX3N0YXJ0U3BhcmVGcmFtZSB7IDAg
fTsKLSAgICB1bnNpZ25lZCBtX2VuZFNwYXJlRnJhbWUgeyAwIH07Ci0KLSAgICBkb3VibGUgbV9z
YW1wbGVSYXRlOwotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3Bw
CmluZGV4IDlmZTY0YmFhYTQ3ODRmZWNkYWIzZDZkZGI1ZTI3ODM4MWUxZTA3MDAuLjdhMDFlYWUw
NmUyOTAzMmZkMDU5OGEwMGUzNGRlMjM1N2QyYTU3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKQEAg
LTI3LDY0ICsyNywxNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAotI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaWYgRU5B
QkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oTUFDKQogCi0jaWYgUExBVEZPUk0oTUFDKQotCi0j
aW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk1hYy5oIgotCi0jaW5jbHVkZSAiQXVkaW9JT0NhbGxi
YWNrLmgiCi0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJz
aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTWVkaWFTZXNz
aW9uTWFuYWdlci5oIgorI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiVmVjdG9yTWF0
aC5oIgogI2luY2x1ZGUgPENvcmVBdWRpby9BdWRpb0hhcmR3YXJlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY29uc3QgaW50IGtCdWZmZXJTaXplID0gMTI4OwotY29uc3QgZmxvYXQga0xv
d1RocmVzaG9sZCA9IC0xOwotY29uc3QgZmxvYXQga0hpZ2hUaHJlc2hvbGQgPSAxOwotCi0vLyBG
YWN0b3J5IG1ldGhvZDogTWFjLWltcGxlbWVudGF0aW9uCi1zdGQ6OnVuaXF1ZV9wdHI8QXVkaW9E
ZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2Fs
bGJhY2ssIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscywgdW5z
aWduZWQgbnVtYmVyT2ZPdXRwdXRDaGFubmVscywgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICAv
LyBGSVhNRTogbWFrZSB1c2Ugb2YgaW5wdXREZXZpY2VJZCBhcyBhcHByb3ByaWF0ZS4KLQotICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dC4KLSAgICBp
ZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQotICAgICAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3Rp
bmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgaW5wdXQgY2hhbm5lbHMiLCBu
dW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUp
OwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1jaGFubmVsICg+IHN0ZXJl
bykgb3V0cHV0LgotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzICE9IDIpCi0gICAgICAg
IExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgldSwgJXUsICVmKSAtIHVuaGFu
ZGxlZCBvdXRwdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8QXVkaW9E
ZXN0aW5hdGlvbk1hYz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOwotfQotCi1mbG9hdCBBdWRpb0Rl
c3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQotewotICAgIC8vIERldGVybWluZSB0aGUg
ZGVmYXVsdCBvdXRwdXQgZGV2aWNlJ3Mgc2FtcGxlLXJhdGUuCi0gICAgcmV0dXJuIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNhbXBsZVJhdGUoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBB
dWRpb0Rlc3RpbmF0aW9uOjptYXhDaGFubmVsQ291bnQoKQotewotICAgIC8vIEZJWE1FOiBxdWVy
eSB0aGUgZGVmYXVsdCBhdWRpbyBoYXJkd2FyZSBkZXZpY2UgdG8gcmV0dXJuIHRoZSBhY3R1YWwg
bnVtYmVyCi0gICAgLy8gb2YgY2hhbm5lbHMgb2YgdGhlIGRldmljZS4gQWxzbyBzZWUgY29ycmVz
cG9uZGluZyBGSVhNRSBpbiBjcmVhdGUoKS4KLSAgICAvLyBUaGVyZSBpcyBhIHNtYWxsIGFtb3Vu
dCBvZiBjb2RlIHdoaWNoIGFzc3VtZXMgc3RlcmVvIGluIEF1ZGlvRGVzdGluYXRpb25NYWMgd2hp
Y2gKLSAgICAvLyBjYW4gYmUgdXBncmFkZWQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUF1ZGlvRGVz
dGluYXRpb25NYWM6OkF1ZGlvRGVzdGluYXRpb25NYWMoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFj
aywgZmxvYXQgc2FtcGxlUmF0ZSkKLSAgICA6IG1fb3V0cHV0VW5pdCgwKQotICAgICwgbV9jYWxs
YmFjayhjYWxsYmFjaykKLSAgICAsIG1fcmVuZGVyQnVzKEF1ZGlvQnVzOjpjcmVhdGUoMiwga0J1
ZmZlclNpemUsIGZhbHNlKSkKLSAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQotICAgICwg
bV9pc1BsYXlpbmcoZmFsc2UpCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y29uZmlndXJl
KCkKIHsKICAgICAvLyBPcGVuIGFuZCBpbml0aWFsaXplIERlZmF1bHRPdXRwdXRVbml0CiAgICAg
QXVkaW9Db21wb25lbnQgY29tcDsKQEAgLTk5LDk5ICs1MiwzOSBAQCBBdWRpb0Rlc3RpbmF0aW9u
TWFjOjpBdWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0
IHNhbXBsZQogCiAgICAgQVNTRVJUKGNvbXApOwogCi0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVk
aW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmbV9vdXRwdXRVbml0KTsKKyAgICBPU1N0YXR1
cyByZXN1bHQgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZvdXRwdXRVbml0KCkp
OwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxp
emUobV9vdXRwdXRVbml0KTsKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG91dHB1
dFVuaXQoKSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCi0gICAgY29uZmlndXJlKCk7Ci19Ci0K
LUF1ZGlvRGVzdGluYXRpb25NYWM6On5BdWRpb0Rlc3RpbmF0aW9uTWFjKCkKLXsKLSAgICBpZiAo
bV9vdXRwdXRVbml0KQotICAgICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX291
dHB1dFVuaXQpOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OmNvbmZpZ3VyZSgpCi17
CiAgICAgLy8gU2V0IHJlbmRlciBjYWxsYmFjawogICAgIEFVUmVuZGVyQ2FsbGJhY2tTdHJ1Y3Qg
aW5wdXQ7CiAgICAgaW5wdXQuaW5wdXRQcm9jID0gaW5wdXRQcm9jOwogICAgIGlucHV0LmlucHV0
UHJvY1JlZkNvbiA9IHRoaXM7Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJv
cGVydHkobV9vdXRwdXRVbml0LCBrQXVkaW9Vbml0UHJvcGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ss
IGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisgICAg
cmVzdWx0ID0gQXVkaW9Vbml0U2V0UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJv
cGVydHlfU2V0UmVuZGVyQ2FsbGJhY2ssIGtBdWRpb1VuaXRTY29wZV9HbG9iYWwsIDAsICZpbnB1
dCwgc2l6ZW9mKGlucHV0KSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgLy8gU2V0IHN0
cmVhbSBmb3JtYXQKICAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gc3RyZWFtRm9ybWF0
OwotICAgIHN0cmVhbUZvcm1hdC5tU2FtcGxlUmF0ZSA9IG1fc2FtcGxlUmF0ZTsKLSAgICBzdHJl
YW1Gb3JtYXQubUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOwotICAgIHN0cmVhbUZv
cm1hdC5tRm9ybWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2VkIHwg
a0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJsZWF2ZWQ7Ci0gICAgc3RyZWFtRm9ybWF0Lm1CaXRz
UGVyQ2hhbm5lbCA9IDggKiBzaXplb2YoRmxvYXQzMik7Ci0gICAgc3RyZWFtRm9ybWF0Lm1DaGFu
bmVsc1BlckZyYW1lID0gMjsKLSAgICBzdHJlYW1Gb3JtYXQubUZyYW1lc1BlclBhY2tldCA9IDE7
Ci0gICAgc3RyZWFtRm9ybWF0Lm1CeXRlc1BlclBhY2tldCA9IHNpemVvZihGbG9hdDMyKTsKLSAg
ICBzdHJlYW1Gb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBzaXplb2YoRmxvYXQzMik7CisgICAgc2V0
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKHN0cmVhbUZvcm1hdCwgc2FtcGxlUmF0ZSgpKTsK
IAotICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlv
VW5pdFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9p
ZCopJnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOwor
ICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5p
dFByb3BlcnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCop
JnN0cmVhbUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOwogICAg
IEFTU0VSVCghcmVzdWx0KTsKIH0KIAotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzdGFydCgp
Ci17Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQobV9vdXRwdXRV
bml0KTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICBzZXRJc1BsYXlpbmcodHJ1ZSk7Ci19
Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RvcCgpCit2b2lkIEF1ZGlvRGVzdGluYXRp
b25Db2NvYTo6cHJvY2Vzc0J1c0FmdGVyUmVuZGVyKEF1ZGlvQnVzJiBidXMsIFVJbnQzMiBudW1i
ZXJPZkZyYW1lcykKIHsKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdG9w
KG1fb3V0cHV0VW5pdCk7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5n
KGZhbHNlKTsKLX0KLQotLy8gUHVsbHMgb24gb3VyIHByb3ZpZGVyIHRvIGdldCByZW5kZXJlZCBh
dWRpbyBzdHJlYW0uCi1PU1N0YXR1cyBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpyZW5kZXIoVUludDMy
IG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKLXsKLSAgICBBdWRpb0J1
ZmZlciogYnVmZmVycyA9IGlvRGF0YS0+bUJ1ZmZlcnM7Ci0gICAgbV9yZW5kZXJCdXMtPnNldENo
YW5uZWxNZW1vcnkoMCwgKGZsb2F0KilidWZmZXJzWzBdLm1EYXRhLCBudW1iZXJPZkZyYW1lcyk7
Ci0gICAgbV9yZW5kZXJCdXMtPnNldENoYW5uZWxNZW1vcnkoMSwgKGZsb2F0KilidWZmZXJzWzFd
Lm1EYXRhLCBudW1iZXJPZkZyYW1lcyk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCi0gICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9yZW5k
ZXJCdXMuZ2V0KCksIG51bWJlck9mRnJhbWVzKTsKLQorICAgIGNvbnN0IGZsb2F0IGtMb3dUaHJl
c2hvbGQgPSAtMTsKKyAgICBjb25zdCBmbG9hdCBrSGlnaFRocmVzaG9sZCA9IDE7CiAgICAgLy8g
Q2xhbXAgdmFsdWVzIGF0IDBkYiAoaS5lLiwgWy0xLjAsIDEuMF0pCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fcmVuZGVyQnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgewotICAg
ICAgICBBdWRpb0NoYW5uZWwqIGNoYW5uZWwgPSBtX3JlbmRlckJ1cy0+Y2hhbm5lbChpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVzLm51bWJlck9mQ2hhbm5lbHMoKTsgKytpKSB7
CisgICAgICAgIGF1dG8qIGNoYW5uZWwgPSBidXMuY2hhbm5lbChpKTsKICAgICAgICAgaWYgKCFj
aGFubmVsLT5pc1NpbGVudCgpKQogICAgICAgICAgICAgVmVjdG9yTWF0aDo6dmNsaXAoY2hhbm5l
bC0+ZGF0YSgpLCAxLCAma0xvd1RocmVzaG9sZCwgJmtIaWdoVGhyZXNob2xkLCBjaGFubmVsLT5t
dXRhYmxlRGF0YSgpLCAxLCBudW1iZXJPZkZyYW1lcyk7CiAgICAgfQotCi0gICAgcmV0dXJuIG5v
RXJyOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25NYWM6OnNldElzUGxheWluZyhib29sIGlz
UGxheWluZykKLXsKLSAgICBpZiAobV9pc1BsYXlpbmcgPT0gaXNQbGF5aW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2lzUGxheWluZyA9IGlzUGxheWluZzsKLSAgICBtX2NhbGxiYWNrLmlz
UGxheWluZ0RpZENoYW5nZSgpOwotfQotCi0vLyBEZWZhdWx0T3V0cHV0VW5pdCBjYWxsYmFjawot
T1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6aW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBB
dWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMy
IC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBp
b0RhdGEpCi17Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk1hYyogYXVkaW9PdXRwdXQgPSBzdGF0aWNf
Y2FzdDxBdWRpb0Rlc3RpbmF0aW9uTWFjKj4odXNlckRhdGEpOwotICAgIHJldHVybiBhdWRpb091
dHB1dC0+cmVuZGVyKG51bWJlck9mRnJhbWVzLCBpb0RhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KLSNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQorI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKE1BQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3Rp
bmF0aW9uTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0
aW5hdGlvbk1hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGIxMGFiZWJkNWRh
NDk1MWMwOWUxOTZmNGUzNzIwNDExZmJjNzY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0Rlc3RpbmF0aW9uTWFjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEF1ZGlvRGVz
dGluYXRpb25NYWNfaAotI2RlZmluZSBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gKLQotI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgotI2luY2x1ZGUgPEF1
ZGlvVW5pdC9BdWRpb1VuaXQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gQW4gQXVkaW9EZXN0aW5hdGlvbiB1c2luZyBDb3JlQXVkaW8ncyBk
ZWZhdWx0IG91dHB1dCBBdWRpb1VuaXQKLQotY2xhc3MgQXVkaW9EZXN0aW5hdGlvbk1hYyA6IHB1
YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKLXB1YmxpYzoKLSAgICBBdWRpb0Rlc3RpbmF0aW9uTWFj
KEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIHZpcnR1YWwgfkF1ZGlv
RGVzdGluYXRpb25NYWMoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNvbmZpZ3VyZSgpOwotCi0g
ICAgLy8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLSAgICBzdGF0aWMgT1NTdGF0dXMgaW5w
dXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0
IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIGJ1c051bWJlciwgVUludDMyIG51bWJlck9mRnJhbWVz
LCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0KLSAgICBPU1N0YXR1cyByZW5kZXIoVUludDMy
IG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSk7Ci0gICAgdm9pZCBzZXRJ
c1BsYXlpbmcoYm9vbCk7Ci0KLSAgICB2b2lkIHN0YXJ0KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dG9wKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc1BsYXlpbmcoKSBvdmVycmlkZSB7IHJldHVybiBt
X2lzUGxheWluZzsgfQotICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3NhbXBsZVJhdGU7IH0KLQotICAgIEF1ZGlvVW5pdCBtX291dHB1dFVuaXQ7Ci0gICAg
QXVkaW9JT0NhbGxiYWNrJiBtX2NhbGxiYWNrOwotICAgIFJlZlB0cjxBdWRpb0J1cz4gbV9yZW5k
ZXJCdXM7Ci0KLSAgICBmbG9hdCBtX3NhbXBsZVJhdGU7Ci0gICAgYm9vbCBtX2lzUGxheWluZzsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEF1ZGlvRGVzdGluYXRp
b25NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQyMDA5Y2RkMDYzNTY3MGNh
MWI4N2FhZDYwNGExYTUwOTAxNWVjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVk
ZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiV2ViQXVkaW9CdWZmZXJM
aXN0LmgiCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXplID0gMTI4OworCitN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hKEF1ZGlv
SU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpCisgICAgOiBBdWRpb0Rlc3Rp
bmF0aW9uQ29jb2EoY2FsbGJhY2ssIHNhbXBsZVJhdGUpCisgICAgLCBtX3dvcmtRdWV1ZShXb3Jr
UXVldWU6OmNyZWF0ZSgiTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSBSZW5kZXIgUXVldWUiKSkK
KyAgICAsIG1fdGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlzLCAmTW9ja0F1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6dGljaykKK3sKK30KKwordm9pZCBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29h
OjpzdGFydCgpCit7CisgICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhTZWNvbmRzIHsgbV9udW1i
ZXJPZkZyYW1lc1RvUHJvY2VzcyAvIHNhbXBsZVJhdGUoKSB9KTsKKyAgICBzZXRJc1BsYXlpbmco
dHJ1ZSk7Cit9CisKK3ZvaWQgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCgpCit7Cisg
ICAgbV90aW1lci5zdG9wKCk7CisgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKKworICAgIEJpbmFy
eVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFsmc2VtYXBo
b3JlXSB7CisgICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKKyAgICB9KTsKKyAgICBzZW1hcGhv
cmUud2FpdCgpOworfQorCit2b2lkIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnRpY2soKQor
eworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgc2FtcGxlUmF0ZSA9IHNhbXBsZVJh
dGUoKSwgbnVtYmVyT2ZGcmFtZXNUb1Byb2Nlc3MgPSBtX251bWJlck9mRnJhbWVzVG9Qcm9jZXNz
XSB7CisgICAgICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBzdHJlYW1Gb3JtYXQ7Cisg
ICAgICAgIHNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbihzdHJlYW1Gb3JtYXQsIHNhbXBs
ZVJhdGUpOworCisgICAgICAgIFdlYkF1ZGlvQnVmZmVyTGlzdCB3ZWJBdWRpb0J1ZmZlckxpc3Qg
eyBzdHJlYW1Gb3JtYXQsIG51bWJlck9mRnJhbWVzVG9Qcm9jZXNzIH07CisgICAgICAgIEF1ZGlv
RGVzdGluYXRpb25Db2NvYTo6aW5wdXRQcm9jKHRoaXMsIDAsIDAsIDAsIG51bWJlck9mRnJhbWVz
VG9Qcm9jZXNzLCB3ZWJBdWRpb0J1ZmZlckxpc3QubGlzdCgpKTsKKyAgICB9KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25D
b2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrQXVkaW9EZXN0aW5hdGlv
bkNvY29hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWNkNGQ5MDlkMmM3NDM2MDVmMmExZTAzMjNhZDkzM2ZkNTI5
Y2I2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKENPQ09BKQor
CisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbkNvY29hLmgiCisjaW5jbHVkZSA8d3RmL1J1bkxv
b3AuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQXVkaW9JT0NhbGxiYWNrOworCitjbGFzcyBNb2NrQXVkaW9EZXN0aW5hdGlvbkNv
Y29hIGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb25Db2NvYSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBdWRp
b0Rlc3RpbmF0aW9uPiBjcmVhdGUoQXVkaW9JT0NhbGxiYWNrJiBjYWxsYmFjaywgZmxvYXQgc2Ft
cGxlUmF0ZSkgeyByZXR1cm4gbWFrZVVuaXF1ZTxNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hPihj
YWxsYmFjaywgc2FtcGxlUmF0ZSk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBNb2NrQXVkaW9EZXN0
aW5hdGlvbkNvY29hKEF1ZGlvSU9DYWxsYmFjayYsIGZsb2F0IHNhbXBsZVJhdGUpOworCitwcml2
YXRlOgorICAgIHZvaWQgc3RhcnQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKwor
ICAgIHZvaWQgdGljaygpOworCisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisgICAg
UnVuTG9vcDo6VGltZXI8TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYT4gbV90aW1lcjsKKyAgICB1
aW50MzJfdCBtX251bWJlck9mRnJhbWVzVG9Qcm9jZXNzIHsgMzg0IH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9S
TShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBmM2M3ZTNlNDJm
MWI3OTA0MmVjODkzNGFlZDU0NDZlMjdkYjdlNzEyLi5kZTM4NzU0YTk2NWQzMjcyODZkNDJkNzM4
OGMxMjliM2E5NmYwMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0x
MjIsNiArMTIyLDcgQEAKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAi
TWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNZW1vcnlJbmZvLmgiCisjaW5jbHVkZSAiTW9ja0F1
ZGlvRGVzdGluYXRpb25Db2NvYS5oIgogI2luY2x1ZGUgIk1vY2tMaWJXZWJSVENQZWVyQ29ubmVj
dGlvbi5oIgogI2luY2x1ZGUgIk1vY2tQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIk1vY2tQYWdl
T3ZlcmxheUNsaWVudC5oIgpAQCAtNTgwLDYgKzU4MSwxMCBAQCBJbnRlcm5hbHM6OkludGVybmFs
cyhEb2N1bWVudCYgZG9jdW1lbnQpCiAjZW5kaWYKIAogICAgIG1fdW5zdXNwZW5kYWJsZUFjdGl2
ZURPTU9iamVjdCA9IG51bGxwdHI7CisKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgIEVOQUJMRShX
RUJfQVVESU8pCisgICAgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpjcmVhdGVPdmVycmlkZSA9IG51
bGxwdHI7CisjZW5kaWYKIH0KIAogRG9jdW1lbnQqIEludGVybmFsczo6Y29udGV4dERvY3VtZW50
KCkgY29uc3QKQEAgLTQwNzQsNyArNDA3OSw2IEBAIHZvaWQgSW50ZXJuYWxzOjpzZW5kTWVkaWFD
b250cm9sRXZlbnQoTWVkaWFDb250cm9sRXZlbnQgZXZlbnQpCiAjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NFU1NJT04pCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotCiB2b2lkIEludGVybmFsczo6
c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29udGV4dCYgY29udGV4dCwgU3RyaW5n
VmlldyByZXN0cmljdGlvbnNTdHJpbmcpCiB7CiAgICAgQXVkaW9Db250ZXh0OjpCZWhhdmlvclJl
c3RyaWN0aW9ucyByZXN0cmljdGlvbnMgPSBjb250ZXh0LmJlaGF2aW9yUmVzdHJpY3Rpb25zKCk7
CkBAIC00MDkzLDYgKzQwOTcsMTIgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4dFJl
c3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIFN0cmluZ1ZpZXcgcmUKICAgICBjb250
ZXh0LmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zKTsKIH0KIAordm9pZCBJbnRl
cm5hbHM6OnVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKQoreworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y3JlYXRlT3ZlcnJpZGUgPSBNb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hOjpjcmVhdGU7CisjZW5kaWYKK30KICNlbmRpZgogCiB2b2lkIElu
dGVybmFsczo6c2ltdWxhdGVTeXN0ZW1TbGVlcCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAppbmRleCAxOWY3ODlmOTAzMGY5YTI0ODY4N2U5NWYwMWZkYWFkZGU1ODVkZGNlLi5l
ZmM0MDYxNGFlNWRjODM2MWM3OWMyMzMxOWIwYTI5OTZmZWY1OTBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKQEAgLTYzMyw2ICs2MzMsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUo
V0VCX0FVRElPKQogICAgIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKEF1ZGlvQ29u
dGV4dCYsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKTsKKyAgICB2b2lkIHVzZU1vY2tB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKICNlbmRpZgogCiAgICAgdm9pZCBzaW11bGF0ZVN5c3Rl
bVNsZWVwKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggMDFk
YjI0MmQwYmM5OTQyMDYwMTU2NDY1YmY3NzFkMTQyN2RhMmNkYy4uZDhmYWEyZGNjN2FhYWQ4MTdk
NjkxNmI0YWM3MzE0ZDViMDE2YmZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bApAQCAtNjEyLDYgKzYxMiw4IEBAIGVudW0gQ29tcG9zaXRpbmdQb2xpY3kgewogICAgIFtDb25k
aXRpb25hbD1NRURJQV9TVFJFQU1dIHZvaWQgc2V0TW9ja01lZGlhQ2FwdHVyZURldmljZXNFbmFi
bGVkKGJvb2xlYW4gZW5hYmxlZCk7CiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NUUkVBTV0gdm9p
ZCBzZXRDdXN0b21Qcml2YXRlUmVjb3JkZXJDcmVhdG9yKCk7CiAKKyAgICBbQ29uZGl0aW9uYWw9
V0VCX0FVRElPXSB2b2lkIHVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKKwogICAgIFtD
b25kaXRpb25hbD1XRUJfUlRDXSB2b2lkIGVtdWxhdGVSVENQZWVyQ29ubmVjdGlvblBsYXRmb3Jt
RXZlbnQoUlRDUGVlckNvbm5lY3Rpb24gY29ubmVjdGlvbiwgRE9NU3RyaW5nIGFjdGlvbik7CiAg
ICAgW0NvbmRpdGlvbmFsPVdFQl9SVENdIHZvaWQgdXNlTW9ja1JUQ1BlZXJDb25uZWN0aW9uRmFj
dG9yeShET01TdHJpbmcgdGVzdENhc2UpOwogICAgIFtDb25kaXRpb25hbD1XRUJfUlRDXSB2b2lk
IHNldElDRUNhbmRpZGF0ZUZpbHRlcmluZyhib29sZWFuIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGUxNWMz
ODAwMTY1ZGQzY2ZkMmI0Yzg2MjUyM2I2MzY5ZmNjN2Q0MDEuLmRmOTU4YmY4YmVmMTQ3YTVjYzdi
YjI1ZjNkNTUzOTlhNDRlZTNkMGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0xMC0xOCAg
eW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgY29kZSBi
ZXR3ZWVuIEF1ZGlvRGVzdGluYXRpb25JT1MgYW5kIEF1ZGlvRGVzdGluYXRpb25NYWMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzA0NworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTYzNDA4NjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJh
dWRpby1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVk
aWEtd2ViYXVkaW8uaHRtbDoKKwogMjAxOS0xMC0xNyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3b3JrIGZyb250ZW5kIGFnZW50
IGNvbnN0cnVjdGlvbiB0byBhbGxvdyBjb21tYW5kcy9ldmVudHMgdG8gYmUgY29udHJvbGxlZCBi
eSB0aGUgcmVsYXRlZCB0YXJnZXQncyB0eXBlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby1leHBlY3RlZC50eHQK
aW5kZXggYjJhODkwMGRkNTE2NDU2NDM3MzU5M2FmMDQzYTk0ZDc4NWY2NDBiOS4uZjc0ZDg4ODgy
Yzk4ODRiYzVlM2M4NWI2NmUzYzY4ZGY0ZmRiYzc4YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8tZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLWV4cGVj
dGVkLnR4dApAQCAtMSw0ICsxLDUgQEAKIAogUEFTUyBQbHVnZ2luZyBpbiBnZXRVc2VyTWVkaWEg
YXVkaW8gc3RyZWFtIGludG8gV2ViIEF1ZGlvIAogUEFTUyBXZWIgQXVkaW8gc2hvdWxkIHdvcmsg
ZXZlbiBpZiBudW1iZXIgb2YgY2hhbm5lbHMgb2YgYSB0cmFjayBpbmNyZWFzZXMgZnJvbSAxIHRv
IDIgCitQQVNTIFdlYiBBdWRpbyBzaG91bGQgd29yayB3aXRoIG1vY2sgYXVkaW8gZGVzdGluYXRp
b24gCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1l
ZGlhLXdlYmF1ZGlvLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJN
ZWRpYS13ZWJhdWRpby5odG1sCmluZGV4IGFlNWYwMGQwZDE5MjExNDIzZmNiZjQ2ZDZkYzQ1NzRl
NDg1NWFmOWIuLjcyMDQzNWE3N2I3YWIyYzNiNmUyOGUzODcyZmNlMDZiYzcwNGUyMTcgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlv
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2Vi
YXVkaW8uaHRtbApAQCAtNjUsNiArNjUsMjYgQEAgcHJvbWlzZV90ZXN0KGFzeW5jICh0ZXN0KSA9
PiB7CiAgICAgc291cmNlLmRpc2Nvbm5lY3Qoc2NyaXB0KTsKICAgICBzY3JpcHQuZGlzY29ubmVj
dChhdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOwogfSwgIldlYiBBdWRpbyBzaG91bGQgd29yayBl
dmVuIGlmIG51bWJlciBvZiBjaGFubmVscyBvZiBhIHRyYWNrIGluY3JlYXNlcyBmcm9tIDEgdG8g
MiIpOworCitwcm9taXNlX3Rlc3QoYXN5bmMgKHRlc3QpID0+IHsKKyAgICBpZiAoIXdpbmRvdy5p
bnRlcm5hbHMpCisgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgiSW50ZXJuYWxzIEFQSSBy
ZXF1aXJlZCIpOworICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmlj
ZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUsIHZpZGVvOiBmYWxzZSB9KTsKKyAgICBpbnRl
cm5hbHMudXNlTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSgpOworCisgICAgdmFyIGF1ZGlvQ29u
dGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoKTsKKyAgICB2YXIgYW5hbHl6ZXIgPSBhdWRp
b0NvbnRleHQuY3JlYXRlQW5hbHlzZXIoKTsKKyAgICBhbmFseXplci5mZnRTaXplID0gMjU2Owor
ICAgIGxldCBzb3VyY2UgPSBhdWRpb0NvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2Uoc3Ry
ZWFtKTsKKyAgICBzb3VyY2UuY29ubmVjdChhbmFseXplcik7CisgICAgYW5hbHl6ZXIuY29ubmVj
dChhdWRpb0NvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgYXdhaXQgbmV3IFByb21pc2UocmVz
b2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMCkpOworCisgICAgc291cmNlLmRpc2Nvbm5l
Y3QoYW5hbHl6ZXIpOworICAgIGFuYWx5emVyLmRpc2Nvbm5lY3QoYXVkaW9Db250ZXh0LmRlc3Rp
bmF0aW9uKTsKK30sICJXZWIgQXVkaW8gc2hvdWxkIHdvcmsgd2l0aCBtb2NrIGF1ZGlvIGRlc3Rp
bmF0aW9uIik7CisKICAgICAgICAgPC9zY3JpcHQ+CiAgICAgPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381292</attachid>
            <date>2019-10-18 03:10:07 -0700</date>
            <delta_ts>2019-10-21 09:29:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203047-20191018121004.patch</filename>
            <type>text/plain</type>
            <size>55671</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I3ZTUwZWVmYzQ5YTdj
Yzk4NTA4N2NhYzY3MTMxMTViNTRkNzZhMi4uYzkwYmFhYzZiY2VkMWY0NjYzODhhZGQzY2FhZGU1
YzE5N2ExNjJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE5LTEwLTE4ICB5b3Vl
bm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBTaGFyZSBjb2RlIGJldHdl
ZW4gQXVkaW9EZXN0aW5hdGlvbklPUyBhbmQgQXVkaW9EZXN0aW5hdGlvbk1hYworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDQ3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81NjM0MDg2Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgQXVkaW9EZXN0aW5hdGlvbkNvY29hIHRvIHNoYXJl
IGNvZGUgYmV0d2VlbiBpT1MgYW5kIE1hYy4KKyAgICAgICAgTW9zdCBjb2RlIGlzIG5vdyBzaGFy
ZWQsIGV4Y2VwdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF1ZGlvIHVuaXQgd2hpY2gg
aXMgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gTWFjIGFuZCBpT1MuCisKKyAgICAgICAgSW50
cm9kdWNlIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgdG8gYWxsb3cgbW9yZSBjb2RlIGNvdmVy
YWdlIG9mIHRoZSBzaGFyZWQgY29kZS4KKyAgICAgICAgVGhpcyBjb3VsZCBhbHNvIGFsbG93IHVz
IHRvIHZhbGlkYXRlIGR5bmFtaWMgY2hhbmdlcyBpbiBmcmFtZSByYXRlLCBudW1iZXIgb2YgZnJh
bWVzIHRvIHByb2Nlc3MuLi4KKyAgICAgICAgQWRkIEludGVybmFscyBBUEkgdG8gZW5hYmxlIHRo
ZSBtb2NrIGRlc3RpbmF0aW9uLgorIAorICAgICAgICBDb3ZlcmVkIGJ5IGFkZGVkIHRlc3QuCisK
KyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uOjpoYXJk
d2FyZVNhbXBsZVJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbjo6bWF4
Q2hhbm5lbENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6
QXVkaW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25Db2NvYTo6fkF1ZGlvRGVzdGluYXRpb25Db2NvYSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldElzUGxheWluZyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OnNldEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjph
c3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnJlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmlucHV0UHJvYyk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9EZXN0
aW5hdGlvbkNvY29hLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpvdXRwdXRVbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9E
ZXN0aW5hdGlvbklPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6
OnByb2Nlc3NCdXNBZnRlclJlbmRlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvRGVzdGluYXRpb25JT1MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9t
YWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uQ29jb2E6OnByb2Nlc3NCdXNBZnRlclJlbmRlcik6CisgICAgICAgICogcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6Ok1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RvcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjp0aWNrKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDogQWRkZWQuCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjpJbnRlcm5hbHMpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp1c2VNb2NrQXVk
aW9EZXN0aW5hdGlvbkNvY29hKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAxOS0xMC0xOCAgeW91ZW5uIGZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBzZXJ2aWNlIHdvcmtlciByZWdp
c3RyYXRpb24gbWF0Y2hpbmcgZm9yIG5hdmlnYXRpb24gbG9hZHMgdG8gbmV0d29yayBwcm9jZXNz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCAxMmZmMTFkMmVmZTE3MjE1YjUzNjEwMDA5N2Q3
MmVkYzY1NjljOGE1Li5kYTVlNzQ4ZjViNjEyYjgxNjA0ODBkYTUzMzU5NzNhOGMxZjUwMjg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTE2Myw2ICsxNjMsNyBAQCBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5jcHAKIAogcGxhdGZvcm0vYXVkaW8vQXVkaW9TZXNzaW9u
LmNwcAogCitwbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCiBw
bGF0Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EubW0KIHBsYXRmb3Jt
L2F1ZGlvL2NvY29hL1dlYkF1ZGlvQnVmZmVyTGlzdC5jcHAKIApAQCAtNDkzLDYgKzQ5NCw3IEBA
IHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQog
CiBwbGF0Zm9ybS9tb2NrL01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJNb2NrLmNwcAogcGxhdGZv
cm0vbW9jay9NZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5jcHAKK3BsYXRmb3JtL21vY2svTW9ja0F1
ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKIAogcGxhdGZvcm0vbmV0d29yay9jZi9DZXJ0aWZpY2F0
ZUluZm9DRk5ldC5jcHAKIHBsYXRmb3JtL25ldHdvcmsvY2YvRE5TUmVzb2x2ZVF1ZXVlQ0ZOZXQu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOTE1NTQ4MzU5ODBjYjMwMjEyMTgwOWJmZTQ0ZjQ4MzBiNGZjMDhkMy4uODhkYTcw
NWJkOWUwMzExYmM3ZGVlZWQ2MGViNTMzMGEzMGI0NzAxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzI0Miw2ICs3MjQyLDgg
QEAKIAkJNDEzMDE1RDYxQzdCNTcwNDAwMDkxQzZFIC8qIEZldGNoUmVzcG9uc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0MTMwMTVENjFDN0I1NzA0MDAwOTFDNkYgLyogRmV0Y2hCb2R5U291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZldGNoQm9keVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMwMTVENzFDN0I1NzA0MDAwOTFDNkUg
LyogRmV0Y2hSZXNwb25zZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRmV0Y2hSZXNwb25z
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxMzE1MTg0MjM1Nzc0NUUwMDEx
NUU2RSAvKiBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDEz
MTUxODYyMzU3NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEzMUYzQjExRjk1NTI4MTAwNTk5OTVBIC8qIEpTRmV0Y2hFdmVudEN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZldGNoRXZlbnRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTMxRjNCNDFGOTU1QkMzMDA1OTk5
NUEgLyogRXh0ZW5kYWJsZUV2ZW50SW5pdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeHRlbmRhYmxlRXZlbnRJbml0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxMzFGM0I1MUY5NTVCQzUwMDU5OTk1QSAvKiBFeHRlbmRhYmxlRXZlbnRJbml0LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBFeHRlbmRhYmxlRXZlbnRJbml0LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTc0MDIsNiArNzQwNCw4IEBACiAJCTQxQjJBNjI1MUVGMUJGNjAw
MDJCOUQ3QSAvKiBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkF1
ZGlvU291cmNlUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFCNDU5
REExRjRDQURCOTAwMDBGNkZEIC8qIFJlYWRhYmxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlYWRhYmxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxQjQ1OUVEMUY1NUVCQzcwMDAwRjZGRCAvKiBSZWFkYWJsZVN0cmVhbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWFkYWJsZVN0cmVhbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQjkxMzc2MjM1ODREMEUwMDI1QkZBMyAvKiBN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDFCOTEzNzgyMzU4NEQwRjAwMjVCRkEzIC8qIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29j
b2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja0F1ZGlvRGVz
dGluYXRpb25Db2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxQkYyMDQw
MjJCOTQ3MTYwMDA0RjgxMiAvKiBSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlYWx0aW1lVmlkZW9Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFC
RjIwNDIyMkI5NDcxNzAwMDRGODEyIC8qIFJlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTk5MDMsNiArMTk5MDcsOCBAQAogCQkJCTA3N0I2NDE1MUI5NUY3
MDMwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0TW9jay5oICovLAogCQkJCTA3N0I2NDEw
MUI5NEYxMkUwMDNFOUFENSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0UGlja2VyTW9jay5jcHAgKi8s
CiAJCQkJMDc3QjY0MTExQjk0RjEyRTAwM0U5QUQ1IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRQaWNr
ZXJNb2NrLmggKi8sCisJCQkJNDFCOTEzNzgyMzU4NEQwRjAwMjVCRkEzIC8qIE1vY2tBdWRpb0Rl
c3RpbmF0aW9uQ29jb2EuY3BwICovLAorCQkJCTQxQjkxMzc2MjM1ODREMEUwMDI1QkZBMyAvKiBN
b2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hLmggKi8sCiAJCQkJNDEzQ0NENDgyMERFMDEzQzAwNjVB
MjFBIC8qIE1vY2tNZWRpYURldmljZS5oICovLAogCQkJCTA3RDZBNEYxMUJFRDVGODgwMDE3NDE0
NiAvKiBNb2NrUmVhbHRpbWVBdWRpb1NvdXJjZS5jcHAgKi8sCiAJCQkJMDdENkE0RjIxQkVENUY4
ODAwMTc0MTQ2IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlLmggKi8sCkBAIC0yNTg4MSw2ICsy
NTg4Nyw4IEBACiAJCUNENjY5RDY1MUQyMzJERjQwMDREMTg2NiAvKiBjb2NvYSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDEzMTUxODQyMzU3NzQ1RTAw
MTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAgKi8sCisJCQkJNDEzMTUxODYyMzU3
NzQ1RTAwMTE1RTZFIC8qIEF1ZGlvRGVzdGluYXRpb25Db2NvYS5oICovLAogCQkJCTQxN0Y3QUVE
MjEzOUJGNjUwMEZCQTdFQyAvKiBNZWRpYVNlc3Npb25NYW5hZ2VyQ29jb2EuaCAqLywKIAkJCQk0
MTdGN0FFQTIxMzlCRjY0MDBGQkE3RUMgLyogTWVkaWFTZXNzaW9uTWFuYWdlckNvY29hLm1tICov
LAogCQkJCTQxN0Y3QUVCMjEzOUJGNjQwMEZCQTdFQyAvKiBXZWJBdWRpb0J1ZmZlckxpc3QuY3Bw
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVk
aW9EZXN0aW5hdGlvbkNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nv
Y29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWIzZDg4NWU1YjJkN2Zk
NWM1YzhjYjc5OTJlNGNmYWU1ZmNkOGJjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRGVzdGluYXRpb25Db2NvYS5jcHAKQEAgLTAs
MCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QXVkaW9EZXN0aW5hdGlvbkNvY29hLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5j
bHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0lPQ2FsbGJhY2suaCIKKyNpbmNsdWRl
ICJBdWRpb1Nlc3Npb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY29uc3QgaW50IGtSZW5kZXJCdWZmZXJTaXplID0gMTI4OworCitDcmVhdGVBdWRp
b0Rlc3RpbmF0aW9uQ29jb2FPdmVycmlkZSBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92
ZXJyaWRlID0gbnVsbHB0cjsKKworc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1
ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgLy8gRklYTUU6IG1ha2Ug
dXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9wcmlhdGUuCisKKyAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCisgICAgaWYgKG51bWJlck9mSW5w
dXRDaGFubmVscykKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVh
dGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgaW5wdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0
Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1jaGFubmVsICg+IHN0ZXJlbykgb3V0cHV0Lgor
ICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzICE9IDIpCisgICAgICAgIFdURkxvZ0Fsd2F5
cygiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIG91dHB1
dCBjaGFubmVscyIsIG51bWJlck9mSW5wdXRDaGFubmVscywgbnVtYmVyT2ZPdXRwdXRDaGFubmVs
cywgc2FtcGxlUmF0ZSk7CisKKyAgICBpZiAoQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpjcmVhdGVP
dmVycmlkZSkKKyAgICAgICAgcmV0dXJuIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y3JlYXRlT3Zl
cnJpZGUoY2FsbGJhY2ssIHNhbXBsZVJhdGUpOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IG1h
a2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbkNvY29hPihjYWxsYmFjaywgc2FtcGxlUmF0ZSk7Cisg
ICAgZGVzdGluYXRpb24tPmNvbmZpZ3VyZSgpOworICAgIHJldHVybiBkZXN0aW5hdGlvbjsKK30K
KworZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKK3sKKyAgICBy
ZXR1cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2FtcGxlUmF0ZSgpOworfQorCit1
bnNpZ25lZCBsb25nIEF1ZGlvRGVzdGluYXRpb246Om1heENoYW5uZWxDb3VudCgpCit7CisgICAg
Ly8gRklYTUU6IHF1ZXJ5IHRoZSBkZWZhdWx0IGF1ZGlvIGhhcmR3YXJlIGRldmljZSB0byByZXR1
cm4gdGhlIGFjdHVhbCBudW1iZXIKKyAgICAvLyBvZiBjaGFubmVscyBvZiB0aGUgZGV2aWNlLiBB
bHNvIHNlZSBjb3JyZXNwb25kaW5nIEZJWE1FIGluIGNyZWF0ZSgpLgorICAgIC8vIFRoZXJlIGlz
IGEgc21hbGwgYW1vdW50IG9mIGNvZGUgd2hpY2ggYXNzdW1lcyBzdGVyZW8gd2hpY2ggY2FuIGJl
IHVwZ3JhZGVkLgorICAgIHJldHVybiAwOworfQorCitBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OkF1
ZGlvRGVzdGluYXRpb25Db2NvYShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1w
bGVSYXRlKQorICAgIDogbV9vdXRwdXRVbml0KDApCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNr
KQorICAgICwgbV9yZW5kZXJCdXMoQXVkaW9CdXM6OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6
ZSwgZmFsc2UpLnJlbGVhc2VOb25OdWxsKCkpCisgICAgLCBtX3NwYXJlQnVzKEF1ZGlvQnVzOjpj
cmVhdGUoMiwga1JlbmRlckJ1ZmZlclNpemUsIHRydWUpLnJlbGVhc2VOb25OdWxsKCkpCisgICAg
LCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKK3sKKyAgICBjb25maWd1cmUoKTsKK30KKworQXVk
aW9EZXN0aW5hdGlvbkNvY29hOjp+QXVkaW9EZXN0aW5hdGlvbkNvY29hKCkKK3sKKyAgICBpZiAo
bV9vdXRwdXRVbml0KQorICAgICAgICBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZShtX291
dHB1dFVuaXQpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQoKQorewor
ICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQiKTsKKyAgICBPU1N0
YXR1cyByZXN1bHQgPSBBdWRpb091dHB1dFVuaXRTdGFydChtX291dHB1dFVuaXQpOworCisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHNldElzUGxheWluZyh0cnVlKTsKK30KKwordm9pZCBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OnN0b3AoKQoreworICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6c3RvcCIpOworICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5p
dFN0b3AobV9vdXRwdXRVbml0KTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICBzZXRJc1Bs
YXlpbmcoZmFsc2UpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6c2V0SXNQbGF5
aW5nKGJvb2wgaXNQbGF5aW5nKQoreworICAgIGlmIChtX2lzUGxheWluZyA9PSBpc1BsYXlpbmcp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faXNQbGF5aW5nID0gaXNQbGF5aW5nOworICAgIG1f
Y2FsbGJhY2suaXNQbGF5aW5nRGlkQ2hhbmdlKCk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlv
bkNvY29hOjpzZXRBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24oQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiBzdHJlYW1Gb3JtYXQsIGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgY29uc3Qg
aW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7CisgICAgY29uc3QgaW50IGJpdHNQ
ZXJCeXRlID0gODsKKyAgICBzdHJlYW1Gb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwor
ICAgIHN0cmVhbUZvcm1hdC5tRm9ybWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007CisgICAg
c3RyZWFtRm9ybWF0Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQ
YWNrZWQgfCBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRlcmxlYXZlZDsKKyAgICBzdHJlYW1Gb3Jt
YXQubUJ5dGVzUGVyUGFja2V0ID0gYnl0ZXNQZXJGbG9hdDsKKyAgICBzdHJlYW1Gb3JtYXQubUZy
YW1lc1BlclBhY2tldCA9IDE7CisgICAgc3RyZWFtRm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gYnl0
ZXNQZXJGbG9hdDsKKyAgICBzdHJlYW1Gb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPSAyOworICAg
IHN0cmVhbUZvcm1hdC5tQml0c1BlckNoYW5uZWwgPSBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxv
YXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKEF1ZGlvQnVmZmVy
KiBidWZmZXJzLCBBdWRpb0J1cyYgYnVzLCBVSW50MzIgbnVtYmVyT2ZCdWZmZXJzLCBVSW50MzIg
bnVtYmVyT2ZGcmFtZXMsIFVJbnQzMiBmcmFtZU9mZnNldCwgVUludDMyIGZyYW1lc1RoaXNUaW1l
KQoreworICAgIGZvciAoVUludDMyIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWZmZXJzOyArK2kpIHsK
KyAgICAgICAgVUludDMyIGJ5dGVzUGVyRnJhbWUgPSBidWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUg
LyBudW1iZXJPZkZyYW1lczsKKyAgICAgICAgVUludDMyIGJ5dGVPZmZzZXQgPSBmcmFtZU9mZnNl
dCAqIGJ5dGVzUGVyRnJhbWU7CisgICAgICAgIGF1dG8qIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXJzW2ldLm1EYXRhKSArIGJ5
dGVPZmZzZXQpOworICAgICAgICBidXMuc2V0Q2hhbm5lbE1lbW9yeShpLCBtZW1vcnksIGZyYW1l
c1RoaXNUaW1lKTsKKyAgICB9Cit9CisKKy8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQg
cmVuZGVyZWQgYXVkaW8gc3RyZWFtLgorT1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbkNvY29hOjpy
ZW5kZXIoVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sK
KyAgICBhdXRvKiBidWZmZXJzID0gaW9EYXRhLT5tQnVmZmVyczsKKyAgICBVSW50MzIgbnVtYmVy
T2ZCdWZmZXJzID0gaW9EYXRhLT5tTnVtYmVyQnVmZmVyczsKKyAgICBVSW50MzIgZnJhbWVzUmVt
YWluaW5nID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgVUludDMyIGZyYW1lT2Zmc2V0ID0gMDsKKyAg
ICB3aGlsZSAoZnJhbWVzUmVtYWluaW5nID4gMCkgeworICAgICAgICBpZiAobV9zdGFydFNwYXJl
RnJhbWUgPCBtX2VuZFNwYXJlRnJhbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YXJ0U3Bh
cmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSk7CisgICAgICAgICAgICBVSW50MzIgZnJhbWVzVGhp
c1RpbWUgPSBzdGQ6Om1pbjxVSW50MzI+KG1fZW5kU3BhcmVGcmFtZSAtIG1fc3RhcnRTcGFyZUZy
YW1lLCBudW1iZXJPZkZyYW1lcyk7CisgICAgICAgICAgICBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1
cyhidWZmZXJzLCBtX3JlbmRlckJ1cy5nZXQoKSwgbnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZy
YW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNUaW1lKTsKKyAgICAgICAgICAgIG1fcmVuZGVy
QnVzLT5jb3B5RnJvbVJhbmdlKG1fc3BhcmVCdXMuZ2V0KCksIG1fc3RhcnRTcGFyZUZyYW1lLCBt
X2VuZFNwYXJlRnJhbWUpOworICAgICAgICAgICAgcHJvY2Vzc0J1c0FmdGVyUmVuZGVyKG1fcmVu
ZGVyQnVzLmdldCgpLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgICAgICBmcmFtZU9mZnNldCAr
PSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIGZyYW1lc1JlbWFpbmluZyAtPSBmcmFtZXNU
aGlzVGltZTsKKyAgICAgICAgICAgIG1fc3RhcnRTcGFyZUZyYW1lICs9IGZyYW1lc1RoaXNUaW1l
OworICAgICAgICB9CisKKyAgICAgICAgVUludDMyIGZyYW1lc1RoaXNUaW1lID0gc3RkOjptaW48
VUludDMyPihrUmVuZGVyQnVmZmVyU2l6ZSwgZnJhbWVzUmVtYWluaW5nKTsKKyAgICAgICAgYXNz
aWduQXVkaW9CdWZmZXJzVG9CdXMoYnVmZmVycywgbV9yZW5kZXJCdXMuZ2V0KCksIG51bWJlck9m
QnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlzVGltZSk7CisK
KyAgICAgICAgaWYgKCFmcmFtZXNUaGlzVGltZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBpZiAoZnJhbWVzVGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAg
bV9jYWxsYmFjay5yZW5kZXIoMCwgbV9zcGFyZUJ1cy5wdHIoKSwga1JlbmRlckJ1ZmZlclNpemUp
OworICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UobV9zcGFyZUJ1cy5nZXQo
KSwgMCwgZnJhbWVzVGhpc1RpbWUpOworICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgPSBm
cmFtZXNUaGlzVGltZTsKKyAgICAgICAgICAgIG1fZW5kU3BhcmVGcmFtZSA9IGtSZW5kZXJCdWZm
ZXJTaXplOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY2FsbGJhY2sucmVuZGVyKDAs
IG1fcmVuZGVyQnVzLnB0cigpLCBmcmFtZXNUaGlzVGltZSk7CisgICAgICAgIHByb2Nlc3NCdXNB
ZnRlclJlbmRlcihtX3JlbmRlckJ1cy5nZXQoKSwgZnJhbWVzVGhpc1RpbWUpOworICAgICAgICBm
cmFtZU9mZnNldCArPSBmcmFtZXNUaGlzVGltZTsKKyAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09
IGZyYW1lc1RoaXNUaW1lOworICAgIH0KKworICAgIHJldHVybiBub0VycjsKK30KKworLy8gRGVm
YXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKK09TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6
aW5wdXRQcm9jKHZvaWQqIHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNv
bnN0IEF1ZGlvVGltZVN0YW1wKiwgVUludDMyIC8qYnVzTnVtYmVyKi8sIFVJbnQzMiBudW1iZXJP
ZkZyYW1lcywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgYXV0byogYXVkaW9PdXRw
dXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9uQ29jb2EqPih1c2VyRGF0YSk7CisgICAg
cmV0dXJuIGF1ZGlvT3V0cHV0LT5yZW5kZXIobnVtYmVyT2ZGcmFtZXMsIGlvRGF0YSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Rlc3Rp
bmF0aW9uQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlv
RGVzdGluYXRpb25Db2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNjk0N2ViODIyMzhmZGY2NTIxZDY1Nzdl
Mzg5ZWQ2OGY4YTIyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaApAQCAtMCwwICsxLDg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5j
bHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgPEF1ZGlvVW5pdC9BdWRpb1VuaXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXVkaW9CdXM7CisKK3VzaW5nIENyZWF0ZUF1ZGlvRGVzdGluYXRpb25Db2NvYU92ZXJyaWRl
ID0gc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+KCopKEF1ZGlvSU9DYWxsYmFjayYs
IGZsb2F0IHNhbXBsZVJhdGUpOworCisvLyBBbiBBdWRpb0Rlc3RpbmF0aW9uIHVzaW5nIENvcmVB
dWRpbydzIGRlZmF1bHQgb3V0cHV0IEF1ZGlvVW5pdAorY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkNv
Y29hIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24geworcHVibGljOgorICAgIEF1ZGlvRGVzdGlu
YXRpb25Db2NvYShBdWRpb0lPQ2FsbGJhY2smLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2aXJ0
dWFsIH5BdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBDcmVhdGVBdWRpb0Rlc3RpbmF0aW9uQ29jb2FPdmVycmlkZSBjcmVhdGVPdmVycmlkZTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOworCisgICAgYm9vbCBpc1Bs
YXlpbmcoKSBmaW5hbCB7IHJldHVybiBtX2lzUGxheWluZzsgfQorICAgIGZsb2F0IHNhbXBsZVJh
dGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KKyAgICBBdWRpb1VuaXQm
IG91dHB1dFVuaXQoKSB7IHJldHVybiBtX291dHB1dFVuaXQ7IH0KKyAgICAKKyAgICAvLyBEZWZh
dWx0T3V0cHV0VW5pdCBjYWxsYmFjaworICAgIHN0YXRpYyBPU1N0YXR1cyBpbnB1dFByb2Modm9p
ZCogdXNlckRhdGEsIEF1ZGlvVW5pdFJlbmRlckFjdGlvbkZsYWdzKiwgY29uc3QgQXVkaW9UaW1l
U3RhbXAqLCBVSW50MzIgYnVzTnVtYmVyLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVm
ZmVyTGlzdCogaW9EYXRhKTsKKworICAgIHZvaWQgc2V0QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYsIGZsb2F0IHNhbXBsZVJhdGUpOworCitw
cml2YXRlOgorICAgIHZvaWQgc3RhcnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN0b3AoKSBvdmVy
cmlkZTsKKworICAgIGZyaWVuZCBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVk
aW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYsIGNvbnN0IFN0cmluZyYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgZmxvYXQpOworICAgIAorICAgIHZvaWQgY29uZmlndXJlKCk7Cisg
ICAgdm9pZCBwcm9jZXNzQnVzQWZ0ZXJSZW5kZXIoQXVkaW9CdXMmLCBVSW50MzIgbnVtYmVyT2ZG
cmFtZXMpOworCisgICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVk
aW9CdWZmZXJMaXN0KiBpb0RhdGEpOworCisgICAgQXVkaW9Vbml0IG1fb3V0cHV0VW5pdDsKKyAg
ICBBdWRpb0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7CisgICAgUmVmPEF1ZGlvQnVzPiBtX3JlbmRl
ckJ1czsKKyAgICBSZWY8QXVkaW9CdXM+IG1fc3BhcmVCdXM7CisKKyAgICBmbG9hdCBtX3NhbXBs
ZVJhdGU7CisgICAgYm9vbCBtX2lzUGxheWluZyB7IGZhbHNlIH07CisKKyAgICB1bnNpZ25lZCBt
X3N0YXJ0U3BhcmVGcmFtZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2VuZFNwYXJlRnJhbWUgeyAw
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1
ZGlvRGVzdGluYXRpb25JT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9z
L0F1ZGlvRGVzdGluYXRpb25JT1MuY3BwCmluZGV4IDRiZGU3ZTQxZTJiNjQzN2NkMGZmNzI1ZTRk
MDc5ZDY4Zjg5ZTdkYzUuLjM5Mjk1MjM2ZTMwM2UwYzE4NzA1ZmZiZWU1NDZiNDg4YzUyYWJlZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3Rp
bmF0aW9uSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVk
aW9EZXN0aW5hdGlvbklPUy5jcHAKQEAgLTMxLDI1ICszMSwxNCBAQAogCiAjaWYgRU5BQkxFKFdF
Ql9BVURJTykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotI2luY2x1ZGUgIkF1ZGlvRGVzdGlu
YXRpb25JT1MuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCIKIAotI2luY2x1
ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgogI2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJS
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9T
ZXJ2aWNlcy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQXVkaW9Ub29sYm94U1BJLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvU29mdExpbmtpbmcuaD4KIAogU09GVF9MSU5LX0ZSQU1FV09SSyhBdWRp
b1Rvb2xib3gpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEZpbmROZXh0
LCBBdWRpb0NvbXBvbmVudCwgKEF1ZGlvQ29tcG9uZW50IGluQ29tcG9uZW50LCBjb25zdCBBdWRp
b0NvbXBvbmVudERlc2NyaXB0aW9uICppbkRlc2MpLCAoaW5Db21wb25lbnQsIGluRGVzYykpCi1T
T0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlRGlzcG9zZSwgT1NT
dGF0dXMsIChBdWRpb0NvbXBvbmVudEluc3RhbmNlIGluSW5zdGFuY2UpLCAoaW5JbnN0YW5jZSkp
CiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3LCBPU1N0
YXR1cywgKEF1ZGlvQ29tcG9uZW50IGluQ29tcG9uZW50LCBBdWRpb0NvbXBvbmVudEluc3RhbmNl
ICpvdXRJbnN0YW5jZSksIChpbkNvbXBvbmVudCwgb3V0SW5zdGFuY2UpKQotU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgQXVkaW9PdXRwdXRVbml0U3RhcnQsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGNp
KSwgKGNpKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvT3V0cHV0VW5pdFN0b3AsIE9T
U3RhdHVzLCAoQXVkaW9Vbml0IGNpKSwgKGNpKSkKIFNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1
ZGlvVW5pdEFkZFByb3BlcnR5TGlzdGVuZXIsIE9TU3RhdHVzLCAoQXVkaW9Vbml0IGluVW5pdCwg
QXVkaW9Vbml0UHJvcGVydHlJRCBpbklELCBBdWRpb1VuaXRQcm9wZXJ0eUxpc3RlbmVyUHJvYyBp
blByb2MsIHZvaWQgKmluUHJvY1VzZXJEYXRhKSwgKGluVW5pdCwgaW5JRCwgaW5Qcm9jLCBpblBy
b2NVc2VyRGF0YSkpCiBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRHZXRQcm9wZXJ0
eSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlEIGluSUQs
IEF1ZGlvVW5pdFNjb3BlIGluU2NvcGUsIEF1ZGlvVW5pdEVsZW1lbnQgaW5FbGVtZW50LCB2b2lk
ICpvdXREYXRhLCBVSW50MzIgKmlvRGF0YVNpemUpLCAoaW5Vbml0LCBpbklELCBpblNjb3BlLCBp
bkVsZW1lbnQsIG91dERhdGEsIGlvRGF0YVNpemUpKQogU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwg
QXVkaW9Vbml0SW5pdGlhbGl6ZSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0KSwgKGluVW5p
dCkpCkBAIC01Nyw1NSArNDYsOSBAQCBTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChBdWRpb1VuaXQgaW5Vbml0LCBBdWRpbwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNvbnN0IGludCBrUmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKLWNvbnN0
IGludCBrUHJlZmVycmVkQnVmZmVyU2l6ZSA9IDI1NjsKLQotdHlwZWRlZiBIYXNoU2V0PEF1ZGlv
RGVzdGluYXRpb25JT1MqPiBBdWRpb0Rlc3RpbmF0aW9uU2V0Owotc3RhdGljIEF1ZGlvRGVzdGlu
YXRpb25TZXQmIGF1ZGlvRGVzdGluYXRpb25zKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8QXVkaW9EZXN0aW5hdGlvblNldD4gYXVkaW9EZXN0aW5hdGlvblNldDsKLSAgICByZXR1cm4g
YXVkaW9EZXN0aW5hdGlvblNldDsKLX0KLQotLy8gRmFjdG9yeSBtZXRob2Q6IGlPUy1pbXBsZW1l
bnRhdGlvbgotc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRp
b246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0Q2hhbm5l
bHMsIGZsb2F0IHNhbXBsZVJhdGUpCit2b2lkIEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y29uZmln
dXJlKCkKIHsKLSAgICAvLyBGSVhNRTogbWFrZSB1c2Ugb2YgaW5wdXREZXZpY2VJZCBhcyBhcHBy
b3ByaWF0ZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRp
byBpbnB1dC4KLSAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzKQotICAgICAgICBMT0coTWVk
aWEsICJBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgaW5w
dXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5l
bHMsIHNhbXBsZVJhdGUpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1j
aGFubmVsICg+IHN0ZXJlbykgb3V0cHV0LgotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxz
ICE9IDIpCi0gICAgICAgIExPRyhNZWRpYSwgIkF1ZGlvRGVzdGluYXRpb246OmNyZWF0ZSgldSwg
JXUsICVmKSAtIHVuaGFuZGxlZCBvdXRwdXQgY2hhbm5lbHMiLCBudW1iZXJPZklucHV0Q2hhbm5l
bHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMsIHNhbXBsZVJhdGUpOwotCi0gICAgcmV0dXJuIG1h
a2VVbmlxdWU8QXVkaW9EZXN0aW5hdGlvbklPUz4oY2FsbGJhY2ssIHNhbXBsZVJhdGUpOwotfQot
Ci1mbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKQotewotICAgIHJl
dHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KLXVu
c2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlvbjo6bWF4Q2hhbm5lbENvdW50KCkKLXsKLSAgICAv
LyBGSVhNRTogcXVlcnkgdGhlIGRlZmF1bHQgYXVkaW8gaGFyZHdhcmUgZGV2aWNlIHRvIHJldHVy
biB0aGUgYWN0dWFsIG51bWJlcgotICAgIC8vIG9mIGNoYW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFs
c28gc2VlIGNvcnJlc3BvbmRpbmcgRklYTUUgaW4gY3JlYXRlKCkuCi0gICAgLy8gVGhlcmUgaXMg
YSBzbWFsbCBhbW91bnQgb2YgY29kZSB3aGljaCBhc3N1bWVzIHN0ZXJlbyBpbiBBdWRpb0Rlc3Rp
bmF0aW9uSU9TIHdoaWNoCi0gICAgLy8gY2FuIGJlIHVwZ3JhZGVkLgotICAgIHJldHVybiAwOwot
fQotCi1BdWRpb0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKEF1ZGlvSU9DYWxs
YmFjayYgY2FsbGJhY2ssIGRvdWJsZSBzYW1wbGVSYXRlKQotICAgIDogbV9vdXRwdXRVbml0KDAp
Ci0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9yZW5kZXJCdXMoQXVkaW9CdXM6
OmNyZWF0ZSgyLCBrUmVuZGVyQnVmZmVyU2l6ZSwgZmFsc2UpKQotICAgICwgbV9zcGFyZUJ1cyhB
dWRpb0J1czo6Y3JlYXRlKDIsIGtSZW5kZXJCdWZmZXJTaXplLCB0cnVlKSkKLSAgICAsIG1fc2Ft
cGxlUmF0ZShzYW1wbGVSYXRlKQotICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCi17Ci0gICAgYXVk
aW9EZXN0aW5hdGlvbnMoKS5hZGQodGhpcyk7CisgICAgY29uc3QgaW50IGtQcmVmZXJyZWRCdWZm
ZXJTaXplID0gMjU2OwogCiAgICAgLy8gT3BlbiBhbmQgaW5pdGlhbGl6ZSBEZWZhdWx0T3V0cHV0
VW5pdAogICAgIEF1ZGlvQ29tcG9uZW50IGNvbXA7CkBAIC0xMjAsMTU2ICs2Myw0NCBAQCBBdWRp
b0Rlc3RpbmF0aW9uSU9TOjpBdWRpb0Rlc3RpbmF0aW9uSU9TKEF1ZGlvSU9DYWxsYmFjayYgY2Fs
bGJhY2ssIGRvdWJsZSBzYW1wbAogCiAgICAgQVNTRVJUKGNvbXApOwogCi0gICAgT1NTdGF0dXMg
cmVzdWx0ID0gQXVkaW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmbV9vdXRwdXRVbml0KTsK
KyAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb0NvbXBvbmVudEluc3RhbmNlTmV3KGNvbXAsICZv
dXRwdXRVbml0KCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIFVJbnQzMiBmbGFnID0g
MTsKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIAotICAg
ICAgICBrQXVkaW9PdXRwdXRVbml0UHJvcGVydHlfRW5hYmxlSU8sIAotICAgICAgICBrQXVkaW9V
bml0U2NvcGVfT3V0cHV0LCAKKyAgICByZXN1bHQgPSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShvdXRw
dXRVbml0KCksCisgICAgICAgIGtBdWRpb091dHB1dFVuaXRQcm9wZXJ0eV9FbmFibGVJTywKKyAg
ICAgICAga0F1ZGlvVW5pdFNjb3BlX091dHB1dCwKICAgICAgICAgMCwKLSAgICAgICAgJmZsYWcs
IAorICAgICAgICAmZmxhZywKICAgICAgICAgc2l6ZW9mKGZsYWcpKTsKICAgICBBU1NFUlQoIXJl
c3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRBZGRQcm9wZXJ0eUxpc3RlbmVyKG1fb3V0
cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X01heGltdW1GcmFtZXNQZXJTbGljZSwgZnJhbWVT
aXplQ2hhbmdlZFByb2MsIHRoaXMpOworICAgIHJlc3VsdCA9IEF1ZGlvVW5pdEluaXRpYWxpemUo
b3V0cHV0VW5pdCgpKTsKICAgICBBU1NFUlQoIXJlc3VsdCk7Ci0KLSAgICByZXN1bHQgPSBBdWRp
b1VuaXRJbml0aWFsaXplKG1fb3V0cHV0VW5pdCk7Ci0gICAgQVNTRVJUKCFyZXN1bHQpOwotCi0g
ICAgY29uZmlndXJlKCk7Ci19Ci0KLUF1ZGlvRGVzdGluYXRpb25JT1M6On5BdWRpb0Rlc3RpbmF0
aW9uSU9TKCkKLXsKLSAgICBhdWRpb0Rlc3RpbmF0aW9ucygpLnJlbW92ZSh0aGlzKTsKLQotICAg
IGlmIChtX291dHB1dFVuaXQpCi0gICAgICAgIEF1ZGlvQ29tcG9uZW50SW5zdGFuY2VEaXNwb3Nl
KG1fb3V0cHV0VW5pdCk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbklPUzo6Y29uZmlndXJl
KCkKLXsKICAgICAvLyBTZXQgcmVuZGVyIGNhbGxiYWNrCiAgICAgQVVSZW5kZXJDYWxsYmFja1N0
cnVjdCBpbnB1dDsKICAgICBpbnB1dC5pbnB1dFByb2MgPSBpbnB1dFByb2M7CiAgICAgaW5wdXQu
aW5wdXRQcm9jUmVmQ29uID0gdGhpczsKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb1VuaXRT
ZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9TZXRSZW5kZXJDYWxs
YmFjaywga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOwor
ICAgIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5p
dFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfSW5wdXQsIDAsICZp
bnB1dCwgc2l6ZW9mKGlucHV0KSk7CiAgICAgQVNTRVJUKCFyZXN1bHQpOwogCiAgICAgLy8gU2V0
IHN0cmVhbSBmb3JtYXQKICAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gc3RyZWFtRm9y
bWF0OwogCiAgICAgVUludDMyIHNpemUgPSBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKTsKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRHZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtB
dWRpb1VuaXRQcm9wZXJ0eV9TdHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9PdXRwdXQsIDAs
ICh2b2lkKikmc3RyZWFtRm9ybWF0LCAmc2l6ZSk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0R2V0
UHJvcGVydHkob3V0cHV0VW5pdCgpLCBrQXVkaW9Vbml0UHJvcGVydHlfU3RyZWFtRm9ybWF0LCBr
QXVkaW9Vbml0U2NvcGVfT3V0cHV0LCAwLCAodm9pZCopJnN0cmVhbUZvcm1hdCwgJnNpemUpOwog
ICAgIEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0gc2l6
ZW9mKEZsb2F0MzIpOwotICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7Ci0gICAgc3RyZWFt
Rm9ybWF0Lm1TYW1wbGVSYXRlID0gbV9zYW1wbGVSYXRlOwotICAgIHN0cmVhbUZvcm1hdC5tRm9y
bWF0SUQgPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007Ci0gICAgc3RyZWFtRm9ybWF0Lm1Gb3JtYXRG
bGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRmxvYXRQYWNrZWQgfCBrQXVkaW9Gb3JtYXRG
bGFnSXNOb25JbnRlcmxlYXZlZDsKLSAgICBzdHJlYW1Gb3JtYXQubUJ5dGVzUGVyUGFja2V0ID0g
Ynl0ZXNQZXJGbG9hdDsKLSAgICBzdHJlYW1Gb3JtYXQubUZyYW1lc1BlclBhY2tldCA9IDE7Ci0g
ICAgc3RyZWFtRm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gYnl0ZXNQZXJGbG9hdDsKLSAgICBzdHJl
YW1Gb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPSAyOwotICAgIHN0cmVhbUZvcm1hdC5tQml0c1Bl
ckNoYW5uZWwgPSBiaXRzUGVyQnl0ZSAqIGJ5dGVzUGVyRmxvYXQ7CisgICAgc2V0QXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uKHN0cmVhbUZvcm1hdCwgc2FtcGxlUmF0ZSgpKTsKIAotICAgIHJl
c3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3Bl
cnR5X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVh
bUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOworICAgIHJlc3Vs
dCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5
X1N0cmVhbUZvcm1hdCwga0F1ZGlvVW5pdFNjb3BlX0lucHV0LCAwLCAodm9pZCopJnN0cmVhbUZv
cm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbikpOwogICAgIEFTU0VSVCgh
cmVzdWx0KTsKIAogICAgIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldFByZWZlcnJl
ZEJ1ZmZlclNpemUoa1ByZWZlcnJlZEJ1ZmZlclNpemUpOwogfQogCi12b2lkIEF1ZGlvRGVzdGlu
YXRpb25JT1M6OnN0YXJ0KCkKLXsKLSAgICBMT0coTWVkaWEsICJBdWRpb0Rlc3RpbmF0aW9uSU9T
OjpzdGFydCIpOwotCi0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RhcnQo
bV9vdXRwdXRVbml0KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKHRy
dWUpOwotfQotCi12b2lkIEF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3AoKQotewotICAgIExPRyhN
ZWRpYSwgIkF1ZGlvRGVzdGluYXRpb25JT1M6OnN0b3AiKTsKLQotICAgIE9TU3RhdHVzIHJlc3Vs
dCA9IEF1ZGlvT3V0cHV0VW5pdFN0b3AobV9vdXRwdXRVbml0KTsKLSAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgc2V0SXNQbGF5aW5nKGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQgYXNzaWduQXVk
aW9CdWZmZXJzVG9CdXMoQXVkaW9CdWZmZXIqIGJ1ZmZlcnMsIEF1ZGlvQnVzJiBidXMsIFVJbnQz
MiBudW1iZXJPZkJ1ZmZlcnMsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgVUludDMyIGZyYW1lT2Zm
c2V0LCBVSW50MzIgZnJhbWVzVGhpc1RpbWUpCi17Ci0gICAgZm9yIChVSW50MzIgaSA9IDA7IGkg
PCBudW1iZXJPZkJ1ZmZlcnM7ICsraSkgewotICAgICAgICBVSW50MzIgYnl0ZXNQZXJGcmFtZSA9
IGJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIG51bWJlck9mRnJhbWVzOwotICAgICAgICBVSW50
MzIgYnl0ZU9mZnNldCA9IGZyYW1lT2Zmc2V0ICogYnl0ZXNQZXJGcmFtZTsKLSAgICAgICAgZmxv
YXQqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihyZWludGVycHJldF9jYXN0PGNo
YXIqPihidWZmZXJzW2ldLm1EYXRhKSArIGJ5dGVPZmZzZXQpOwotICAgICAgICBidXMuc2V0Q2hh
bm5lbE1lbW9yeShpLCBtZW1vcnksIGZyYW1lc1RoaXNUaW1lKTsKLSAgICB9Ci19Ci0KLS8vIFB1
bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgotT1NTdGF0
dXMgQXVkaW9EZXN0aW5hdGlvbklPUzo6cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVk
aW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMgPSBpb0Rh
dGEtPm1CdWZmZXJzOwotICAgIFVJbnQzMiBudW1iZXJPZkJ1ZmZlcnMgPSBpb0RhdGEtPm1OdW1i
ZXJCdWZmZXJzOwotICAgIFVJbnQzMiBmcmFtZXNSZW1haW5pbmcgPSBudW1iZXJPZkZyYW1lczsK
LSAgICBVSW50MzIgZnJhbWVPZmZzZXQgPSAwOwotICAgIHdoaWxlIChmcmFtZXNSZW1haW5pbmcg
PiAwKSB7Ci0gICAgICAgIGlmIChtX3N0YXJ0U3BhcmVGcmFtZSA8IG1fZW5kU3BhcmVGcmFtZSkg
ewotICAgICAgICAgICAgQVNTRVJUKG1fc3RhcnRTcGFyZUZyYW1lIDwgbV9lbmRTcGFyZUZyYW1l
KTsKLSAgICAgICAgICAgIFVJbnQzMiBmcmFtZXNUaGlzVGltZSA9IHN0ZDo6bWluPFVJbnQzMj4o
bV9lbmRTcGFyZUZyYW1lIC0gbV9zdGFydFNwYXJlRnJhbWUsIG51bWJlck9mRnJhbWVzKTsKLSAg
ICAgICAgICAgIGFzc2lnbkF1ZGlvQnVmZmVyc1RvQnVzKGJ1ZmZlcnMsICptX3JlbmRlckJ1cywg
bnVtYmVyT2ZCdWZmZXJzLCBudW1iZXJPZkZyYW1lcywgZnJhbWVPZmZzZXQsIGZyYW1lc1RoaXNU
aW1lKTsKLSAgICAgICAgICAgIG1fcmVuZGVyQnVzLT5jb3B5RnJvbVJhbmdlKCptX3NwYXJlQnVz
LCBtX3N0YXJ0U3BhcmVGcmFtZSwgbV9lbmRTcGFyZUZyYW1lKTsKLSAgICAgICAgICAgIGZyYW1l
T2Zmc2V0ICs9IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09
IGZyYW1lc1RoaXNUaW1lOwotICAgICAgICAgICAgbV9zdGFydFNwYXJlRnJhbWUgKz0gZnJhbWVz
VGhpc1RpbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVSW50MzIgZnJhbWVzVGhpc1RpbWUgPSBz
dGQ6Om1pbjxVSW50MzI+KGtSZW5kZXJCdWZmZXJTaXplLCBmcmFtZXNSZW1haW5pbmcpOwotICAg
ICAgICBhc3NpZ25BdWRpb0J1ZmZlcnNUb0J1cyhidWZmZXJzLCAqbV9yZW5kZXJCdXMsIG51bWJl
ck9mQnVmZmVycywgbnVtYmVyT2ZGcmFtZXMsIGZyYW1lT2Zmc2V0LCBmcmFtZXNUaGlzVGltZSk7
Ci0KLSAgICAgICAgaWYgKCFmcmFtZXNUaGlzVGltZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBpZiAoZnJhbWVzVGhpc1RpbWUgPCBrUmVuZGVyQnVmZmVyU2l6ZSkgewotICAgICAgICAg
ICAgbV9jYWxsYmFjay5yZW5kZXIoMCwgbV9zcGFyZUJ1cy5nZXQoKSwga1JlbmRlckJ1ZmZlclNp
emUpOwotICAgICAgICAgICAgbV9yZW5kZXJCdXMtPmNvcHlGcm9tUmFuZ2UoKm1fc3BhcmVCdXMs
IDAsIGZyYW1lc1RoaXNUaW1lKTsKLSAgICAgICAgICAgIG1fc3RhcnRTcGFyZUZyYW1lID0gZnJh
bWVzVGhpc1RpbWU7Ci0gICAgICAgICAgICBtX2VuZFNwYXJlRnJhbWUgPSBrUmVuZGVyQnVmZmVy
U2l6ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NhbGxiYWNrLnJlbmRlcigwLCBt
X3JlbmRlckJ1cy5nZXQoKSwgZnJhbWVzVGhpc1RpbWUpOwotICAgICAgICBmcmFtZU9mZnNldCAr
PSBmcmFtZXNUaGlzVGltZTsKLSAgICAgICAgZnJhbWVzUmVtYWluaW5nIC09IGZyYW1lc1RoaXNU
aW1lOwotICAgIH0KLQotICAgIHJldHVybiBub0VycjsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0
aW9uSU9TOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCi17Ci0gICAgaWYgKG1faXNQbGF5
aW5nID09IGlzUGxheWluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1BsYXlpbmcgPSBp
c1BsYXlpbmc7Ci0gICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFuZ2UoKTsKLX0KLQotLy8g
RGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLU9TU3RhdHVzIEF1ZGlvRGVzdGluYXRpb25JT1M6
OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBj
b25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciovLCBVSW50MzIgbnVtYmVy
T2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQotewotICAgIEF1ZGlvRGVzdGluYXRp
b25JT1MqIGF1ZGlvT3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0aW5hdGlvbklPUyo+KHVz
ZXJEYXRhKTsKLSAgICByZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihudW1iZXJPZkZyYW1lcywg
aW9EYXRhKTsKLX0KLQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uSU9TOjpmcmFtZVNpemVDaGFuZ2Vk
UHJvYyh2b2lkICppblJlZkNvbiwgQXVkaW9Vbml0LCBBdWRpb1VuaXRQcm9wZXJ0eUlELCBBdWRp
b1VuaXRTY29wZSwgQXVkaW9Vbml0RWxlbWVudCkKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkNvY29h
Ojpwcm9jZXNzQnVzQWZ0ZXJSZW5kZXIoQXVkaW9CdXMmLCBVSW50MzIpCiB7Ci0gICAgQXVkaW9E
ZXN0aW5hdGlvbklPUyogYXVkaW9PdXRwdXQgPSBzdGF0aWNfY2FzdDxBdWRpb0Rlc3RpbmF0aW9u
SU9TKj4oaW5SZWZDb24pOwotICAgIFVJbnQzMiBidWZmZXJTaXplID0gMDsKLSAgICBVSW50MzIg
ZGF0YVNpemUgPSBzaXplb2YoYnVmZmVyU2l6ZSk7Ci0gICAgQXVkaW9Vbml0R2V0UHJvcGVydHko
YXVkaW9PdXRwdXQtPm1fb3V0cHV0VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X01heGltdW1GcmFt
ZXNQZXJTbGljZSwga0F1ZGlvVW5pdFNjb3BlX0dsb2JhbCwgMCwgKHZvaWQqKSZidWZmZXJTaXpl
LCAmZGF0YVNpemUpOwotICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBmcmFtZVNpemVDaGFuZ2Vk
ID0gJWx1XG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihidWZmZXJTaXplKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9EZXN0aW5hdGlvbklPUy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNjkyMzlmYWNiOTY2MzljMTU5ZWJmZTEzZTlhZTgwMmVkZTE2Zjc1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0Rlc3RpbmF0aW9uSU9TLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0j
aW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCi0jaW5j
bHVkZSA8QXVkaW9Vbml0L0F1ZGlvVW5pdC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbiBBdWRpb0Rlc3RpbmF0aW9uIHVzaW5nIENvcmVB
dWRpbydzIGRlZmF1bHQgb3V0cHV0IEF1ZGlvVW5pdAotCi1jbGFzcyBBdWRpb0Rlc3RpbmF0aW9u
SU9TIGZpbmFsIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24gewotcHVibGljOgotICAgIEF1ZGlv
RGVzdGluYXRpb25JT1MoQXVkaW9JT0NhbGxiYWNrJiwgZG91YmxlIHNhbXBsZVJhdGUpOwotICAg
IHZpcnR1YWwgfkF1ZGlvRGVzdGluYXRpb25JT1MoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNv
bmZpZ3VyZSgpOwotCi0gICAgLy8gQXVkaW9EZXN0aW5hdGlvbgotICAgIHZvaWQgc3RhcnQoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICBib29sIGlzUGxheWluZygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNQbGF5aW5nOyB9Ci0gICAgZmxvYXQgc2FtcGxlUmF0ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQotCi0gICAgLy8gRGVmYXVs
dE91dHB1dFVuaXQgY2FsbGJhY2sKLSAgICBzdGF0aWMgT1NTdGF0dXMgaW5wdXRQcm9jKHZvaWQq
IHVzZXJEYXRhLCBBdWRpb1VuaXRSZW5kZXJBY3Rpb25GbGFncyosIGNvbnN0IEF1ZGlvVGltZVN0
YW1wKiwgVUludDMyIGJ1c051bWJlciwgVUludDMyIG51bWJlck9mRnJhbWVzLCBBdWRpb0J1ZmZl
ckxpc3QqIGlvRGF0YSk7Ci0gICAgc3RhdGljIHZvaWQgZnJhbWVTaXplQ2hhbmdlZFByb2Modm9p
ZCAqaW5SZWZDb24sIEF1ZGlvVW5pdCBpblVuaXQsIEF1ZGlvVW5pdFByb3BlcnR5SUQgaW5JRCwg
QXVkaW9Vbml0U2NvcGUgaW5TY29wZSwgQXVkaW9Vbml0RWxlbWVudCBpbkVsZW1lbnQpOwotCi0g
ICAgZnJpZW5kIGZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpOwot
Ci0gICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJM
aXN0KiBpb0RhdGEpOwotICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wpOwotCi0gICAgQXVkaW9V
bml0IG1fb3V0cHV0VW5pdDsKLSAgICBBdWRpb0lPQ2FsbGJhY2smIG1fY2FsbGJhY2s7Ci0gICAg
UmVmUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fc3Bh
cmVCdXM7Ci0gICAgdW5zaWduZWQgbV9zdGFydFNwYXJlRnJhbWUgeyAwIH07Ci0gICAgdW5zaWdu
ZWQgbV9lbmRTcGFyZUZyYW1lIHsgMCB9OwotCi0gICAgZG91YmxlIG1fc2FtcGxlUmF0ZTsKLSAg
ICBib29sIG1faXNQbGF5aW5nOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcAppbmRleCA5ZmU2NGJh
YWE0Nzg0ZmVjZGFiM2Q2ZGRiNWUyNzgzODFlMWUwNzAwLi43YTAxZWFlMDZlMjkwMzJmZDA1OThh
MDBlMzRkZTIzNTdkMmE1N2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuY3BwCkBAIC0yNyw2NCArMjcsMTcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlv
bkNvY29hLmgiCiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2lmIEVOQUJMRShXRUJfQVVESU8p
ICYmIFBMQVRGT1JNKE1BQykKIAotI2lmIFBMQVRGT1JNKE1BQykKLQotI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25NYWMuaCIKLQotI2luY2x1ZGUgIkF1ZGlvSU9DYWxsYmFjay5oIgotI2luY2x1
ZGUgIkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIK
KyNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKICNpbmNsdWRl
IDxDb3JlQXVkaW8vQXVkaW9IYXJkd2FyZS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNv
bnN0IGludCBrQnVmZmVyU2l6ZSA9IDEyODsKLWNvbnN0IGZsb2F0IGtMb3dUaHJlc2hvbGQgPSAt
MTsKLWNvbnN0IGZsb2F0IGtIaWdoVGhyZXNob2xkID0gMTsKLQotLy8gRmFjdG9yeSBtZXRob2Q6
IE1hYy1pbXBsZW1lbnRhdGlvbgotc3RkOjp1bmlxdWVfcHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1
ZGlvRGVzdGluYXRpb246OmNyZWF0ZShBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIHVuc2lnbmVkIG51bWJlck9m
T3V0cHV0Q2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgLy8gRklYTUU6IG1ha2Ug
dXNlIG9mIGlucHV0RGV2aWNlSWQgYXMgYXBwcm9wcmlhdGUuCi0KLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCi0gICAgaWYgKG51bWJlck9mSW5w
dXRDaGFubmVscykKLSAgICAgICAgTE9HKE1lZGlhLCAiQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRl
KCV1LCAldSwgJWYpIC0gdW5oYW5kbGVkIGlucHV0IGNoYW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENo
YW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBzYW1wbGVSYXRlKTsKLQotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgbXVsdGktY2hhbm5lbCAoPiBzdGVyZW8pIG91dHB1dC4KLSAg
ICBpZiAobnVtYmVyT2ZPdXRwdXRDaGFubmVscyAhPSAyKQotICAgICAgICBMT0coTWVkaWEsICJB
dWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoJXUsICV1LCAlZikgLSB1bmhhbmRsZWQgb3V0cHV0IGNo
YW5uZWxzIiwgbnVtYmVyT2ZJbnB1dENoYW5uZWxzLCBudW1iZXJPZk91dHB1dENoYW5uZWxzLCBz
YW1wbGVSYXRlKTsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPEF1ZGlvRGVzdGluYXRpb25NYWM+
KGNhbGxiYWNrLCBzYW1wbGVSYXRlKTsKLX0KLQotZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6aGFy
ZHdhcmVTYW1wbGVSYXRlKCkKLXsKLSAgICAvLyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgb3V0cHV0
IGRldmljZSdzIHNhbXBsZS1yYXRlLgotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNl
c3Npb24oKS5zYW1wbGVSYXRlKCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgQXVkaW9EZXN0aW5hdGlv
bjo6bWF4Q2hhbm5lbENvdW50KCkKLXsKLSAgICAvLyBGSVhNRTogcXVlcnkgdGhlIGRlZmF1bHQg
YXVkaW8gaGFyZHdhcmUgZGV2aWNlIHRvIHJldHVybiB0aGUgYWN0dWFsIG51bWJlcgotICAgIC8v
IG9mIGNoYW5uZWxzIG9mIHRoZSBkZXZpY2UuIEFsc28gc2VlIGNvcnJlc3BvbmRpbmcgRklYTUUg
aW4gY3JlYXRlKCkuCi0gICAgLy8gVGhlcmUgaXMgYSBzbWFsbCBhbW91bnQgb2YgY29kZSB3aGlj
aCBhc3N1bWVzIHN0ZXJlbyBpbiBBdWRpb0Rlc3RpbmF0aW9uTWFjIHdoaWNoCi0gICAgLy8gY2Fu
IGJlIHVwZ3JhZGVkLgotICAgIHJldHVybiAwOwotfQotCi1BdWRpb0Rlc3RpbmF0aW9uTWFjOjpB
dWRpb0Rlc3RpbmF0aW9uTWFjKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBs
ZVJhdGUpCi0gICAgOiBtX291dHB1dFVuaXQoMCkKLSAgICAsIG1fY2FsbGJhY2soY2FsbGJhY2sp
Ci0gICAgLCBtX3JlbmRlckJ1cyhBdWRpb0J1czo6Y3JlYXRlKDIsIGtCdWZmZXJTaXplLCBmYWxz
ZSkpCi0gICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKLSAgICAsIG1faXNQbGF5aW5nKGZh
bHNlKQordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OmNvbmZpZ3VyZSgpCiB7CiAgICAgLy8g
T3BlbiBhbmQgaW5pdGlhbGl6ZSBEZWZhdWx0T3V0cHV0VW5pdAogICAgIEF1ZGlvQ29tcG9uZW50
IGNvbXA7CkBAIC05OSw5OSArNTIsMzkgQEAgQXVkaW9EZXN0aW5hdGlvbk1hYzo6QXVkaW9EZXN0
aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJhY2smIGNhbGxiYWNrLCBmbG9hdCBzYW1wbGUKIAogICAg
IEFTU0VSVChjb21wKTsKIAotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvQ29tcG9uZW50SW5z
dGFuY2VOZXcoY29tcCwgJm1fb3V0cHV0VW5pdCk7CisgICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVk
aW9Db21wb25lbnRJbnN0YW5jZU5ldyhjb21wLCAmb3V0cHV0VW5pdCgpKTsKICAgICBBU1NFUlQo
IXJlc3VsdCk7CiAKLSAgICByZXN1bHQgPSBBdWRpb1VuaXRJbml0aWFsaXplKG1fb3V0cHV0VW5p
dCk7CisgICAgcmVzdWx0ID0gQXVkaW9Vbml0SW5pdGlhbGl6ZShvdXRwdXRVbml0KCkpOwogICAg
IEFTU0VSVCghcmVzdWx0KTsKIAotICAgIGNvbmZpZ3VyZSgpOwotfQotCi1BdWRpb0Rlc3RpbmF0
aW9uTWFjOjp+QXVkaW9EZXN0aW5hdGlvbk1hYygpCi17Ci0gICAgaWYgKG1fb3V0cHV0VW5pdCkK
LSAgICAgICAgQXVkaW9Db21wb25lbnRJbnN0YW5jZURpc3Bvc2UobV9vdXRwdXRVbml0KTsKLX0K
LQotdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpjb25maWd1cmUoKQotewogICAgIC8vIFNldCBy
ZW5kZXIgY2FsbGJhY2sKICAgICBBVVJlbmRlckNhbGxiYWNrU3RydWN0IGlucHV0OwogICAgIGlu
cHV0LmlucHV0UHJvYyA9IGlucHV0UHJvYzsKICAgICBpbnB1dC5pbnB1dFByb2NSZWZDb24gPSB0
aGlzOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEF1ZGlvVW5pdFNldFByb3BlcnR5KG1fb3V0cHV0
VW5pdCwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRlckNhbGxiYWNrLCBrQXVkaW9Vbml0U2Nv
cGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1dCkpOworICAgIHJlc3VsdCA9IEF1ZGlv
VW5pdFNldFByb3BlcnR5KG91dHB1dFVuaXQoKSwga0F1ZGlvVW5pdFByb3BlcnR5X1NldFJlbmRl
ckNhbGxiYWNrLCBrQXVkaW9Vbml0U2NvcGVfR2xvYmFsLCAwLCAmaW5wdXQsIHNpemVvZihpbnB1
dCkpOwogICAgIEFTU0VSVCghcmVzdWx0KTsKIAogICAgIC8vIFNldCBzdHJlYW0gZm9ybWF0CiAg
ICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIHN0cmVhbUZvcm1hdDsKLSAgICBzdHJlYW1G
b3JtYXQubVNhbXBsZVJhdGUgPSBtX3NhbXBsZVJhdGU7Ci0gICAgc3RyZWFtRm9ybWF0Lm1Gb3Jt
YXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKLSAgICBzdHJlYW1Gb3JtYXQubUZvcm1hdEZs
YWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZs
YWdJc05vbkludGVybGVhdmVkOwotICAgIHN0cmVhbUZvcm1hdC5tQml0c1BlckNoYW5uZWwgPSA4
ICogc2l6ZW9mKEZsb2F0MzIpOwotICAgIHN0cmVhbUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9
IDI7Ci0gICAgc3RyZWFtRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOwotICAgIHN0cmVhbUZv
cm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgc3RyZWFtRm9ybWF0
Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIHNldEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbihzdHJlYW1Gb3JtYXQsIHNhbXBsZVJhdGUoKSk7CiAKLSAgICByZXN1bHQg
PSBBdWRpb1VuaXRTZXRQcm9wZXJ0eShtX291dHB1dFVuaXQsIGtBdWRpb1VuaXRQcm9wZXJ0eV9T
dHJlYW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJlYW1Gb3Jt
YXQsIHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKKyAgICByZXN1bHQgPSBB
dWRpb1VuaXRTZXRQcm9wZXJ0eShvdXRwdXRVbml0KCksIGtBdWRpb1VuaXRQcm9wZXJ0eV9TdHJl
YW1Gb3JtYXQsIGtBdWRpb1VuaXRTY29wZV9JbnB1dCwgMCwgKHZvaWQqKSZzdHJlYW1Gb3JtYXQs
IHNpemVvZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pKTsKICAgICBBU1NFUlQoIXJlc3Vs
dCk7CiB9CiAKLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk1hYzo6c3RhcnQoKQotewotICAgIE9TU3Rh
dHVzIHJlc3VsdCA9IEF1ZGlvT3V0cHV0VW5pdFN0YXJ0KG1fb3V0cHV0VW5pdCk7Ci0KLSAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgc2V0SXNQbGF5aW5nKHRydWUpOwotfQotCi12b2lkIEF1ZGlv
RGVzdGluYXRpb25NYWM6OnN0b3AoKQordm9pZCBBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnByb2Nl
c3NCdXNBZnRlclJlbmRlcihBdWRpb0J1cyYgYnVzLCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMpCiB7
Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gQXVkaW9PdXRwdXRVbml0U3RvcChtX291dHB1dFVuaXQp
OwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHNldElzUGxheWluZyhmYWxzZSk7Ci19Ci0K
LS8vIFB1bGxzIG9uIG91ciBwcm92aWRlciB0byBnZXQgcmVuZGVyZWQgYXVkaW8gc3RyZWFtLgot
T1NTdGF0dXMgQXVkaW9EZXN0aW5hdGlvbk1hYzo6cmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1l
cywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCi17Ci0gICAgQXVkaW9CdWZmZXIqIGJ1ZmZlcnMg
PSBpb0RhdGEtPm1CdWZmZXJzOwotICAgIG1fcmVuZGVyQnVzLT5zZXRDaGFubmVsTWVtb3J5KDAs
IChmbG9hdCopYnVmZmVyc1swXS5tRGF0YSwgbnVtYmVyT2ZGcmFtZXMpOwotICAgIG1fcmVuZGVy
QnVzLT5zZXRDaGFubmVsTWVtb3J5KDEsIChmbG9hdCopYnVmZmVyc1sxXS5tRGF0YSwgbnVtYmVy
T2ZGcmFtZXMpOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBsb2NhbC9saXZlIGF1
ZGlvIGlucHV0LgotICAgIG1fY2FsbGJhY2sucmVuZGVyKDAsIG1fcmVuZGVyQnVzLmdldCgpLCBu
dW1iZXJPZkZyYW1lcyk7Ci0KKyAgICBjb25zdCBmbG9hdCBrTG93VGhyZXNob2xkID0gLTE7Cisg
ICAgY29uc3QgZmxvYXQga0hpZ2hUaHJlc2hvbGQgPSAxOwogICAgIC8vIENsYW1wIHZhbHVlcyBh
dCAwZGIgKGkuZS4sIFstMS4wLCAxLjBdKQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3JlbmRlckJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOyArK2kpIHsKLSAgICAgICAgQXVkaW9DaGFu
bmVsKiBjaGFubmVsID0gbV9yZW5kZXJCdXMtPmNoYW5uZWwoaSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1cy5udW1iZXJPZkNoYW5uZWxzKCk7ICsraSkgeworICAgICAgICBhdXRv
KiBjaGFubmVsID0gYnVzLmNoYW5uZWwoaSk7CiAgICAgICAgIGlmICghY2hhbm5lbC0+aXNTaWxl
bnQoKSkKICAgICAgICAgICAgIFZlY3Rvck1hdGg6OnZjbGlwKGNoYW5uZWwtPmRhdGEoKSwgMSwg
JmtMb3dUaHJlc2hvbGQsICZrSGlnaFRocmVzaG9sZCwgY2hhbm5lbC0+bXV0YWJsZURhdGEoKSwg
MSwgbnVtYmVyT2ZGcmFtZXMpOwogICAgIH0KLQotICAgIHJldHVybiBub0VycjsKLX0KLQotdm9p
ZCBBdWRpb0Rlc3RpbmF0aW9uTWFjOjpzZXRJc1BsYXlpbmcoYm9vbCBpc1BsYXlpbmcpCi17Ci0g
ICAgaWYgKG1faXNQbGF5aW5nID09IGlzUGxheWluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9pc1BsYXlpbmcgPSBpc1BsYXlpbmc7Ci0gICAgbV9jYWxsYmFjay5pc1BsYXlpbmdEaWRDaGFu
Z2UoKTsKLX0KLQotLy8gRGVmYXVsdE91dHB1dFVuaXQgY2FsbGJhY2sKLU9TU3RhdHVzIEF1ZGlv
RGVzdGluYXRpb25NYWM6OmlucHV0UHJvYyh2b2lkKiB1c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVy
QWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFtcCosIFVJbnQzMiAvKmJ1c051bWJlciov
LCBVSW50MzIgbnVtYmVyT2ZGcmFtZXMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQotewotICAg
IEF1ZGlvRGVzdGluYXRpb25NYWMqIGF1ZGlvT3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXVkaW9EZXN0
aW5hdGlvbk1hYyo+KHVzZXJEYXRhKTsKLSAgICByZXR1cm4gYXVkaW9PdXRwdXQtPnJlbmRlcihu
dW1iZXJPZkZyYW1lcywgaW9EYXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0j
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShNQUMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1hYy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRGVzdGluYXRpb25NYWMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThiMTBhYmViZDVkYTQ5NTFjMDllMTk2ZjRl
MzcyMDQxMWZiYzc2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9EZXN0aW5hdGlvbk1h
Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gK
LSNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk1hY19oCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgot
I2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKLSNpbmNsdWRlIDxBdWRpb1VuaXQvQXVkaW9V
bml0Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIEFuIEF1ZGlvRGVzdGluYXRpb24gdXNpbmcgQ29yZUF1ZGlvJ3MgZGVmYXVsdCBvdXRwdXQg
QXVkaW9Vbml0Ci0KLWNsYXNzIEF1ZGlvRGVzdGluYXRpb25NYWMgOiBwdWJsaWMgQXVkaW9EZXN0
aW5hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgQXVkaW9EZXN0aW5hdGlvbk1hYyhBdWRpb0lPQ2FsbGJh
Y2smLCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICB2aXJ0dWFsIH5BdWRpb0Rlc3RpbmF0aW9uTWFj
KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb25maWd1cmUoKTsKLQotICAgIC8vIERlZmF1bHRP
dXRwdXRVbml0IGNhbGxiYWNrCi0gICAgc3RhdGljIE9TU3RhdHVzIGlucHV0UHJvYyh2b2lkKiB1
c2VyRGF0YSwgQXVkaW9Vbml0UmVuZGVyQWN0aW9uRmxhZ3MqLCBjb25zdCBBdWRpb1RpbWVTdGFt
cCosIFVJbnQzMiBidXNOdW1iZXIsIFVJbnQzMiBudW1iZXJPZkZyYW1lcywgQXVkaW9CdWZmZXJM
aXN0KiBpb0RhdGEpOwotCi0gICAgT1NTdGF0dXMgcmVuZGVyKFVJbnQzMiBudW1iZXJPZkZyYW1l
cywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpOwotICAgIHZvaWQgc2V0SXNQbGF5aW5nKGJvb2wp
OwotCi0gICAgdm9pZCBzdGFydCgpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OwotICAgIGJvb2wgaXNQbGF5aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1BsYXlpbmc7IH0K
LSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zYW1wbGVS
YXRlOyB9Ci0KLSAgICBBdWRpb1VuaXQgbV9vdXRwdXRVbml0OwotICAgIEF1ZGlvSU9DYWxsYmFj
ayYgbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8QXVkaW9CdXM+IG1fcmVuZGVyQnVzOwotCi0gICAg
ZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIGJvb2wgbV9pc1BsYXlpbmc7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBBdWRpb0Rlc3RpbmF0aW9uTWFjX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25D
b2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0MjAwOWNkZDA2MzU2NzBjYTFiODdhYWQ2MDRhMWE1
MDkwMTVlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2Nr
L01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9ja0F1ZGlvRGVzdGluYXRpb25D
b2NvYS5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIkNBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIldlYkF1ZGlvQnVmZmVyTGlzdC5oIgorI2luY2x1
ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NvbnN0IGludCBrUmVuZGVyQnVmZmVyU2l6ZSA9IDEyODsKKworTW9ja0F1ZGlvRGVzdGlu
YXRpb25Db2NvYTo6TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYShBdWRpb0lPQ2FsbGJhY2smIGNh
bGxiYWNrLCBmbG9hdCBzYW1wbGVSYXRlKQorICAgIDogQXVkaW9EZXN0aW5hdGlvbkNvY29hKGNh
bGxiYWNrLCBzYW1wbGVSYXRlKQorICAgICwgbV93b3JrUXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
Ik1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgUmVuZGVyIFF1ZXVlIikpCisgICAgLCBtX3RpbWVy
KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJk1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnRp
Y2spCit7Cit9CisKK3ZvaWQgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYTo6c3RhcnQoKQorewor
ICAgIG1fdGltZXIuc3RhcnRSZXBlYXRpbmcoU2Vjb25kcyB7IG1fbnVtYmVyT2ZGcmFtZXNUb1By
b2Nlc3MgLyBzYW1wbGVSYXRlKCkgfSk7CisgICAgc2V0SXNQbGF5aW5nKHRydWUpOworfQorCit2
b2lkIE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E6OnN0b3AoKQoreworICAgIG1fdGltZXIuc3Rv
cCgpOworICAgIHNldElzUGxheWluZyhmYWxzZSk7CisKKyAgICBCaW5hcnlTZW1hcGhvcmUgc2Vt
YXBob3JlOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZV0geworICAgICAg
ICBzZW1hcGhvcmUuc2lnbmFsKCk7CisgICAgfSk7CisgICAgc2VtYXBob3JlLndhaXQoKTsKK30K
Kwordm9pZCBNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hOjp0aWNrKCkKK3sKKyAgICBtX3dvcmtR
dWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlKCksIG51bWJlck9m
RnJhbWVzVG9Qcm9jZXNzID0gbV9udW1iZXJPZkZyYW1lc1RvUHJvY2Vzc10geworICAgICAgICBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gc3RyZWFtRm9ybWF0OworICAgICAgICBzZXRBdWRp
b1N0cmVhbUJhc2ljRGVzY3JpcHRpb24oc3RyZWFtRm9ybWF0LCBzYW1wbGVSYXRlKTsKKworICAg
ICAgICBXZWJBdWRpb0J1ZmZlckxpc3Qgd2ViQXVkaW9CdWZmZXJMaXN0IHsgc3RyZWFtRm9ybWF0
LCBudW1iZXJPZkZyYW1lc1RvUHJvY2VzcyB9OworICAgICAgICBBdWRpb0Rlc3RpbmF0aW9uQ29j
b2E6OmlucHV0UHJvYyh0aGlzLCAwLCAwLCAwLCBudW1iZXJPZkZyYW1lc1RvUHJvY2Vzcywgd2Vi
QXVkaW9CdWZmZXJMaXN0Lmxpc3QoKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVjZDRkOTA5ZDJjNzQzNjA1ZjJhMWUwMzIzYWQ5MzNmZDUyOWNiNjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tBdWRpb0Rlc3RpbmF0
aW9uQ29jb2EuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgIkF1
ZGlvRGVzdGluYXRpb25Db2NvYS5oIgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlv
SU9DYWxsYmFjazsKKworY2xhc3MgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYSBmaW5hbCA6IHB1
YmxpYyBBdWRpb0Rlc3RpbmF0aW9uQ29jb2EgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9EZXN0aW5hdGlvbj4g
Y3JlYXRlKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBsZVJhdGUpIHsgcmV0
dXJuIG1ha2VVbmlxdWU8TW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYT4oY2FsbGJhY2ssIHNhbXBs
ZVJhdGUpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgTW9ja0F1ZGlvRGVzdGluYXRpb25Db2NvYShB
dWRpb0lPQ2FsbGJhY2smLCBmbG9hdCBzYW1wbGVSYXRlKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHN0YXJ0KCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICB2b2lkIHRpY2so
KTsKKworICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIFJ1bkxvb3A6OlRpbWVy
PE1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2E+IG1fdGltZXI7CisgICAgdWludDMyX3QgbV9udW1i
ZXJPZkZyYW1lc1RvUHJvY2VzcyB7IDM4NCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oQ09DT0EpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZjNjN2UzZTQyZjFiNzkwNDJlYzg5MzRh
ZWQ1NDQ2ZTI3ZGI3ZTcxMi4uZGUzODc1NGE5NjVkMzI3Mjg2ZDQyZDczODhjMTI5YjNhOTZmMDIw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTIyLDYgKzEyMiw3IEBA
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgi
CiAjaW5jbHVkZSAiTWVtb3J5SW5mby5oIgorI2luY2x1ZGUgIk1vY2tBdWRpb0Rlc3RpbmF0aW9u
Q29jb2EuaCIKICNpbmNsdWRlICJNb2NrTGliV2ViUlRDUGVlckNvbm5lY3Rpb24uaCIKICNpbmNs
dWRlICJNb2NrUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJNb2NrUGFnZU92ZXJsYXlDbGllbnQu
aCIKQEAgLTU4MCw2ICs1ODEsMTAgQEAgSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQmIGRv
Y3VtZW50KQogI2VuZGlmCiAKICAgICBtX3Vuc3VzcGVuZGFibGVBY3RpdmVET01PYmplY3QgPSBu
dWxscHRyOworCisjaWYgUExBVEZPUk0oQ09DT0EpICYmICBFTkFCTEUoV0VCX0FVRElPKQorICAg
IEF1ZGlvRGVzdGluYXRpb25Db2NvYTo6Y3JlYXRlT3ZlcnJpZGUgPSBudWxscHRyOworI2VuZGlm
CiB9CiAKIERvY3VtZW50KiBJbnRlcm5hbHM6OmNvbnRleHREb2N1bWVudCgpIGNvbnN0CkBAIC00
MDc0LDcgKzQwNzksNiBAQCB2b2lkIEludGVybmFsczo6c2VuZE1lZGlhQ29udHJvbEV2ZW50KE1l
ZGlhQ29udHJvbEV2ZW50IGV2ZW50KQogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TRVNTSU9OKQog
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKLQogdm9pZCBJbnRlcm5hbHM6OnNldEF1ZGlvQ29udGV4
dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmIGNvbnRleHQsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rp
b25zU3RyaW5nKQogewogICAgIEF1ZGlvQ29udGV4dDo6QmVoYXZpb3JSZXN0cmljdGlvbnMgcmVz
dHJpY3Rpb25zID0gY29udGV4dC5iZWhhdmlvclJlc3RyaWN0aW9ucygpOwpAQCAtNDA5Myw2ICs0
MDk3LDEyIEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoQXVk
aW9Db250ZXh0JiBjb250ZXh0LCBTdHJpbmdWaWV3IHJlCiAgICAgY29udGV4dC5hZGRCZWhhdmlv
clJlc3RyaWN0aW9uKHJlc3RyaWN0aW9ucyk7CiB9CiAKK3ZvaWQgSW50ZXJuYWxzOjp1c2VNb2Nr
QXVkaW9EZXN0aW5hdGlvbkNvY29hKCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBBdWRp
b0Rlc3RpbmF0aW9uQ29jb2E6OmNyZWF0ZU92ZXJyaWRlID0gTW9ja0F1ZGlvRGVzdGluYXRpb25D
b2NvYTo6Y3JlYXRlOworI2VuZGlmCit9CiAjZW5kaWYKIAogdm9pZCBJbnRlcm5hbHM6OnNpbXVs
YXRlU3lzdGVtU2xlZXAoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXgg
MTlmNzg5ZjkwMzBmOWEyNDg2ODdlOTVmMDFmZGFhZGRlNTg1ZGRjZS4uZWZjNDA2MTRhZTVkYzgz
NjFjNzljMjMzMTliMGEyOTk2ZmVmNTkwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5o
CkBAIC02MzMsNiArNjMzLDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAg
ICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhBdWRpb0NvbnRleHQmLCBTdHJpbmdW
aWV3IHJlc3RyaWN0aW9uc1N0cmluZyk7CisgICAgdm9pZCB1c2VNb2NrQXVkaW9EZXN0aW5hdGlv
bkNvY29hKCk7CiAjZW5kaWYKIAogICAgIHZvaWQgc2ltdWxhdGVTeXN0ZW1TbGVlcCgpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDAxZGIyNDJkMGJjOTk0MjA2
MDE1NjQ2NWJmNzcxZDE0MjdkYTJjZGMuLmQ4ZmFhMmRjYzdhYWFkODE3ZDY5MTZiNGFjNzMxNGQ1
YjAxNmJmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTYxMiw2ICs2
MTIsOCBAQCBlbnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICBbQ29uZGl0aW9uYWw9TUVESUFf
U1RSRUFNXSB2b2lkIHNldE1vY2tNZWRpYUNhcHR1cmVEZXZpY2VzRW5hYmxlZChib29sZWFuIGVu
YWJsZWQpOwogICAgIFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU1dIHZvaWQgc2V0Q3VzdG9tUHJp
dmF0ZVJlY29yZGVyQ3JlYXRvcigpOwogCisgICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJT10gdm9p
ZCB1c2VNb2NrQXVkaW9EZXN0aW5hdGlvbkNvY29hKCk7CisKICAgICBbQ29uZGl0aW9uYWw9V0VC
X1JUQ10gdm9pZCBlbXVsYXRlUlRDUGVlckNvbm5lY3Rpb25QbGF0Zm9ybUV2ZW50KFJUQ1BlZXJD
b25uZWN0aW9uIGNvbm5lY3Rpb24sIERPTVN0cmluZyBhY3Rpb24pOwogICAgIFtDb25kaXRpb25h
bD1XRUJfUlRDXSB2b2lkIHVzZU1vY2tSVENQZWVyQ29ubmVjdGlvbkZhY3RvcnkoRE9NU3RyaW5n
IHRlc3RDYXNlKTsKICAgICBbQ29uZGl0aW9uYWw9V0VCX1JUQ10gdm9pZCBzZXRJQ0VDYW5kaWRh
dGVGaWx0ZXJpbmcoYm9vbGVhbiBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMTVjMzgwMDE2NWRkM2NmZDJi
NGM4NjI1MjNiNjM2OWZjYzdkNDAxLi5kZjk1OGJmOGJlZjE0N2E1Y2M3YmIyNWYzZDU1Mzk5YTQ0
ZWUzZDBlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTAtMTggIHlvdWVubiBmYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFNoYXJlIGNvZGUgYmV0d2VlbiBBdWRpb0Rl
c3RpbmF0aW9uSU9TIGFuZCBBdWRpb0Rlc3RpbmF0aW9uTWFjCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwNDcKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzU2MzQwODY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8tZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLmh0
bWw6CisKIDIwMTktMTAtMTcgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld29yayBmcm9udGVuZCBhZ2VudCBjb25zdHJ1Y3Rpb24g
dG8gYWxsb3cgY29tbWFuZHMvZXZlbnRzIHRvIGJlIGNvbnRyb2xsZWQgYnkgdGhlIHJlbGF0ZWQg
dGFyZ2V0J3MgdHlwZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9n
ZXRVc2VyTWVkaWEtd2ViYXVkaW8tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8tZXhwZWN0ZWQudHh0CmluZGV4IGIyYTg5MDBk
ZDUxNjQ1NjQzNzM1OTNhZjA0M2E5NGQ3ODVmNjQwYjkuLmY3NGQ4ODg4MmM5ODg0YmM1ZTNjODVi
NjZlM2M2OGRmNGZkYmM3OGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby1leHBlY3RlZC50eHQKQEAgLTEs
NCArMSw1IEBACiAKIFBBU1MgUGx1Z2dpbmcgaW4gZ2V0VXNlck1lZGlhIGF1ZGlvIHN0cmVhbSBp
bnRvIFdlYiBBdWRpbyAKIFBBU1MgV2ViIEF1ZGlvIHNob3VsZCB3b3JrIGV2ZW4gaWYgbnVtYmVy
IG9mIGNoYW5uZWxzIG9mIGEgdHJhY2sgaW5jcmVhc2VzIGZyb20gMSB0byAyIAorUEFTUyBXZWIg
QXVkaW8gc2hvdWxkIHdvcmsgd2l0aCBtb2NrIGF1ZGlvIGRlc3RpbmF0aW9uIAogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEtd2ViYXVkaW8u
aHRtbAppbmRleCBhZTVmMDBkMGQxOTIxMTQyM2ZjYmY0NmQ2ZGM0NTc0ZTQ4NTVhZjliLi43MjA0
MzVhNzdiN2FiMmMzYjZlMjhlMzg3MmZjZTA2YmM3MDRlMjE3IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS13ZWJhdWRpby5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXdlYmF1ZGlvLmh0bWwKQEAg
LTY1LDYgKzY1LDI2IEBAIHByb21pc2VfdGVzdChhc3luYyAodGVzdCkgPT4gewogICAgIHNvdXJj
ZS5kaXNjb25uZWN0KHNjcmlwdCk7CiAgICAgc2NyaXB0LmRpc2Nvbm5lY3QoYXVkaW9Db250ZXh0
LmRlc3RpbmF0aW9uKTsKIH0sICJXZWIgQXVkaW8gc2hvdWxkIHdvcmsgZXZlbiBpZiBudW1iZXIg
b2YgY2hhbm5lbHMgb2YgYSB0cmFjayBpbmNyZWFzZXMgZnJvbSAxIHRvIDIiKTsKKworcHJvbWlz
ZV90ZXN0KGFzeW5jICh0ZXN0KSA9PiB7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKQorICAg
ICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoIkludGVybmFscyBBUEkgcmVxdWlyZWQiKTsKKyAg
ICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRp
YSh7IGF1ZGlvOiB0cnVlLCB2aWRlbzogZmFsc2UgfSk7CisgICAgaW50ZXJuYWxzLnVzZU1vY2tB
dWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsKKworICAgIHZhciBhdWRpb0NvbnRleHQgPSBuZXcgd2Vi
a2l0QXVkaW9Db250ZXh0KCk7CisgICAgdmFyIGFuYWx5emVyID0gYXVkaW9Db250ZXh0LmNyZWF0
ZUFuYWx5c2VyKCk7CisgICAgYW5hbHl6ZXIuZmZ0U2l6ZSA9IDI1NjsKKyAgICBsZXQgc291cmNl
ID0gYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKHN0cmVhbSk7CisgICAgc291
cmNlLmNvbm5lY3QoYW5hbHl6ZXIpOworICAgIGFuYWx5emVyLmNvbm5lY3QoYXVkaW9Db250ZXh0
LmRlc3RpbmF0aW9uKTsKKworICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGlt
ZW91dChyZXNvbHZlLCA1MDApKTsKKworICAgIHNvdXJjZS5kaXNjb25uZWN0KGFuYWx5emVyKTsK
KyAgICBhbmFseXplci5kaXNjb25uZWN0KGF1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbik7Cit9LCAi
V2ViIEF1ZGlvIHNob3VsZCB3b3JrIHdpdGggbW9jayBhdWRpbyBkZXN0aW5hdGlvbiIpOworCiAg
ICAgICAgIDwvc2NyaXB0PgogICAgIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>