<?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>227205</bug_id>
          
          <creation_ts>2021-06-20 23:41:20 -0700</creation_ts>
          <short_desc>Merge AudioFileReaderMac and AudioFileReaderIOS into AudioFileReaderCocoa</short_desc>
          <delta_ts>2021-06-21 21:22:04 -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>
          
          <blocked>227110</blocked>
    
    <blocked>227208</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jean-Yves Avenard [:jya]">jean-yves.avenard</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1771219</commentid>
    <comment_count>0</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-20 23:41:20 -0700</bug_when>
    <thetext>The files are mostly identical. Some changes/fixes appears to have been made over the years into one but not the other and vice-versa leading them to diverge slightly.

Let&apos;s deal with a unique class which will make fixing bug 227110 easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771220</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-20 23:42:05 -0700</bug_when>
    <thetext>&lt;rdar://problem/79549527&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771223</commentid>
    <comment_count>2</comment_count>
      <attachid>431832</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-21 00:36:32 -0700</bug_when>
    <thetext>Created attachment 431832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771289</commentid>
    <comment_count>3</comment_count>
      <attachid>431832</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-21 08:26:53 -0700</bug_when>
    <thetext>Comment on attachment 431832
Patch

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

r=me with nits.

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:103
&gt; +    : m_data(nullptr)

These data members should use inline initialization in the header. Also please use nullptr instead of 0 for pointers.

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:108
&gt; +    RetainPtr&lt;CFStringRef&gt; filePathString = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, filePath, kCFStringEncodingUTF8));

auto

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:109
&gt; +    RetainPtr&lt;CFURLRef&gt; urlRef = adoptCF(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, filePathString.get(), kCFURLPOSIXPathStyle, false));

auto

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:118
&gt; +    , m_audioFileID(0)

These should use inline initialization in the header

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:125
&gt; +        m_extAudioFileRef = 0;

= nullptr;

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:143
&gt; +    AudioFileReader* audioFileReader = static_cast&lt;AudioFileReader*&gt;(clientData);

auto

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:145
&gt; +    size_t dataSize = audioFileReader-&gt;dataSize();

auto

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:146
&gt; +    const void* data = audioFileReader-&gt;data();

auto

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.h:47
&gt; +    explicit AudioFileReader(const void* data, size_t dataSize);

We usually don&apos;t use explicit for constructors with 2 mandatory parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771430</commentid>
    <comment_count>4</comment_count>
      <attachid>431832</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-06-21 13:52:30 -0700</bug_when>
    <thetext>Comment on attachment 431832
Patch

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

&gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:56
&gt; +#if PLATFORM(IOS_FAMILY)
&gt; +#include &lt;wtf/SoftLinking.h&gt;
&gt; +
&gt; +SOFT_LINK_FRAMEWORK(AudioToolbox)
&gt; +SOFT_LINK(AudioToolbox, AudioFileClose, OSStatus, (AudioFileID inAudioFile), (inAudioFile))
&gt; +SOFT_LINK(AudioToolbox, AudioFileOpenWithCallbacks, OSStatus, (void *inClientData, AudioFile_ReadProc inReadFunc, AudioFile_WriteProc inWriteFunc, AudioFile_GetSizeProc inGetSizeFunc, AudioFile_SetSizeProc inSetSizeFunc, AudioFileTypeID inFileTypeHint, AudioFileID *outAudioFile), (inClientData, inReadFunc, inWriteFunc, inGetSizeFunc, inSetSizeFunc, inFileTypeHint, outAudioFile))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileDispose, OSStatus, (ExtAudioFileRef inExtAudioFile), (inExtAudioFile))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileGetProperty, OSStatus, (ExtAudioFileRef inExtAudioFile, ExtAudioFilePropertyID inPropertyID, UInt32 *ioPropertyDataSize, void *outPropertyData), (inExtAudioFile, inPropertyID, ioPropertyDataSize, outPropertyData))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileRead, OSStatus, (ExtAudioFileRef inExtAudioFile, UInt32 *ioNumberFrames, AudioBufferList *ioData), (inExtAudioFile, ioNumberFrames, ioData))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileSetProperty, OSStatus, (ExtAudioFileRef inExtAudioFile, ExtAudioFilePropertyID inPropertyID, UInt32 inPropertyDataSize, const void *inPropertyData), (inExtAudioFile, inPropertyID, inPropertyDataSize, inPropertyData))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileWrapAudioFileID, OSStatus, (AudioFileID inFileID, Boolean inForWriting, ExtAudioFileRef *outExtAudioFile), (inFileID, inForWriting, outExtAudioFile))
&gt; +SOFT_LINK(AudioToolbox, ExtAudioFileOpenURL, OSStatus, (CFURLRef inURL, ExtAudioFileRef* outExtAudioFile), (inURL, outExtAudioFile))
&gt; +#endif

It is fine to do in a separate patch, but this should be in a (new) AudioToolboxSoftLink.cpp|.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771490</commentid>
    <comment_count>5</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-21 15:28:29 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; Comment on attachment 431832 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=431832&amp;action=review
&gt; 
&gt; r=me with nits.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:103
&gt; &gt; +    : m_data(nullptr)
&gt; 
&gt; These data members should use inline initialization in the header. Also
&gt; please use nullptr instead of 0 for pointers.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:108
&gt; &gt; +    RetainPtr&lt;CFStringRef&gt; filePathString = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, filePath, kCFStringEncodingUTF8));
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:109
&gt; &gt; +    RetainPtr&lt;CFURLRef&gt; urlRef = adoptCF(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, filePathString.get(), kCFURLPOSIXPathStyle, false));
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:118
&gt; &gt; +    , m_audioFileID(0)
&gt; 
&gt; These should use inline initialization in the header
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:125
&gt; &gt; +        m_extAudioFileRef = 0;
&gt; 
&gt; = nullptr;
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:143
&gt; &gt; +    AudioFileReader* audioFileReader = static_cast&lt;AudioFileReader*&gt;(clientData);
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:145
&gt; &gt; +    size_t dataSize = audioFileReader-&gt;dataSize();
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:146
&gt; &gt; +    const void* data = audioFileReader-&gt;data();
&gt; 
&gt; auto
&gt; 
&gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.h:47
&gt; &gt; +    explicit AudioFileReader(const void* data, size_t dataSize);
&gt; 
&gt; We usually don&apos;t use explicit for constructors with 2 mandatory parameters.

All this code is existing and a direct copy/paste of what is already there. 
It seems out of scope to me to not just merge but also modify the resulting code.
Doing so is error prone and make for harder reviews. 
IMHO it should always be avoided</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771491</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-21 15:29:54 -0700</bug_when>
    <thetext>(In reply to Jean-Yves Avenard [:jya] from comment #5)
&gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; Comment on attachment 431832 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=431832&amp;action=review
&gt; &gt; 
&gt; &gt; r=me with nits.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:103
&gt; &gt; &gt; +    : m_data(nullptr)
&gt; &gt; 
&gt; &gt; These data members should use inline initialization in the header. Also
&gt; &gt; please use nullptr instead of 0 for pointers.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:108
&gt; &gt; &gt; +    RetainPtr&lt;CFStringRef&gt; filePathString = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, filePath, kCFStringEncodingUTF8));
&gt; &gt; 
&gt; &gt; auto
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:109
&gt; &gt; &gt; +    RetainPtr&lt;CFURLRef&gt; urlRef = adoptCF(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, filePathString.get(), kCFURLPOSIXPathStyle, false));
&gt; &gt; 
&gt; &gt; auto
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:118
&gt; &gt; &gt; +    , m_audioFileID(0)
&gt; &gt; 
&gt; &gt; These should use inline initialization in the header
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:125
&gt; &gt; &gt; +        m_extAudioFileRef = 0;
&gt; &gt; 
&gt; &gt; = nullptr;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:143
&gt; &gt; &gt; +    AudioFileReader* audioFileReader = static_cast&lt;AudioFileReader*&gt;(clientData);
&gt; &gt; 
&gt; &gt; auto
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:145
&gt; &gt; &gt; +    size_t dataSize = audioFileReader-&gt;dataSize();
&gt; &gt; 
&gt; &gt; auto
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:146
&gt; &gt; &gt; +    const void* data = audioFileReader-&gt;data();
&gt; &gt; 
&gt; &gt; auto
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.h:47
&gt; &gt; &gt; +    explicit AudioFileReader(const void* data, size_t dataSize);
&gt; &gt; 
&gt; &gt; We usually don&apos;t use explicit for constructors with 2 mandatory parameters.
&gt; 
&gt; All this code is existing and a direct copy/paste of what is already there. 
&gt; It seems out of scope to me to not just merge but also modify the resulting
&gt; code.
&gt; Doing so is error prone and make for harder reviews. 
&gt; IMHO it should always be avoided

I already reviewed it so what&apos;s the hold up? Cleaning up old code is important too and this is a good opportunity to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771492</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-06-21 15:31:15 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; (In reply to Jean-Yves Avenard [:jya] from comment #5)
&gt; &gt; (In reply to Chris Dumez from comment #3)
&gt; &gt; &gt; Comment on attachment 431832 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=431832&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; r=me with nits.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:103
&gt; &gt; &gt; &gt; +    : m_data(nullptr)
&gt; &gt; &gt; 
&gt; &gt; &gt; These data members should use inline initialization in the header. Also
&gt; &gt; &gt; please use nullptr instead of 0 for pointers.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:108
&gt; &gt; &gt; &gt; +    RetainPtr&lt;CFStringRef&gt; filePathString = adoptCF(CFStringCreateWithCString(kCFAllocatorDefault, filePath, kCFStringEncodingUTF8));
&gt; &gt; &gt; 
&gt; &gt; &gt; auto
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:109
&gt; &gt; &gt; &gt; +    RetainPtr&lt;CFURLRef&gt; urlRef = adoptCF(CFURLCreateWithFileSystemPath(kCFAllocatorDefault, filePathString.get(), kCFURLPOSIXPathStyle, false));
&gt; &gt; &gt; 
&gt; &gt; &gt; auto
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:118
&gt; &gt; &gt; &gt; +    , m_audioFileID(0)
&gt; &gt; &gt; 
&gt; &gt; &gt; These should use inline initialization in the header
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:125
&gt; &gt; &gt; &gt; +        m_extAudioFileRef = 0;
&gt; &gt; &gt; 
&gt; &gt; &gt; = nullptr;
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:143
&gt; &gt; &gt; &gt; +    AudioFileReader* audioFileReader = static_cast&lt;AudioFileReader*&gt;(clientData);
&gt; &gt; &gt; 
&gt; &gt; &gt; auto
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:145
&gt; &gt; &gt; &gt; +    size_t dataSize = audioFileReader-&gt;dataSize();
&gt; &gt; &gt; 
&gt; &gt; &gt; auto
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.cpp:146
&gt; &gt; &gt; &gt; +    const void* data = audioFileReader-&gt;data();
&gt; &gt; &gt; 
&gt; &gt; &gt; auto
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/audio/cocoa/AudioFileReaderCocoa.h:47
&gt; &gt; &gt; &gt; +    explicit AudioFileReader(const void* data, size_t dataSize);
&gt; &gt; &gt; 
&gt; &gt; &gt; We usually don&apos;t use explicit for constructors with 2 mandatory parameters.
&gt; &gt; 
&gt; &gt; All this code is existing and a direct copy/paste of what is already there. 
&gt; &gt; It seems out of scope to me to not just merge but also modify the resulting
&gt; &gt; code.
&gt; &gt; Doing so is error prone and make for harder reviews. 
&gt; &gt; IMHO it should always be avoided
&gt; 
&gt; I already reviewed it so what&apos;s the hold up? Cleaning up old code is
&gt; important too and this is a good opportunity to do so.

I&apos;ll also note that the 2 files getting merged had already diverged so it&apos;s not a straight move anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771513</commentid>
    <comment_count>8</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-21 16:23:42 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; &gt; I already reviewed it so what&apos;s the hold up? Cleaning up old code is
&gt; &gt; important too and this is a good opportunity to do so.

Oh, I agreed it should be cleaned up. But I believe it should be done so in a follow-up change.

&gt; I&apos;ll also note that the 2 files getting merged had already diverged so it&apos;s
&gt; not a straight move anyway.

How they diverge is actually a good example on why I believe what I mentioned above is good practice.

When the AudioFileReaderIOS file was created, in the Changelog you read (bug 126654):
```* platform/audio/ios/AudioFileReaderIOS.cpp: Copied from Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp.```

But it&apos;s not, on-the-fly fixes had already been applied. So when comparing the two files you now have to guess on what was done and when to determine if the changes are important or not as you can&apos;t rely on the changelog and comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771527</commentid>
    <comment_count>9</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-21 16:38:16 -0700</bug_when>
    <thetext>Just to be clear, I do believe that the changes you mentioned absolutely need to go in. I just think they should go in a follow-up change.

However, considering the triviality of the changes, I will do them here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771588</commentid>
    <comment_count>10</comment_count>
      <attachid>431942</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-21 20:50:20 -0700</bug_when>
    <thetext>Created attachment 431942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771597</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-21 21:22:01 -0700</bug_when>
    <thetext>Committed r279102 (239019@main): &lt;https://commits.webkit.org/239019@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 431942.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431832</attachid>
            <date>2021-06-21 00:36:32 -0700</date>
            <delta_ts>2021-06-21 20:50:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227205-20210621173631.patch</filename>
            <type>text/plain</type>
            <size>49201</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDA1ZTQ4MDc0ZjQxNzQ3
MWMwOTkyYzg0NmY0YzJkMTk4MWJmOThjNS4uMTZlNTQ5YWUyNjkzNTY2NTc0M2I2ZTQ0YmJlOWUw
Nzc1ZTU4Mzc4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTA2LTIxICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVyZ2UgQXVkaW9GaWxl
UmVhZGVyTWFjIGFuZCBBdWRpb0ZpbGVSZWFkZXJJT1MgaW50byBBdWRpb0ZpbGVSZWFkZXJDb2Nv
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTU0OTUyNz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNZXJnZSBBdWRpb0ZpbGVSZWFkZXJJT1MgYW5k
IEF1ZGlvRmlsZVJlYWRlck1hYyBpbnRvIEF1ZGlvRmlsZVJlYWRlckNvY29hLgorICAgICAgICBO
byBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtl
OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlv
RmlsZVJlYWRlckNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUF1ZGlvQnVm
ZmVyTGlzdCk6IG1ha2UgbWV0aG9kIHN0YXRpYyBhcyBpdCdzIG5vdCB1c2VkIGVsc2V3aGVyZS4K
KyAgICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QpOiBtYWtlIG1ldGhvZCBz
dGF0aWMgYXMgaXQncyBub3QgdXNlZCBlbHNld2hlcmUuCisgICAgICAgIChXZWJDb3JlOjp2YWxp
ZGF0ZUF1ZGlvQnVmZmVyTGlzdCk6IG1ha2UgbWV0aG9kIHN0YXRpYyBhcyBpdCdzIG5vdCB1c2Vk
IGVsc2V3aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxl
UmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJl
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9t
SW5NZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlv
RmlsZVJlYWRlckNvY29hLmg6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRhU2l6ZSBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRl
cklPUy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVS
ZWFkZXJNYWMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b0ZpbGVSZWFkZXJNYWMuaDogUmVtb3ZlZC4KKwogMjAyMS0wNi0yMCAgSmVhbi1ZdmVzIEF2ZW5h
cmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIFNhZmFyaSAxNSBicmVha3MgYWxsIFdlYiBB
dWRpbyBjb250ZW50IHVzaW5nIFdlYk0gT3B1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRl
eCAyYjM5MDYxMmM4NTU3ZWEwNjM0ZDZjNDZiMzE3MTBhNTM3YWI0NTNlLi5iYzY3YzhhZjZlNzUy
NDRjZGI5N2U1MTA0YWIwYjU1MTEzOTc4YmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpA
QCAtMjA1LDcgKzIwNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2F1ZGlvL2NvY29hL1dlYkF1ZGlvQnVmZmVyTGlzdC5jcHAKIAogICAgIHBsYXRmb3JtL2F1
ZGlvL21hYy9BdWRpb0J1c01hYy5tbQotICAgIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVS
ZWFkZXJNYWMuY3BwCiAgICAgcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvSGFyZHdhcmVMaXN0ZW5l
ck1hYy5jcHAKICAgICBwbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzQ29jb2EudHh0CmluZGV4IDQ3MWQ4YTUxYmEyM2NiNWI4Y2Q1MzE0MzQ5MmI2MTE1NmU0
NWE1YjMuLmRlZTcyNWZhZTMxODZiNjcyNzkxNzdlNjcyNjRmNzJiNzNlOTUyNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dApAQCAtMjI1LDEzICsyMjUsMTEgQEAgcGxhdGZvcm0vYXVkaW8vY29j
b2EvQ0FSaW5nQnVmZmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vY29jb2EvTWVkaWFTZXNzaW9uTWFu
YWdlckNvY29hLm1tCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9XZWJBdWRpb0J1ZmZlckxpc3QuY3Bw
CiBwbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9PdXRwdXRVbml0QWRhcHRvcklPUy5jcHAgQG5vLXVu
aWZ5Ci1wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBAbm8tdW5pZnkK
IHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb1Nlc3Npb25JT1MubW0gQG5vLXVuaWZ5CiBwbGF0Zm9y
bS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uSGVscGVySU9TLm1tIEBuby11bmlmeQogcGxhdGZvcm0v
YXVkaW8vaW9zL01lZGlhU2Vzc2lvbk1hbmFnZXJJT1MubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9CdXNNYWMubW0KIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb091dHB1dFVu
aXRBZGFwdG9yTWFjLmNwcAotcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5j
cHAKIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0hhcmR3YXJlTGlzdGVuZXJNYWMuY3BwCiBwbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TZXNzaW9uTWFjLm1tCiBwbGF0Zm9ybS9hdWRpby9tYWMvRkZU
RnJhbWVNYWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggN2JhYmQ1Mzg3MDFhNzdhODkwZjc2MWQyNGQ4OTAzYjg1ZTBhNzEz
Zi4uMTNjZTNlMDY5MDM2ZjZhZWY4M2M5YTkxYzYzMDRlNDQ1ZjIxNzU1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDM4MSw4
ICs0MzgxLDYgQEAKIAkJQ0Q1MzkzRDQxNzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1MzkzRDIx
NzVFMDE4NjAwQzA3MTIzIC8qIEpTTWVtb3J5SW5mby5oICovOyB9OwogCQlDRDU0QTc2MjE4MEY5
RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1NEE3NjAxODBG
OUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAq
LzsgfTsKIAkJQ0Q1NEE3NjMxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDU0QTc2MTE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMuaCAqLzsgfTsKLQkJQ0Q1NTk2OTExNDc1QjY3ODAwMUQwQkQwIC8qIEF1
ZGlvRmlsZVJlYWRlcklPUy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRDU1OTY4RjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9T
LmNwcCAqLzsgfTsKLQkJQ0Q1NTk2OTIxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRl
cklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1
NTk2OTAxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oICovOyB9OwogCQlD
RDU4OTZFMjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENTg5NkUwMUNE
MkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNENUQyNzc4MUU4MzE4RTAw
MEQ4MEEzRCAvKiBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENUQyNzc2MUU4MzE4RTAwMEQ4MEEzRCAv
KiBXZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDRDVFNUI1RjFBMTVDRTU0MDAwQzYwOUUgLyogUGFn
ZUNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENENUU1QjVFMUExNUNFNTQwMDBDNjA5RSAvKiBQYWdlQ29uZmlndXJhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNTAxNCw4
ICsxNTAxMiw2IEBACiAJCUNENTRBNzYwMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJp
dmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1Ry
YWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRDU0REU0OTE3NDY5QzZEMDA1RTVCMzYgLyogQXVkaW9TZXNz
aW9uTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9T
ZXNzaW9uTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRDU1OTY4RjE0NzVC
Njc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvRmlsZVJlYWRlcklPUy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUNENTU5NjkwMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFk
ZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVy
SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTg5NDkzMjE4NzQwNjQwMDRG
NDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
RDU4OTZERjFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJQbGF5YmFja0NvbnRy
b2xzTWFuYWdlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1ODk2RTAxQ0Qy
QjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzIzNCw4ICsxNzIzMCw2IEBACiAJCUZEMzE2MDc5
MTJCMDI2RjcwMEMxQTM1OSAvKiBWZWN0b3JNYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZlY3Rvck1hdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQz
MTYwQjUxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvQnVzTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXVkaW9CdXNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZEMzE2MEI2MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb091dHB1dFVuaXRB
ZGFwdG9yTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlv
T3V0cHV0VW5pdEFkYXB0b3JNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RDMxNjBCODEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9GaWxlUmVhZGVyTWFjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvRmlsZVJlYWRlck1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZEMzE2MEI5MTJCMDI3MkEwMEMxQTM1OSAvKiBB
dWRpb0ZpbGVSZWFkZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVk
aW9GaWxlUmVhZGVyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZEMzE2MEJB
MTJCMDI3MkEwMEMxQTM1OSAvKiBGRlRGcmFtZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGRlRGcmFtZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZEMzU5MThEMTM4REIyMjAwMEUxRUJFQyAvKiBBdWRpb1BhcmFtVGltZWxpbmUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQzNTkxOEUxMzhEQjIyMDAwRTFF
QkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBdWRpb1BhcmFtVGltZWxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI4Mzg2LDggKzI4MzgwLDYgQEAKIAkJQ0QwRUVFMEQxNDc0M0U0ODAwM0VBRkEyIC8qIGlvcyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQ0Q1NTk2OEYx
NDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgKi8sCi0JCQkJQ0Q1NTk2
OTAxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5oICovLAogCQkJCUNEMEVF
RTBCMTQ3NDNFMzUwMDNFQUZBMiAvKiBBdWRpb091dHB1dFVuaXRBZGFwdG9ySU9TLmNwcCAqLywK
IAkJCQlDRDM2QzE2MTI2MDdFNzg2MDBDOEM1MjkgLyogQXVkaW9TZXNzaW9uSU9TLmggKi8sCiAJ
CQkJQ0RBNzk4MjUxNzBBMjc5MDAwRDQ1QzU1IC8qIEF1ZGlvU2Vzc2lvbklPUy5tbSAqLywKQEAg
LTMxNDYxLDggKzMxNDUzLDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJRkQzMTYwQjUxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvQnVzTWFjLm1tICovLAotCQkJ
CUZEMzE2MEI4MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwICovLAot
CQkJCUZEMzE2MEI5MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuaCAqLywK
IAkJCQlDRDJGNEEyNTE4RDhBMzQ5MDA2Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxpc3RlbmVyTWFj
LmNwcCAqLywKIAkJCQlDRDJGNEEyNjE4RDhBMzQ5MDA2Mzc0NkQgLyogQXVkaW9IYXJkd2FyZUxp
c3RlbmVyTWFjLmggKi8sCiAJCQkJRkQzMTYwQjYxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvT3V0
cHV0VW5pdEFkYXB0b3JNYWMuY3BwICovLApAQCAtMzY2NjYsNyArMzY2NTYsNiBAQAogCQkJZmls
ZXMgPSAoCiAJCQkJQTk3ODdDQjQxRjVGNUM2NjAwQzU1MUM2IC8qIEFjY2Vzc2liaWxpdHlNZWRp
YU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMUY3QjczMTI0NDhGMkFDMDAxMjQ1NTcg
LyogQUdYQ29tcGlsZXJTZXJ2aWNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUNENTU5NjkxMTQ3
NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQ0QwRUVFMEUxNDc0M0YzOTAwM0VBRkEyIC8qIEF1ZGlvT3V0cHV0VW5pdEFkYXB0b3JJT1Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RBNzk4MjcxNzBBMjc5MTAwRDQ1QzU1IC8qIEF1ZGlv
U2Vzc2lvbklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEOEE3QkJCMTk3NzM1RkUwMENCRDY0
MyAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVy
Q29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxl
UmVhZGVyQ29jb2EuY3BwCmluZGV4IDdjMWM2NGVkN2M3Yzc5MmQwNGNiYjhjYWNjNjQyYjY0YTYx
MmQ0ZmEuLjgwOTJhNDVkNjE3NjBjNmY0NzZjYzUwZWUzZTk0NTc5NmJjMDVjMzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNv
Y29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0Zp
bGVSZWFkZXJDb2NvYS5jcHAKQEAgLTMyLDExICszMiwzMiBAQAogI2lmIEVOQUJMRShXRUJfQVVE
SU8pCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyQ29jb2EuaCIKIAorI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiRmxvYXRDb252
ZXJzaW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9u
L0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgor
CitTT0ZUX0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKK1NPRlRfTElOSyhBdWRpb1Rvb2xi
b3gsIEF1ZGlvRmlsZUNsb3NlLCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluQXVkaW9GaWxlKSwg
KGluQXVkaW9GaWxlKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvRmlsZU9wZW5XaXRo
Q2FsbGJhY2tzLCBPU1N0YXR1cywgKHZvaWQgKmluQ2xpZW50RGF0YSwgQXVkaW9GaWxlX1JlYWRQ
cm9jIGluUmVhZEZ1bmMsIEF1ZGlvRmlsZV9Xcml0ZVByb2MgaW5Xcml0ZUZ1bmMsIEF1ZGlvRmls
ZV9HZXRTaXplUHJvYyBpbkdldFNpemVGdW5jLCBBdWRpb0ZpbGVfU2V0U2l6ZVByb2MgaW5TZXRT
aXplRnVuYywgQXVkaW9GaWxlVHlwZUlEIGluRmlsZVR5cGVIaW50LCBBdWRpb0ZpbGVJRCAqb3V0
QXVkaW9GaWxlKSwgKGluQ2xpZW50RGF0YSwgaW5SZWFkRnVuYywgaW5Xcml0ZUZ1bmMsIGluR2V0
U2l6ZUZ1bmMsIGluU2V0U2l6ZUZ1bmMsIGluRmlsZVR5cGVIaW50LCBvdXRBdWRpb0ZpbGUpKQor
U09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlRGlzcG9zZSwgT1NTdGF0dXMsIChF
eHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUpLCAoaW5FeHRBdWRpb0ZpbGUpKQorU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlR2V0UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0
QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRBdWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJv
cGVydHlJRCwgVUludDMyICppb1Byb3BlcnR5RGF0YVNpemUsIHZvaWQgKm91dFByb3BlcnR5RGF0
YSksIChpbkV4dEF1ZGlvRmlsZSwgaW5Qcm9wZXJ0eUlELCBpb1Byb3BlcnR5RGF0YVNpemUsIG91
dFByb3BlcnR5RGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVSZWFk
LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgVUludDMyICppb051
bWJlckZyYW1lcywgQXVkaW9CdWZmZXJMaXN0ICppb0RhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGlv
TnVtYmVyRnJhbWVzLCBpb0RhdGEpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9G
aWxlU2V0UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxl
LCBFeHRBdWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJRCwgVUludDMyIGluUHJvcGVydHlE
YXRhU2l6ZSwgY29uc3Qgdm9pZCAqaW5Qcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGlu
UHJvcGVydHlJRCwgaW5Qcm9wZXJ0eURhdGFTaXplLCBpblByb3BlcnR5RGF0YSkpCitTT0ZUX0xJ
TksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQsIE9TU3RhdHVzLCAo
QXVkaW9GaWxlSUQgaW5GaWxlSUQsIEJvb2xlYW4gaW5Gb3JXcml0aW5nLCBFeHRBdWRpb0ZpbGVS
ZWYgKm91dEV4dEF1ZGlvRmlsZSksIChpbkZpbGVJRCwgaW5Gb3JXcml0aW5nLCBvdXRFeHRBdWRp
b0ZpbGUpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlT3BlblVSTCwgT1NT
dGF0dXMsIChDRlVSTFJlZiBpblVSTCwgRXh0QXVkaW9GaWxlUmVmKiBvdXRFeHRBdWRpb0ZpbGUp
LCAoaW5VUkwsIG91dEV4dEF1ZGlvRmlsZSkpCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1BdWRpb0J1ZmZlckxpc3QqIHRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVt
YmVyT2ZCdWZmZXJzKQorc3RhdGljIFdBUk5fVU5VU0VEX1JFVFVSTiBBdWRpb0J1ZmZlckxpc3Qq
IHRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVtYmVyT2ZCdWZmZXJzKQogewogICAg
IENoZWNrZWRTaXplIGJ1ZmZlckxpc3RTaXplID0gc2l6ZW9mKEF1ZGlvQnVmZmVyTGlzdCkgLSBz
aXplb2YoQXVkaW9CdWZmZXIpOwogICAgIGJ1ZmZlckxpc3RTaXplICs9IG51bWJlck9mQnVmZmVy
cyAqIHNpemVvZihBdWRpb0J1ZmZlcik7CkBAIC01MiwxMiArNzMsMTIgQEAgQXVkaW9CdWZmZXJM
aXN0KiB0cnlDcmVhdGVBdWRpb0J1ZmZlckxpc3Qoc2l6ZV90IG51bWJlck9mQnVmZmVycykKICAg
ICByZXR1cm4gYnVmZmVyTGlzdDsKIH0KIAotdm9pZCBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KEF1
ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95QXVk
aW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKIHsKICAgICBmYXN0RnJl
ZShidWZmZXJMaXN0KTsKIH0KIAotYm9vbCB2YWxpZGF0ZUF1ZGlvQnVmZmVyTGlzdChBdWRpb0J1
ZmZlckxpc3QqIGJ1ZmZlckxpc3QpCitzdGF0aWMgYm9vbCB2YWxpZGF0ZUF1ZGlvQnVmZmVyTGlz
dChBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QpCiB7CiAgICAgaWYgKCFidWZmZXJMaXN0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03OCw2ICs5OSwxOTUgQEAgYm9vbCB2YWxpZGF0ZUF1
ZGlvQnVmZmVyTGlzdChBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3QpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK0F1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZp
bGVQYXRoKQorICAgIDogbV9kYXRhKG51bGxwdHIpCisgICAgLCBtX2RhdGFTaXplKDApCisgICAg
LCBtX2F1ZGlvRmlsZUlEKDApCisgICAgLCBtX2V4dEF1ZGlvRmlsZVJlZigwKQoreworICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZVBhdGhTdHJpbmcgPSBhZG9wdENGKENGU3RyaW5nQ3Jl
YXRlV2l0aENTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsZVBhdGgsIGtDRlN0cmluZ0Vu
Y29kaW5nVVRGOCkpOworICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gYWRvcHRDRihD
RlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWxlUGF0
aFN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgaWYgKCF1
cmxSZWYpCisgICAgICAgIHJldHVybjsKKyAgICBFeHRBdWRpb0ZpbGVPcGVuVVJMKHVybFJlZi5n
ZXQoKSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKK30KKworQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0Zp
bGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQorICAgIDogbV9kYXRh
KGRhdGEpCisgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQorICAgICwgbV9hdWRpb0ZpbGVJRCgw
KQorICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKK3sKKyAgICBpZiAoQXVkaW9GaWxlT3Blbldp
dGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdldFNpemVQcm9jLCAwLCAwLCAmbV9hdWRp
b0ZpbGVJRCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChFeHRBdWRpb0Zp
bGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwgZmFsc2UsICZtX2V4dEF1ZGlvRmlsZVJl
ZikgIT0gbm9FcnIpCisgICAgICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gMDsKK30KKworQXVkaW9G
aWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVyKCkKK3sKKyAgICBpZiAobV9leHRBdWRpb0ZpbGVS
ZWYpCisgICAgICAgIEV4dEF1ZGlvRmlsZURpc3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOworCisg
ICAgbV9leHRBdWRpb0ZpbGVSZWYgPSAwOworCisgICAgaWYgKG1fYXVkaW9GaWxlSUQpCisgICAg
ICAgIEF1ZGlvRmlsZUNsb3NlKG1fYXVkaW9GaWxlSUQpOworCisgICAgbV9hdWRpb0ZpbGVJRCA9
IDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50
RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIs
IFVJbnQzMiogYWN0dWFsQ291bnQpCit7CisgICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVS
ZWFkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKKworICAg
IHNpemVfdCBkYXRhU2l6ZSA9IGF1ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBjb25z
dCB2b2lkKiBkYXRhID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVz
VG9SZWFkID0gMDsKKworICAgIGlmIChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRh
dGFTaXplKSB7CisgICAgICAgIHNpemVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihwb3NpdGlvbik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVz
dENvdW50IDw9IGJ5dGVzQXZhaWxhYmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7
CisgICAgICAgIG1lbWNweShidWZmZXIsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRh
KSArIHBvc2l0aW9uLCBieXRlc1RvUmVhZCk7CisgICAgfQorCisgICAgaWYgKGFjdHVhbENvdW50
KQorICAgICAgICAqYWN0dWFsQ291bnQgPSBieXRlc1RvUmVhZDsKKworICAgIHJldHVybiBub0Vy
cjsKK30KKworU0ludDY0IEF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50
RGF0YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50
RGF0YSktPmRhdGFTaXplKCk7Cit9CisKK1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVy
OjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pCit7CisgICAgaWYg
KCFtX2V4dEF1ZGlvRmlsZVJlZikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBH
ZXQgZmlsZSdzIGRhdGEgZm9ybWF0CisgICAgVUludDMyIHNpemUgPSBzaXplb2YobV9maWxlRGF0
YUZvcm1hdCk7CisgICAgaWYgKEV4dEF1ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxl
UmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfRmlsZURhdGFGb3JtYXQsICZzaXplLCAmbV9maWxl
RGF0YUZvcm1hdCkgIT0gbm9FcnIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6
ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBtX2ZpbGVEYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1l
OworCisgICAgLy8gTnVtYmVyIG9mIGZyYW1lcworICAgIFNJbnQ2NCBudW1iZXJPZkZyYW1lczY0
ID0gMDsKKyAgICBzaXplID0gc2l6ZW9mKG51bWJlck9mRnJhbWVzNjQpOworICAgIGlmIChFeHRB
dWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3Bl
cnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZzaXplLCAmbnVtYmVyT2ZGcmFtZXM2NCkgIT0gbm9FcnIg
fHwgbnVtYmVyT2ZGcmFtZXM2NCA8PSAwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGRvdWJsZSBmaWxlU2FtcGxlUmF0ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNhbXBsZVJhdGU7CisK
KyAgICAvLyBNYWtlIGNsaWVudCBmb3JtYXQgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgZmls
ZSBmb3JtYXQsIGJ1dCB0d2VhayBhIGZldyB0aGluZ3MuCisgICAgLy8gQ2xpZW50IGZvcm1hdCB3
aWxsIGJlIGxpbmVhciBQQ00gKGNhbm9uaWNhbCksIGFuZCBwb3RlbnRpYWxseSBjaGFuZ2Ugc2Ft
cGxlLXJhdGUuCisgICAgbV9jbGllbnREYXRhRm9ybWF0ID0gbV9maWxlRGF0YUZvcm1hdDsKKwor
ICAgIGNvbnN0IGludCBieXRlc1BlckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIGNvbnN0
IGludCBiaXRzUGVyQnl0ZSA9IDg7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRJRCA9
IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZs
YWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZs
YWdJc05vbkludGVybGVhdmVkOworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNr
ZXQgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRnJhbWVzUGVyUGFj
a2V0ID0gMTsKKyAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1Bl
ckZsb2F0OworICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJl
ck9mQ2hhbm5lbHM7CisgICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJp
dHNQZXJCeXRlICogYnl0ZXNQZXJGbG9hdDsKKworICAgIGlmIChzYW1wbGVSYXRlKQorICAgICAg
ICBtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOworCisgICAgaWYg
KEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxl
UHJvcGVydHlfQ2xpZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiksICZtX2NsaWVudERhdGFGb3JtYXQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNh
bXBsZS1yYXRlCisgICAgbnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9j
bGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOworICAgIHNpemVf
dCBudW1iZXJPZkZyYW1lcyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7
CisKKyAgICBzaXplX3QgYnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9m
Q2hhbm5lbHM7CisKKyAgICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQ
Q00gYXVkaW8gZGF0YQorICAgIGF1dG8gYXVkaW9CdXMgPSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0No
YW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFtZXMpOworICAgIGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRl
KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKSk7
IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAgICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9N
b25vIGNhc2U7IGRlYWxsb2NhdGVkIG9uIGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJh
eSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAg
QXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gdHJ5Q3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51
bWJlck9mQ2hhbm5lbHMpOworICAgIGlmICghYnVmZmVyTGlzdCkgeworICAgICAgICBSRUxFQVNF
X0xPR19GQVVMVChXZWJBdWRpbywgInRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCglbGQpIHJldHVy
bmVkIG51bGwiLCBudW1iZXJPZkNoYW5uZWxzKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIGNvbnN0IHNpemVfdCBidWZmZXJTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXpl
b2YoZmxvYXQpOworCisgICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZl
cnMgPT0gbnVtYmVyT2ZDaGFubmVscyk7CisgICAgaWYgKG1peFRvTW9ubyAmJiBudW1iZXJPZkNo
YW5uZWxzID09IDIpIHsKKyAgICAgICAgbGVmdENoYW5uZWwucmVzaXplKG51bWJlck9mRnJhbWVz
KTsKKyAgICAgICAgcmlnaHRDaGFubmVsLnJlc2l6ZShudW1iZXJPZkZyYW1lcyk7CisKKyAgICAg
ICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAg
YnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAg
ICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gbGVmdENoYW5uZWwuZGF0YSgpOwor
CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJDaGFubmVscyA9IDE7Cisg
ICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXpl
OworICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5k
YXRhKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1peFRvTW9ubyB8
fCBudW1iZXJPZkNoYW5uZWxzID09IDEpOworCisgICAgICAgIC8vIEZvciBUcnVlLXN0ZXJlbyAo
bnVtYmVyT2ZDaGFubmVscyA9PSA0KQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mQ2hhbm5lbHM7ICsraSkgeworICAgICAgICAgICAgYXVkaW9CdXMtPmNoYW5uZWwoaSkt
Pnplcm8oKTsKKyAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFu
bmVscyA9IDE7CisgICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVT
aXplID0gYnVmZmVyU2l6ZTsKKyAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1E
YXRhID0gYXVkaW9CdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7CisgICAgICAgICAgICBB
U1NFUlQoYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCF2YWxpZGF0ZUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0KSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgIkdlbmVyYXRlZCBidWZmZXIgaW4gQXVkaW9G
aWxlUmVhZGVyOjpjcmVhdGVCdXMoKSBkaWQgbm90IHBhc3MgdmFsaWRhdGlvbiIpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChi
dWZmZXJMaXN0KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gUmVh
ZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVz
VG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRB
dWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAg
ICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9
PSAyKSB7CisgICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0
KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBk
ZXN0TFtpXSA9IDAuNWYgKiAobGVmdENoYW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAg
IH0KKworICAgIC8vIENsZWFudXAKKyAgICBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxp
c3QpOworCisgICAgcmV0dXJuIGF1ZGlvQnVzOworfQorCitSZWZQdHI8QXVkaW9CdXM+IGNyZWF0
ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBm
bG9hdCBzYW1wbGVSYXRlKQoreworICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgp
OworICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9
CisKK1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBs
ZVJhdGUpCit7CisgICAgQXVkaW9GaWxlUmVhZGVyIHJlYWRlcihkYXRhLCBkYXRhU2l6ZSk7Cisg
ICAgcmV0dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0KIAor
fSAvLyBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2Eu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNv
Y29hLmgKaW5kZXggMjk4OWUzYzFiZWY4M2MxZmJlYzM2ZTc2YTU0ZDI3N2QzNmUxMzc1Yi4uYzRl
Y2U0NzRmYWNkNDY2ZmQ3ZDMzMmFmZjFjMDdmOGViNTczNGYzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2Nv
YS5oCkBAIC0zMSwxMSArMzEsNDAgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKKyNpbmNs
dWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0V4
dGVuZGVkQXVkaW9GaWxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdBUk5fVU5VU0VEX1JFVFVSTiBBdWRpb0J1ZmZlckxpc3QqIHRyeUNyZWF0
ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVtYmVyT2ZCdWZmZXJzKTsKLXZvaWQgZGVzdHJveUF1
ZGlvQnVmZmVyTGlzdChBdWRpb0J1ZmZlckxpc3QqKTsKLWJvb2wgdmFsaWRhdGVBdWRpb0J1ZmZl
ckxpc3QoQXVkaW9CdWZmZXJMaXN0Kik7CitjbGFzcyBBdWRpb0J1czsKKworLy8gV3JhcHBlciBj
bGFzcyBmb3IgQXVkaW9GaWxlIGFuZCBFeHRBdWRpb0ZpbGUgQ29yZUF1ZGlvIEFQSXMgZm9yIHJl
YWRpbmcgZmlsZXMgYW5kIGluLW1lbW9yeSB2ZXJzaW9ucyBvZiB0aGVtLi4uCisKK2NsYXNzIEF1
ZGlvRmlsZVJlYWRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQXVkaW9GaWxlUmVhZGVyKGNv
bnN0IGNoYXIqIGZpbGVQYXRoKTsKKyAgICBleHBsaWNpdCBBdWRpb0ZpbGVSZWFkZXIoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKTsKKyAgICB+QXVkaW9GaWxlUmVhZGVyKCk7CisK
KyAgICBSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1p
eFRvTW9ubyk7IC8vIFJldHVybnMgbnVsbHB0ciBvbiBlcnJvcgorCisgICAgY29uc3Qgdm9pZCog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YVNpemU7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgT1NTdGF0
dXMgcmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVx
dWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpOworICAgIHN0YXRp
YyBTSW50NjQgZ2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSk7CisKKyAgICBjb25zdCB2b2lk
KiBtX2RhdGE7CisgICAgc2l6ZV90IG1fZGF0YVNpemU7CisKKyAgICBBdWRpb0ZpbGVJRCBtX2F1
ZGlvRmlsZUlEOworICAgIEV4dEF1ZGlvRmlsZVJlZiBtX2V4dEF1ZGlvRmlsZVJlZjsKKworICAg
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX2ZpbGVEYXRhRm9ybWF0OworICAgIEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX2NsaWVudERhdGFGb3JtYXQ7Cit9OwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFk
ZXJJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJl
YWRlcklPUy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYWU5ZTgxYWI0MWQ1
NDc0NjgxNTQwMzUxNzg2MGZhZDMzY2U3ZWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlv
RmlsZVJlYWRlcklPUy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXJJT1MuaCIKLQotI2lmIEVOQUJMRShXRUJfQVVE
SU8pICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2lu
Y2x1ZGUgIkF1ZGlvRmlsZVJlYWRlci5oIgotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlckNvY29h
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVG
b3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Tb2Z0TGlua2luZy5oPgotCi1TT0ZU
X0xJTktfRlJBTUVXT1JLKEF1ZGlvVG9vbGJveCkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1
ZGlvRmlsZUNsb3NlLCBPU1N0YXR1cywgKEF1ZGlvRmlsZUlEIGluQXVkaW9GaWxlKSwgKGluQXVk
aW9GaWxlKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEF1ZGlvRmlsZU9wZW5XaXRoQ2FsbGJh
Y2tzLCBPU1N0YXR1cywgKHZvaWQgKmluQ2xpZW50RGF0YSwgQXVkaW9GaWxlX1JlYWRQcm9jIGlu
UmVhZEZ1bmMsIEF1ZGlvRmlsZV9Xcml0ZVByb2MgaW5Xcml0ZUZ1bmMsIEF1ZGlvRmlsZV9HZXRT
aXplUHJvYyBpbkdldFNpemVGdW5jLCBBdWRpb0ZpbGVfU2V0U2l6ZVByb2MgaW5TZXRTaXplRnVu
YywgQXVkaW9GaWxlVHlwZUlEIGluRmlsZVR5cGVIaW50LCBBdWRpb0ZpbGVJRCAqb3V0QXVkaW9G
aWxlKSwgKGluQ2xpZW50RGF0YSwgaW5SZWFkRnVuYywgaW5Xcml0ZUZ1bmMsIGluR2V0U2l6ZUZ1
bmMsIGluU2V0U2l6ZUZ1bmMsIGluRmlsZVR5cGVIaW50LCBvdXRBdWRpb0ZpbGUpKQotU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlRGlzcG9zZSwgT1NTdGF0dXMsIChFeHRBdWRp
b0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUpLCAoaW5FeHRBdWRpb0ZpbGUpKQotU09GVF9MSU5LKEF1
ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlR2V0UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9G
aWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRBdWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJ
RCwgVUludDMyICppb1Byb3BlcnR5RGF0YVNpemUsIHZvaWQgKm91dFByb3BlcnR5RGF0YSksIChp
bkV4dEF1ZGlvRmlsZSwgaW5Qcm9wZXJ0eUlELCBpb1Byb3BlcnR5RGF0YVNpemUsIG91dFByb3Bl
cnR5RGF0YSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVSZWFkLCBPU1N0
YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSwgVUludDMyICppb051bWJlckZy
YW1lcywgQXVkaW9CdWZmZXJMaXN0ICppb0RhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGlvTnVtYmVy
RnJhbWVzLCBpb0RhdGEpKQotU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlU2V0
UHJvcGVydHksIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlLCBFeHRB
dWRpb0ZpbGVQcm9wZXJ0eUlEIGluUHJvcGVydHlJRCwgVUludDMyIGluUHJvcGVydHlEYXRhU2l6
ZSwgY29uc3Qgdm9pZCAqaW5Qcm9wZXJ0eURhdGEpLCAoaW5FeHRBdWRpb0ZpbGUsIGluUHJvcGVy
dHlJRCwgaW5Qcm9wZXJ0eURhdGFTaXplLCBpblByb3BlcnR5RGF0YSkpCi1TT0ZUX0xJTksoQXVk
aW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQsIE9TU3RhdHVzLCAoQXVkaW9G
aWxlSUQgaW5GaWxlSUQsIEJvb2xlYW4gaW5Gb3JXcml0aW5nLCBFeHRBdWRpb0ZpbGVSZWYgKm91
dEV4dEF1ZGlvRmlsZSksIChpbkZpbGVJRCwgaW5Gb3JXcml0aW5nLCBvdXRFeHRBdWRpb0ZpbGUp
KQotU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgRXh0QXVkaW9GaWxlT3BlblVSTCwgT1NTdGF0dXMs
IChDRlVSTFJlZiBpblVSTCwgRXh0QXVkaW9GaWxlUmVmKiBvdXRFeHRBdWRpb0ZpbGUpLCAoaW5V
UkwsIG91dEV4dEF1ZGlvRmlsZSkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQXVkaW9GaWxl
UmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpCi0gICAgOiBtX2Rh
dGEoMCkKLSAgICAsIG1fZGF0YVNpemUoMCkKLSAgICAsIG1fYXVkaW9GaWxlSUQoMCkKLSAgICAs
IG1fZXh0QXVkaW9GaWxlUmVmKG51bGxwdHIpCi17Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiB1
cmxSZWYgPSBhZG9wdENGKENGVVJMQ3JlYXRlRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZmlsZVBh
dGgpLCBzdHJsZW4oZmlsZVBhdGgpLCBmYWxzZSkpOwotICAgIGlmICghdXJsUmVmKQotICAgICAg
ICByZXR1cm47Ci0gICAgRXh0QXVkaW9GaWxlT3BlblVSTCh1cmxSZWYuZ2V0KCksICZtX2V4dEF1
ZGlvRmlsZVJlZik7Ci19Ci0KLUF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKLSAgICA6IG1fZGF0YShkYXRhKQotICAgICwg
bV9kYXRhU2l6ZShkYXRhU2l6ZSkKLSAgICAsIG1fYXVkaW9GaWxlSUQoMCkKLSAgICAsIG1fZXh0
QXVkaW9GaWxlUmVmKG51bGxwdHIpCi17Ci0gICAgaWYgKEF1ZGlvRmlsZU9wZW5XaXRoQ2FsbGJh
Y2tzKHRoaXMsIHJlYWRQcm9jLCAwLCBnZXRTaXplUHJvYywgMCwgMCwgJm1fYXVkaW9GaWxlSUQp
ICE9IG5vRXJyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRXh0QXVkaW9GaWxlV3JhcEF1
ZGlvRmlsZUlEKG1fYXVkaW9GaWxlSUQsIGZhbHNlLCAmbV9leHRBdWRpb0ZpbGVSZWYpICE9IG5v
RXJyKQotICAgICAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IG51bGxwdHI7Ci19Ci0KLUF1ZGlvRmls
ZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcigpCi17Ci0gICAgaWYgKG1fZXh0QXVkaW9GaWxlUmVm
KQotICAgICAgICBFeHRBdWRpb0ZpbGVEaXNwb3NlKG1fZXh0QXVkaW9GaWxlUmVmKTsKLQotICAg
IG1fZXh0QXVkaW9GaWxlUmVmID0gbnVsbHB0cjsKLQotICAgIGlmIChtX2F1ZGlvRmlsZUlEKQot
ICAgICAgICBBdWRpb0ZpbGVDbG9zZShtX2F1ZGlvRmlsZUlEKTsKLQotICAgIG1fYXVkaW9GaWxl
SUQgPSAwOwotfQotCi1PU1N0YXR1cyBBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKHZvaWQqIGNs
aWVudERhdGEsIFNJbnQ2NCBwb3NpdGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVm
ZmVyLCBVSW50MzIqIGFjdHVhbENvdW50KQotewotICAgIEF1ZGlvRmlsZVJlYWRlciogYXVkaW9G
aWxlUmVhZGVyID0gc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSk7Ci0K
LSAgICBzaXplX3QgZGF0YVNpemUgPSBhdWRpb0ZpbGVSZWFkZXItPmRhdGFTaXplKCk7Ci0gICAg
Y29uc3Qgdm9pZCogZGF0YSA9IGF1ZGlvRmlsZVJlYWRlci0+ZGF0YSgpOwotICAgIHNpemVfdCBi
eXRlc1RvUmVhZCA9IDA7Ci0KLSAgICBpZiAoc3RhdGljX2Nhc3Q8VUludDY0Pihwb3NpdGlvbikg
PCBkYXRhU2l6ZSkgewotICAgICAgICBzaXplX3QgYnl0ZXNBdmFpbGFibGUgPSBkYXRhU2l6ZSAt
IHN0YXRpY19jYXN0PHNpemVfdD4ocG9zaXRpb24pOwotICAgICAgICBieXRlc1RvUmVhZCA9IHJl
cXVlc3RDb3VudCA8PSBieXRlc0F2YWlsYWJsZSA/IHJlcXVlc3RDb3VudCA6IGJ5dGVzQXZhaWxh
YmxlOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4o
ZGF0YSkgKyBwb3NpdGlvbiwgYnl0ZXNUb1JlYWQpOwotICAgIH0KLQotICAgIGlmIChhY3R1YWxD
b3VudCkKLSAgICAgICAgKmFjdHVhbENvdW50ID0gYnl0ZXNUb1JlYWQ7Ci0KLSAgICByZXR1cm4g
bm9FcnI7Ci19Ci0KLVNJbnQ2NCBBdWRpb0ZpbGVSZWFkZXI6OmdldFNpemVQcm9jKHZvaWQqIGNs
aWVudERhdGEpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNs
aWVudERhdGEpLT5kYXRhU2l6ZSgpOwotfQotCi1SZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJl
YWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKQotewotICAg
IGlmICghbV9leHRBdWRpb0ZpbGVSZWYpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gR2V0IGZpbGUncyBkYXRhIGZvcm1hdAotICAgIFVJbnQzMiBzaXplID0gc2l6ZW9mKG1fZmls
ZURhdGFGb3JtYXQpOwotICAgIGlmIChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlv
RmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVEYXRhRm9ybWF0LCAmc2l6ZSwgJm1f
ZmlsZURhdGFGb3JtYXQpICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHNpemVfdCBudW1iZXJPZkNoYW5uZWxzID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJG
cmFtZTsKLQotICAgIC8vIE51bWJlciBvZiBmcmFtZXMKLSAgICBTSW50NjQgbnVtYmVyT2ZGcmFt
ZXM2NCA9IDA7Ci0gICAgc2l6ZSA9IHNpemVvZihudW1iZXJPZkZyYW1lczY0KTsKLSAgICBpZiAo
RXh0QXVkaW9GaWxlR2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQ
cm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVzLCAmc2l6ZSwgJm51bWJlck9mRnJhbWVzNjQpICE9IG5v
RXJyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGRvdWJsZSBmaWxlU2FtcGxlUmF0
ZSA9IG1fZmlsZURhdGFGb3JtYXQubVNhbXBsZVJhdGU7Ci0KLSAgICAvLyBNYWtlIGNsaWVudCBm
b3JtYXQgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1dCB0d2VhayBh
IGZldyB0aGluZ3MuCi0gICAgLy8gQ2xpZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVhciBQQ00gKGNh
bm9uaWNhbCksIGFuZCBwb3RlbnRpYWxseSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCi0gICAgbV9jbGll
bnREYXRhRm9ybWF0ID0gbV9maWxlRGF0YUZvcm1hdDsKLQotICAgIGNvbnN0IGludCBieXRlc1Bl
ckZsb2F0ID0gc2l6ZW9mKEZsb2F0MzIpOwotICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7
Ci0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBD
TTsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0Rmxh
Z3NOYXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwot
ICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0Owot
ICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKLSAgICBtX2NsaWVu
dERhdGFGb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OwotICAgIG1fY2xpZW50
RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7Ci0gICAgbV9j
bGllbnREYXRhRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJG
bG9hdDsKLQotICAgIGlmIChzYW1wbGVSYXRlKQotICAgICAgICBtX2NsaWVudERhdGFGb3JtYXQu
bVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwotCi0gICAgaWYgKEV4dEF1ZGlvRmlsZVNldFByb3Bl
cnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xpZW50RGF0YUZv
cm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiksICZtX2NsaWVudERhdGFG
b3JtYXQpICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENoYW5n
ZSBudW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNhbXBsZS1yYXRlCi0gICAgbnVtYmVy
T2ZGcmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1w
bGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOwotICAgIHNpemVfdCBudW1iZXJPZkZyYW1lcyA9IHN0
YXRpY19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7Ci0KLSAgICBzaXplX3QgYnVzQ2hh
bm5lbENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9mQ2hhbm5lbHM7Ci0KLSAgICAvLyBD
cmVhdGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQotICAgIGF1
dG8gYXVkaW9CdXMgPSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZG
cmFtZXMpOwotICAgIGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG1fY2xpZW50RGF0YUZvcm1hdC5t
U2FtcGxlUmF0ZSk7IC8vIHNhdmUgZm9yIGxhdGVyCi0KLSAgICAvLyBPbmx5IGFsbG9jYXRlZCBp
biB0aGUgbWl4VG9Nb25vIGNhc2U7IGRlYWxsb2NhdGVkIG9uIGRlc3RydWN0aW9uLgotICAgIEF1
ZGlvRmxvYXRBcnJheSBsZWZ0Q2hhbm5lbDsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgcmlnaHRDaGFu
bmVsOwotCi0gICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gdHJ5Q3JlYXRlQXVkaW9C
dWZmZXJMaXN0KG51bWJlck9mQ2hhbm5lbHMpOwotICAgIGlmICghYnVmZmVyTGlzdCkgewotICAg
ICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgInRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlz
dCglbGQpIHJldHVybmVkIG51bGwiLCBudW1iZXJPZkNoYW5uZWxzKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIGNvbnN0IHNpemVfdCBidWZmZXJTaXplID0gbnVtYmVyT2ZG
cmFtZXMgKiBzaXplb2YoZmxvYXQpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyTGlzdC0+
bU51bWJlckJ1ZmZlcnMgPT0gbnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgaWYgKG1peFRvTW9ubyAm
JiBudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKLSAgICAgICAgbGVmdENoYW5uZWwucmVzaXplKG51
bWJlck9mRnJhbWVzKTsKLSAgICAgICAgcmlnaHRDaGFubmVsLnJlc2l6ZShudW1iZXJPZkZyYW1l
cyk7Ci0KLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubU51bWJlckNoYW5uZWxzID0g
MTsKLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZl
clNpemU7Ci0gICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0gbGVmdENoYW5u
ZWwuZGF0YSgpOwotCi0gICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1OdW1iZXJDaGFu
bmVscyA9IDE7Ci0gICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzFdLm1EYXRhQnl0ZVNpemUg
PSBidWZmZXJTaXplOwotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YSA9IHJp
Z2h0Q2hhbm5lbC5kYXRhKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1peFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09IDEpOwotCi0gICAgICAgIC8vIEZvciBU
cnVlLXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0KQotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICAgICAgYXVkaW9CdXMt
PmNoYW5uZWwoaSktPnplcm8oKTsKLSAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ld
Lm1OdW1iZXJDaGFubmVscyA9IDE7Ci0gICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tp
XS5tRGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKLSAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1C
dWZmZXJzW2ldLm1EYXRhID0gYXVkaW9CdXMtPmNoYW5uZWwoaSktPm11dGFibGVEYXRhKCk7Ci0g
ICAgICAgICAgICBBU1NFUlQoYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0
KSkgewotICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgIkdlbmVyYXRlZCBidWZm
ZXIgaW4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoKSBkaWQgbm90IHBhc3MgdmFsaWRhdGlv
biIpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZGVzdHJveUF1ZGlv
QnVmZmVyTGlzdChidWZmZXJMaXN0KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgLy8gUmVhZCBmcm9tIHRoZSBmaWxlIChvciBpbi1tZW1vcnkgdmVyc2lvbikKLSAgICBV
SW50MzIgZnJhbWVzVG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7Ci0gICAgaWYgKEV4dEF1ZGlvRmls
ZVJlYWQobV9leHRBdWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpICE9IG5v
RXJyKSB7Ci0gICAgICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVy
T2ZDaGFubmVscyA9PSAyKSB7Ci0gICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCi0g
ICAgICAgIGZsb2F0KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyArK2kpCi0g
ICAgICAgICAgICBkZXN0TFtpXSA9IDAuNWYgKiAobGVmdENoYW5uZWxbaV0gKyByaWdodENoYW5u
ZWxbaV0pOwotICAgIH0KLQotICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7
Ci0KLSAgICByZXR1cm4gYXVkaW9CdXM7Ci19Ci0KLVJlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVz
RnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBtaXhUb01vbm8sIGZsb2F0
IHNhbXBsZVJhdGUpCi17Ci0gICAgQXVkaW9GaWxlUmVhZGVyIHJlYWRlcihmaWxlUGF0aCk7Ci0g
ICAgcmV0dXJuIHJlYWRlci5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKLX0KLQot
UmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0
ZSkKLXsKLSAgICBBdWRpb0ZpbGVSZWFkZXIgcmVhZGVyKGRhdGEsIGRhdGFTaXplKTsKLSAgICBy
ZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwotfQotCi19IC8v
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFBMQVRGT1JNKElPU19G
QU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVk
aW9GaWxlUmVhZGVySU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVk
aW9GaWxlUmVhZGVySU9TLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNTA2MTlk
ZDZjNDU0ZDQ2Njc2YzJjZjUxNjhjNzUwMzE2ZjU2YWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9z
L0F1ZGlvRmlsZVJlYWRlcklPUy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRp
b0ZpbGUuaD4KLSNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvRXh0ZW5kZWRBdWRpb0ZpbGUuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVk
aW9CdXM7Ci0KLS8vIFdyYXBwZXIgY2xhc3MgZm9yIEF1ZGlvRmlsZSBhbmQgRXh0QXVkaW9GaWxl
IENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZpbGVzIGFuZCBpbi1tZW1vcnkgdmVyc2lvbnMg
b2YgdGhlbS4uLgotCi1jbGFzcyBBdWRpb0ZpbGVSZWFkZXIgewotcHVibGljOgotICAgIGV4cGxp
Y2l0IEF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCk7Ci0gICAgZXhwbGljaXQg
QXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSk7Ci0gICAg
fkF1ZGlvRmlsZVJlYWRlcigpOwotCi0gICAgUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXMoZmxv
YXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pOyAvLyBSZXR1cm5zIG51bGxwdHIgb24gZXJy
b3IKLQotICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAg
ICBzaXplX3QgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFTaXplOyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIE9TU3RhdHVzIHJlYWRQcm9jKHZvaWQqIGNsaWVudERhdGEsIFNJbnQ2
NCBwb3NpdGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBVSW50MzIqIGFj
dHVhbENvdW50KTsKLSAgICBzdGF0aWMgU0ludDY0IGdldFNpemVQcm9jKHZvaWQqIGNsaWVudERh
dGEpOwotCi0gICAgY29uc3Qgdm9pZCogbV9kYXRhOwotICAgIHNpemVfdCBtX2RhdGFTaXplOwot
Ci0gICAgQXVkaW9GaWxlSUQgbV9hdWRpb0ZpbGVJRDsKLSAgICBFeHRBdWRpb0ZpbGVSZWYgbV9l
eHRBdWRpb0ZpbGVSZWY7Ci0KLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9maWxl
RGF0YUZvcm1hdDsKLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9jbGllbnREYXRh
Rm9ybWF0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVhYTc4OWEyY2M2MmZlYmRjMDFjYzM1YTNmN2U1NjgxZTM3ZTE5YjcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLQotI2lmIFBM
QVRGT1JNKE1BQykKLQotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlck1hYy5oIgotCi0jaW5jbHVk
ZSAiQXVkaW9CdXMuaCIKLSNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKLSNpbmNsdWRlICJB
dWRpb0ZpbGVSZWFkZXJDb2NvYS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1BdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCkK
LSAgICA6IG1fZGF0YShudWxscHRyKQotICAgICwgbV9kYXRhU2l6ZSgwKQotICAgICwgbV9hdWRp
b0ZpbGVJRCgwKQotICAgICwgbV9leHRBdWRpb0ZpbGVSZWYoMCkKLXsKLSAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IGZpbGVQYXRoU3RyaW5nID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhD
U3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbGVQYXRoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VU
RjgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVX
aXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsZVBhdGhTdHJpbmcuZ2V0
KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIGlmICghdXJsKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBFeHRBdWRpb0ZpbGVPcGVuVVJMKHVybC5nZXQoKSwgJm1fZXh0QXVk
aW9GaWxlUmVmKTsKLX0KLQotQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotICAgIDogbV9kYXRhKGRhdGEpCi0gICAgLCBt
X2RhdGFTaXplKGRhdGFTaXplKQotICAgICwgbV9hdWRpb0ZpbGVJRCgwKQotICAgICwgbV9leHRB
dWRpb0ZpbGVSZWYoMCkKLXsKLSAgICBPU1N0YXR1cyByZXN1bHQgPSBBdWRpb0ZpbGVPcGVuV2l0
aENhbGxiYWNrcyh0aGlzLCByZWFkUHJvYywgMCwgZ2V0U2l6ZVByb2MsIDAsIDAsICZtX2F1ZGlv
RmlsZUlEKTsKLQotICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHJlc3VsdCA9IEV4dEF1ZGlvRmlsZVdyYXBBdWRpb0ZpbGVJRChtX2F1ZGlvRmlsZUlELCBm
YWxzZSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKLSAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQotICAg
ICAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IDA7Ci19Ci0KLUF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlv
RmlsZVJlYWRlcigpCi17Ci0gICAgaWYgKG1fZXh0QXVkaW9GaWxlUmVmKQotICAgICAgICBFeHRB
dWRpb0ZpbGVEaXNwb3NlKG1fZXh0QXVkaW9GaWxlUmVmKTsKLQotICAgIG1fZXh0QXVkaW9GaWxl
UmVmID0gMDsKLQotICAgIGlmIChtX2F1ZGlvRmlsZUlEKQotICAgICAgICBBdWRpb0ZpbGVDbG9z
ZShtX2F1ZGlvRmlsZUlEKTsKLSAgICAgICAgCi0gICAgbV9hdWRpb0ZpbGVJRCA9IDA7Ci19Ci0K
LU9TU3RhdHVzIEF1ZGlvRmlsZVJlYWRlcjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0lu
dDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiog
YWN0dWFsQ291bnQpCi17Ci0gICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBz
dGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsKLQotICAgIHNpemVfdCBk
YXRhU2l6ZSA9IGF1ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKLSAgICBjb25zdCB2b2lkKiBk
YXRhID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0g
MDsKLQotICAgIGlmIChzdGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7
Ci0gICAgICAgIHNpemVfdCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8
c2l6ZV90Pihwb3NpdGlvbik7Ci0gICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9
IGJ5dGVzQXZhaWxhYmxlID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7Ci0gICAgICAg
IG1lbWNweShidWZmZXIsIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSArIHBvc2l0
aW9uLCBieXRlc1RvUmVhZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGJ5dGVzVG9SZWFkID0gMDsK
LQotICAgIGlmIChhY3R1YWxDb3VudCkKLSAgICAgICAgKmFjdHVhbENvdW50ID0gYnl0ZXNUb1Jl
YWQ7Ci0KLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLVNJbnQ2NCBBdWRpb0ZpbGVSZWFkZXI6Omdl
dFNpemVQcm9jKHZvaWQqIGNsaWVudERhdGEpCi17Ci0gICAgQXVkaW9GaWxlUmVhZGVyKiBhdWRp
b0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFkZXIqPihjbGllbnREYXRhKTsK
LSAgICByZXR1cm4gYXVkaW9GaWxlUmVhZGVyLT5kYXRhU2l6ZSgpOwotfQotCi1SZWZQdHI8QXVk
aW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wg
bWl4VG9Nb25vKQotewotICAgIGlmICghbV9leHRBdWRpb0ZpbGVSZWYpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgLy8gR2V0IGZpbGUncyBkYXRhIGZvcm1hdAotICAgIFVJbnQzMiBz
aXplID0gc2l6ZW9mKG1fZmlsZURhdGFGb3JtYXQpOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IEV4
dEF1ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJv
cGVydHlfRmlsZURhdGFGb3JtYXQsICZzaXplLCAmbV9maWxlRGF0YUZvcm1hdCk7Ci0gICAgaWYg
KHJlc3VsdCAhPSBub0VycikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBOdW1i
ZXIgb2YgY2hhbm5lbHMKLSAgICBzaXplX3QgbnVtYmVyT2ZDaGFubmVscyA9IG1fZmlsZURhdGFG
b3JtYXQubUNoYW5uZWxzUGVyRnJhbWU7Ci0KLSAgICAvLyBOdW1iZXIgb2YgZnJhbWVzCi0gICAg
U0ludDY0IG51bWJlck9mRnJhbWVzNjQgPSAwOwotICAgIHNpemUgPSBzaXplb2YobnVtYmVyT2ZG
cmFtZXM2NCk7Ci0gICAgcmVzdWx0ID0gRXh0QXVkaW9GaWxlR2V0UHJvcGVydHkobV9leHRBdWRp
b0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9GaWxlTGVuZ3RoRnJhbWVzLCAmc2l6ZSwg
Jm51bWJlck9mRnJhbWVzNjQpOwotICAgIGlmIChyZXN1bHQgIT0gbm9FcnIgfHwgbnVtYmVyT2ZG
cmFtZXM2NCA8PSAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNhbXBsZS1y
YXRlCi0gICAgZG91YmxlIGZpbGVTYW1wbGVSYXRlID0gbV9maWxlRGF0YUZvcm1hdC5tU2FtcGxl
UmF0ZTsKLQotICAgIC8vIE1ha2UgY2xpZW50IGZvcm1hdCBzYW1lIG51bWJlciBvZiBjaGFubmVs
cyBhcyBmaWxlIGZvcm1hdCwgYnV0IHR3ZWFrIGEgZmV3IHRoaW5ncy4KLSAgICAvLyBDbGllbnQg
Zm9ybWF0IHdpbGwgYmUgbGluZWFyIFBDTSAoY2Fub25pY2FsKSwgYW5kIHBvdGVudGlhbGx5IGNo
YW5nZSBzYW1wbGUtcmF0ZS4KLSAgICBtX2NsaWVudERhdGFGb3JtYXQgPSBtX2ZpbGVEYXRhRm9y
bWF0OwotCi0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExp
bmVhclBDTTsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9y
bWF0RmxhZ3NOYXRpdmVGbG9hdFBhY2tlZDsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUJpdHNQ
ZXJDaGFubmVsID0gOCAqIHNpemVvZihGbG9hdDMyKTsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQu
bUNoYW5uZWxzUGVyRnJhbWUgPSBudW1iZXJPZkNoYW5uZWxzOwotICAgIG1fY2xpZW50RGF0YUZv
cm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUJ5dGVz
UGVyUGFja2V0ID0gc2l6ZW9mKEZsb2F0MzIpOwotICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0
ZXNQZXJGcmFtZSA9IHNpemVvZihGbG9hdDMyKTsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUZv
cm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOwotCi0gICAgaWYg
KHNhbXBsZVJhdGUpCi0gICAgICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSA9IHNh
bXBsZVJhdGU7Ci0KLSAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVTZXRQcm9wZXJ0eShtX2V4dEF1
ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0NsaWVudERhdGFGb3JtYXQsIHNpemVv
ZihBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24pLCAmbV9jbGllbnREYXRhRm9ybWF0KTsKLSAg
ICBpZiAocmVzdWx0ICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8v
IENoYW5nZSBudW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNhbXBsZS1yYXRlCi0gICAg
bnVtYmVyT2ZGcmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0
Lm1TYW1wbGVSYXRlIC8gZmlsZVNhbXBsZVJhdGUpOwotICAgIHNpemVfdCBudW1iZXJPZkZyYW1l
cyA9IHN0YXRpY19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7Ci0KLSAgICBzaXplX3Qg
YnVzQ2hhbm5lbENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9mQ2hhbm5lbHM7Ci0KLSAg
ICAvLyBDcmVhdGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQot
ICAgIGF1dG8gYXVkaW9CdXMgPSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVt
YmVyT2ZGcmFtZXMpOwotICAgIGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKSk7IC8vIHNhdmUgZm9yIGxh
dGVyCi0KLSAgICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9Nb25vIGNhc2UKLSAgICBB
dWRpb0Zsb2F0QXJyYXkgYnVmTDsKLSAgICBBdWRpb0Zsb2F0QXJyYXkgYnVmUjsKLSAgICBmbG9h
dCogYnVmZmVyTCA9IDA7Ci0gICAgZmxvYXQqIGJ1ZmZlclIgPSAwOwotICAgIAotICAgIC8vIFNl
dHVwIEF1ZGlvQnVmZmVyTGlzdCBpbiBwcmVwYXJhdGlvbiBmb3IgcmVhZGluZwotICAgIEF1ZGlv
QnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IHRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChudW1iZXJP
ZkNoYW5uZWxzKTsKLSAgICBpZiAoIWJ1ZmZlckxpc3QpIHsKLSAgICAgICAgUkVMRUFTRV9MT0df
RkFVTFQoV2ViQXVkaW8sICJ0cnlDcmVhdGVBdWRpb0J1ZmZlckxpc3QoJWxkKSByZXR1cm5lZCBu
dWxsIiwgbnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIFJFTEVBU0VfQVNTRVJUKGJ1ZmZlckxpc3QtPm1OdW1iZXJCdWZmZXJzID09IG51bWJl
ck9mQ2hhbm5lbHMpOwotICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9PSAy
KSB7Ci0gICAgICAgIGJ1ZkwucmVzaXplKG51bWJlck9mRnJhbWVzKTsKLSAgICAgICAgYnVmUi5y
ZXNpemUobnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICBidWZmZXJMID0gYnVmTC5kYXRhKCk7Ci0g
ICAgICAgIGJ1ZmZlclIgPSBidWZSLmRhdGEoKTsKLQotICAgICAgICBidWZmZXJMaXN0LT5tQnVm
ZmVyc1swXS5tTnVtYmVyQ2hhbm5lbHMgPSAxOwotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVy
c1swXS5tRGF0YUJ5dGVTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxvYXQpOwotICAg
ICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1swXS5tRGF0YSA9IGJ1ZmZlckw7Ci0KLSAgICAgICAg
YnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubU51bWJlckNoYW5uZWxzID0gMTsKLSAgICAgICAgYnVm
ZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubURhdGFCeXRlU2l6ZSA9IG51bWJlck9mRnJhbWVzICogc2l6
ZW9mKGZsb2F0KTsKLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMV0ubURhdGEgPSBidWZm
ZXJSOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtaXhUb01vbm8gfHwg
bnVtYmVyT2ZDaGFubmVscyA9PSAxKTsKLQotICAgICAgICAvLyBmb3IgVHJ1ZS1zdGVyZW8gKG51
bWJlck9mQ2hhbm5lbHMgPT0gNCkKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1i
ZXJPZkNoYW5uZWxzOyArK2kpIHsKLSAgICAgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ld
Lm1OdW1iZXJDaGFubmVscyA9IDE7Ci0gICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tp
XS5tRGF0YUJ5dGVTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxvYXQpOwotICAgICAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBhdWRpb0J1cy0+Y2hhbm5lbChp
KS0+bXV0YWJsZURhdGEoKTsKLSAgICAgICAgICAgIEFTU0VSVChidWZmZXJMaXN0LT5tQnVmZmVy
c1tpXS5tRGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQXVkaW9C
dWZmZXJMaXN0KGJ1ZmZlckxpc3QpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFdlYkF1
ZGlvLCAiR2VuZXJhdGVkIGJ1ZmZlciBpbiBBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cygpIGRp
ZCBub3QgcGFzcyB2YWxpZGF0aW9uIik7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxpc3QpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBSZWFkIGZyb20gdGhlIGZpbGUgKG9yIGluLW1l
bW9yeSB2ZXJzaW9uKQotICAgIFVJbnQzMiBmcmFtZXNUb1JlYWQgPSBudW1iZXJPZkZyYW1lczsK
LSAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVSZWFkKG1fZXh0QXVkaW9GaWxlUmVmLCAmZnJhbWVz
VG9SZWFkLCBidWZmZXJMaXN0KTsKLSAgICBpZiAocmVzdWx0ICE9IG5vRXJyKSB7Ci0gICAgICAg
IGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQotICAgIGlmIChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9PSAy
KSB7Ci0gICAgICAgIC8vIE1peCBzdGVyZW8gZG93biB0byBtb25vCi0gICAgICAgIGZsb2F0KiBk
ZXN0TCA9IGF1ZGlvQnVzLT5jaGFubmVsKDApLT5tdXRhYmxlRGF0YSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mRnJhbWVzOyBpKyspCi0gICAgICAgICAgICBkZXN0
TFtpXSA9IDAuNWYgKiAoYnVmZmVyTFtpXSArIGJ1ZmZlclJbaV0pOwotICAgIH0KLQotICAgIC8v
IENsZWFudXAKLSAgICBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxpc3QpOwotCi0gICAg
cmV0dXJuIGF1ZGlvQnVzOwotfQotCi1SZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRp
b0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVS
YXRlKQotewotICAgIHJldHVybiBBdWRpb0ZpbGVSZWFkZXIoZmlsZVBhdGgpLmNyZWF0ZUJ1cyhz
YW1wbGVSYXRlLCBtaXhUb01vbm8pOwotfQotCi1SZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zy
b21Jbk1lbW9yeUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJv
b2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIHJldHVybiBBdWRpb0ZpbGVS
ZWFkZXIoZGF0YSwgZGF0YVNpemUpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0K
LSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1Njg1YmQ1YWU4OGY3ZWJmOTEwOTBkYmE3OTQyY2FhMDk3OTA3ODJmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFkZXJNYWMuaAorKysgL2Rldi9udWxs
CkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgQXVkaW9GaWxlUmVhZGVyTWFjX2gKLSNkZWZpbmUgQXVkaW9GaWxl
UmVhZGVyTWFjX2gKLQotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRpb0ZpbGUuaD4KLSNpbmNs
dWRlIDxBdWRpb1Rvb2xib3gvRXh0ZW5kZWRBdWRpb0ZpbGUuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXVkaW9CdXM7Ci0gICAgCi0v
LyBXcmFwcGVyIGNsYXNzIGZvciBBdWRpb0ZpbGUgYW5kIEV4dEF1ZGlvRmlsZSBDb3JlQXVkaW8g
QVBJcyBmb3IgcmVhZGluZyBmaWxlcyBhbmQgaW4tbWVtb3J5IHZlcnNpb25zIG9mIHRoZW0uLi4K
LQotY2xhc3MgQXVkaW9GaWxlUmVhZGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBdWRpb0Zp
bGVSZWFkZXIoY29uc3QgY2hhciogZmlsZVBhdGgpOwotICAgIGV4cGxpY2l0IEF1ZGlvRmlsZVJl
YWRlcihjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpOwotICAgIH5BdWRpb0ZpbGVS
ZWFkZXIoKTsKLQotICAgIC8vIFJldHVybnMgbnVsbHB0ciBpZiBlcnJvcgotICAgIFJlZlB0cjxB
dWRpb0J1cz4gY3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vKTsKLQot
ICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICBzaXpl
X3QgZGF0YVNpemUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFTaXplOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIE9TU3RhdHVzIHJlYWRQcm9jKHZvaWQqIGNsaWVudERhdGEsIFNJbnQ2NCBwb3Np
dGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBVSW50MzIqIGFjdHVhbENv
dW50KTsKLSAgICBzdGF0aWMgU0ludDY0IGdldFNpemVQcm9jKHZvaWQqIGNsaWVudERhdGEpOwot
Ci0gICAgY29uc3Qgdm9pZCogbV9kYXRhOwotICAgIHNpemVfdCBtX2RhdGFTaXplOwotCi0gICAg
QXVkaW9GaWxlSUQgbV9hdWRpb0ZpbGVJRDsKLSAgICBFeHRBdWRpb0ZpbGVSZWYgbV9leHRBdWRp
b0ZpbGVSZWY7Ci0KLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9maWxlRGF0YUZv
cm1hdDsKLSAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gbV9jbGllbnREYXRhRm9ybWF0
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotIAotI2VuZGlmIC8vIEF1ZGlvRmlsZVJl
YWRlck1hY19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431942</attachid>
            <date>2021-06-21 20:50:20 -0700</date>
            <delta_ts>2021-06-21 21:22:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227205-20210622135018.patch</filename>
            <type>text/plain</type>
            <size>49050</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjRlY2VjOTBkZDZjYjQy
NGM0YjJjYjY0NDA2NzFlZjI0NDk0ODAxMi4uYzlkMGY4OTA5MTI4NzI0NmJiZmVmODQzMzYxYmVl
Y2U0NjBmNzJlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTA2LTIxICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWVyZ2UgQXVkaW9GaWxl
UmVhZGVyTWFjIGFuZCBBdWRpb0ZpbGVSZWFkZXJJT1MgaW50byBBdWRpb0ZpbGVSZWFkZXJDb2Nv
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3MjA1
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTU0OTUyNz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBDaHJpcyBEdW1lei4KKworICAgICAgICBNZXJnZSBBdWRpb0ZpbGVSZWFkZXJJT1MgYW5kIEF1
ZGlvRmlsZVJlYWRlck1hYyBpbnRvIEF1ZGlvRmlsZVJlYWRlckNvY29hLgorICAgICAgICBObyBj
aGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmls
ZVJlYWRlckNvY29hLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZUF1ZGlvQnVmZmVy
TGlzdCk6IG1ha2UgbWV0aG9kIHN0YXRpYyBhcyBpdCdzIG5vdCB1c2VkIGVsc2V3aGVyZS4KKyAg
ICAgICAgKFdlYkNvcmU6OmRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QpOiBtYWtlIG1ldGhvZCBzdGF0
aWMgYXMgaXQncyBub3QgdXNlZCBlbHNld2hlcmUuCisgICAgICAgIChXZWJDb3JlOjp2YWxpZGF0
ZUF1ZGlvQnVmZmVyTGlzdCk6IG1ha2UgbWV0aG9kIHN0YXRpYyBhcyBpdCdzIG5vdCB1c2VkIGVs
c2V3aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlQnVzRnJvbUF1ZGlvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9tSW5N
ZW1vcnlBdWRpb0ZpbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmls
ZVJlYWRlckNvY29hLmg6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkYXRhU2l6ZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklP
Uy5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0ZpbGVSZWFk
ZXJNYWMuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb0Zp
bGVSZWFkZXJNYWMuaDogUmVtb3ZlZC4KKwogMjAyMS0wNi0yMCAgQWxhbiBCdWp0YXMgIDx6YWxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgSGl0VGVzdExvY2F0aW9uOjptX2JvdW5kaW5nQm94IHNo
b3VsZCBiZSBhYmxlIGhvbGQgc3VicGl4ZWwgdmFsdWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CmluZGV4IDJiMzkwNjEyYzg1NTdlYTA2MzRkNmM0NmIzMTcxMGE1MzdhYjQ1M2UuLmJjNjdjOGFm
NmU3NTI0NGNkYjk3ZTUxMDRhYjBiNTUxMTM5NzhiZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCkBAIC0yMDUsNyArMjA1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vYXVkaW8vY29jb2EvV2ViQXVkaW9CdWZmZXJMaXN0LmNwcAogCiAgICAgcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvQnVzTWFjLm1tCi0gICAgcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
RmlsZVJlYWRlck1hYy5jcHAKICAgICBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9IYXJkd2FyZUxp
c3RlbmVyTWFjLmNwcAogICAgIHBsYXRmb3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNDcxZDhhNTFiYTIzY2I1YjhjZDUzMTQzNDkyYjYx
MTU2ZTQ1YTViMy4uZGVlNzI1ZmFlMzE4NmI2NzI3OTE3N2U2NzI2NGY3MmI3M2U5NTI1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yMjUsMTMgKzIyNSwxMSBAQCBwbGF0Zm9ybS9hdWRp
by9jb2NvYS9DQVJpbmdCdWZmZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9jb2NvYS9NZWRpYVNlc3Np
b25NYW5hZ2VyQ29jb2EubW0KIHBsYXRmb3JtL2F1ZGlvL2NvY29hL1dlYkF1ZGlvQnVmZmVyTGlz
dC5jcHAKIHBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb091dHB1dFVuaXRBZGFwdG9ySU9TLmNwcCBA
bm8tdW5pZnkKLXBsYXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuY3BwIEBuby11
bmlmeQogcGxhdGZvcm0vYXVkaW8vaW9zL0F1ZGlvU2Vzc2lvbklPUy5tbSBAbm8tdW5pZnkKIHBs
YXRmb3JtL2F1ZGlvL2lvcy9NZWRpYVNlc3Npb25IZWxwZXJJT1MubW0gQG5vLXVuaWZ5CiBwbGF0
Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uTWFuYWdlcklPUy5tbSBAbm8tdW5pZnkKIHBsYXRm
b3JtL2F1ZGlvL21hYy9BdWRpb0J1c01hYy5tbQogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvT3V0
cHV0VW5pdEFkYXB0b3JNYWMuY3BwCi1wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVy
TWFjLmNwcAogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvSGFyZHdhcmVMaXN0ZW5lck1hYy5jcHAK
IHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nlc3Npb25NYWMubW0KIHBsYXRmb3JtL2F1ZGlvL21h
Yy9GRlRGcmFtZU1hYy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA3YmFiZDUzODcwMWE3N2E4OTBmNzYxZDI0ZDg5MDNiODVl
MGE3MTNmLi4xM2NlM2UwNjkwMzZmNmFlZjgzYzlhOTFjNjMwNGU0NDVmMjE3NTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
MzgxLDggKzQzODEsNiBAQAogCQlDRDUzOTNENDE3NUUwMTg2MDBDMDcxMjMgLyogSlNNZW1vcnlJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDUz
OTNEMjE3NUUwMTg2MDBDMDcxMjMgLyogSlNNZW1vcnlJbmZvLmggKi87IH07CiAJCUNENTRBNzYy
MTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDU0QTc2
MDE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMu
Y3BwICovOyB9OwogCQlDRDU0QTc2MzE4MEY5RjcwMDBCMDc2QzkgLyogQXVkaW9UcmFja1ByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IENENTRBNzYxMTgwRjlGNzAwMEIwNzZDOSAvKiBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU291cmNlQVZGT2JqQy5oICovOyB9OwotCQlDRDU1OTY5MTE0NzVCNjc4MDAxRDBCRDAg
LyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENENTU5NjhGMTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFk
ZXJJT1MuY3BwICovOyB9OwotCQlDRDU1OTY5MjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxl
UmVhZGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi87IH07
CiAJCUNENTg5NkUyMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1ODk2
RTAxQ0QyQjE1MTAwQjNCQ0M4IC8qIFdlYlBsYXliYWNrQ29udHJvbHNNYW5hZ2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0Q1RDI3NzgxRTgz
MThFMDAwRDgwQTNEIC8qIFdlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q1RDI3NzYxRTgzMThFMDAwRDgw
QTNEIC8qIFdlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNENUU1QjVGMUExNUNFNTQwMDBDNjA5RSAv
KiBQYWdlQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0Q1RTVCNUUxQTE1Q0U1NDAwMEM2MDlFIC8qIFBhZ2VDb25maWd1cmF0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE1
MDE0LDggKzE1MDEyLDYgQEAKIAkJQ0Q1NEE3NjAxODBGOUY3MDAwQjA3NkM5IC8qIEF1ZGlvVHJh
Y2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1NEE3NjExODBGOUY3MDAwQjA3NkM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNENTRERTQ5MTc0NjlDNkQwMDVFNUIzNiAvKiBBdWRp
b1Nlc3Npb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBB
dWRpb1Nlc3Npb25NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNENTU5NjhG
MTQ3NUI2NzgwMDFEMEJEMCAvKiBBdWRpb0ZpbGVSZWFkZXJJT1MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVySU9TLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0Q1NTk2OTAxNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmls
ZVJlYWRlcklPUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb0ZpbGVS
ZWFkZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0Q1ODk0OTMyMTg3NDA2
NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNENTg5NkRGMUNEMkIxNTEwMEIzQkNDOCAvKiBXZWJQbGF5YmFja0NvbnRyb2xzTWFuYWdl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlBsYXliYWNr
Q29udHJvbHNNYW5hZ2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRDU4OTZF
MDFDRDJCMTUxMDBCM0JDQzggLyogV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGxheWJhY2tDb250cm9sc01hbmFnZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MjM0LDggKzE3MjMwLDYgQEAKIAkJRkQz
MTYwNzkxMkIwMjZGNzAwQzFBMzU5IC8qIFZlY3Rvck1hdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmVjdG9yTWF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGRDMxNjBCNTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9CdXNNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdWRpb0J1c01hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkQzMTYwQjYxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvT3V0cHV0
VW5pdEFkYXB0b3JNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QXVkaW9PdXRwdXRVbml0QWRhcHRvck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZEMzE2MEI4MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0ZpbGVSZWFkZXJNYWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9GaWxlUmVhZGVyTWFjLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkQzMTYwQjkxMkIwMjcyQTAwQzFBMzU5
IC8qIEF1ZGlvRmlsZVJlYWRlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBdWRpb0ZpbGVSZWFkZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkQz
MTYwQkExMkIwMjcyQTAwQzFBMzU5IC8qIEZGVEZyYW1lTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZGVEZyYW1lTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkQzNTkxOEQxMzhEQjIyMDAwRTFFQkVDIC8qIEF1ZGlvUGFyYW1UaW1lbGlu
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1BhcmFtVGlt
ZWxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRDM1OTE4RTEzOERCMjIw
MDBFMUVCRUMgLyogQXVkaW9QYXJhbVRpbWVsaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEF1ZGlvUGFyYW1UaW1lbGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjgzODYsOCArMjgzODAsNiBAQAogCQlDRDBFRUUwRDE0NzQzRTQ4MDAzRUFGQTIgLyog
aW9zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDRDU1
OTY4RjE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmNwcCAqLywKLQkJCQlD
RDU1OTY5MDE0NzVCNjc4MDAxRDBCRDAgLyogQXVkaW9GaWxlUmVhZGVySU9TLmggKi8sCiAJCQkJ
Q0QwRUVFMEIxNDc0M0UzNTAwM0VBRkEyIC8qIEF1ZGlvT3V0cHV0VW5pdEFkYXB0b3JJT1MuY3Bw
ICovLAogCQkJCUNEMzZDMTYxMjYwN0U3ODYwMEM4QzUyOSAvKiBBdWRpb1Nlc3Npb25JT1MuaCAq
LywKIAkJCQlDREE3OTgyNTE3MEEyNzkwMDBENDVDNTUgLyogQXVkaW9TZXNzaW9uSU9TLm1tICov
LApAQCAtMzE0NjEsOCArMzE0NTMsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQlGRDMxNjBCNTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9CdXNNYWMubW0gKi8s
Ci0JCQkJRkQzMTYwQjgxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRmlsZVJlYWRlck1hYy5jcHAg
Ki8sCi0JCQkJRkQzMTYwQjkxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRmlsZVJlYWRlck1hYy5o
ICovLAogCQkJCUNEMkY0QTI1MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3YXJlTGlzdGVu
ZXJNYWMuY3BwICovLAogCQkJCUNEMkY0QTI2MThEOEEzNDkwMDYzNzQ2RCAvKiBBdWRpb0hhcmR3
YXJlTGlzdGVuZXJNYWMuaCAqLywKIAkJCQlGRDMxNjBCNjEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9PdXRwdXRVbml0QWRhcHRvck1hYy5jcHAgKi8sCkBAIC0zNjY2Niw3ICszNjY1Niw2IEBACiAJ
CQlmaWxlcyA9ICgKIAkJCQlBOTc4N0NCNDFGNUY1QzY2MDBDNTUxQzYgLyogQWNjZXNzaWJpbGl0
eU1lZGlhT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMxRjdCNzMxMjQ0OEYyQUMwMDEy
NDU1NyAvKiBBR1hDb21waWxlclNlcnZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQ0Q1NTk2
OTExNDc1QjY3ODAwMUQwQkQwIC8qIEF1ZGlvRmlsZVJlYWRlcklPUy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlDRDBFRUUwRTE0NzQzRjM5MDAzRUFGQTIgLyogQXVkaW9PdXRwdXRVbml0QWRhcHRv
cklPUy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREE3OTgyNzE3MEEyNzkxMDBENDVDNTUgLyog
QXVkaW9TZXNzaW9uSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4QTdCQkIxOTc3MzVGRTAw
Q0JENjQzIC8qIEF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVS
ZWFkZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRp
b0ZpbGVSZWFkZXJDb2NvYS5jcHAKaW5kZXggN2MxYzY0ZWQ3YzdjNzkyZDA0Y2JiOGNhY2M2NDJi
NjRhNjEyZDRmYS4uOTljZDYzYzMzZDIxZTkzMzIwZDczMzM1ODViZmI0MTE4M2JiZTRmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9GaWxlUmVh
ZGVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1
ZGlvRmlsZVJlYWRlckNvY29hLmNwcApAQCAtMzIsMTEgKzMyLDMyIEBACiAjaWYgRU5BQkxFKFdF
Ql9BVURJTykKICNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXJDb2NvYS5oIgogCisjaW5jbHVkZSAi
QXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKKyNpbmNsdWRlICJGbG9h
dENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8Q29yZUZvdW5k
YXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaW5jbHVkZSA8d3RmL1NvZnRMaW5raW5n
Lmg+CisKK1NPRlRfTElOS19GUkFNRVdPUksoQXVkaW9Ub29sYm94KQorU09GVF9MSU5LKEF1ZGlv
VG9vbGJveCwgQXVkaW9GaWxlQ2xvc2UsIE9TU3RhdHVzLCAoQXVkaW9GaWxlSUQgaW5BdWRpb0Zp
bGUpLCAoaW5BdWRpb0ZpbGUpKQorU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9GaWxlT3Bl
bldpdGhDYWxsYmFja3MsIE9TU3RhdHVzLCAodm9pZCAqaW5DbGllbnREYXRhLCBBdWRpb0ZpbGVf
UmVhZFByb2MgaW5SZWFkRnVuYywgQXVkaW9GaWxlX1dyaXRlUHJvYyBpbldyaXRlRnVuYywgQXVk
aW9GaWxlX0dldFNpemVQcm9jIGluR2V0U2l6ZUZ1bmMsIEF1ZGlvRmlsZV9TZXRTaXplUHJvYyBp
blNldFNpemVGdW5jLCBBdWRpb0ZpbGVUeXBlSUQgaW5GaWxlVHlwZUhpbnQsIEF1ZGlvRmlsZUlE
ICpvdXRBdWRpb0ZpbGUpLCAoaW5DbGllbnREYXRhLCBpblJlYWRGdW5jLCBpbldyaXRlRnVuYywg
aW5HZXRTaXplRnVuYywgaW5TZXRTaXplRnVuYywgaW5GaWxlVHlwZUhpbnQsIG91dEF1ZGlvRmls
ZSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVEaXNwb3NlLCBPU1N0YXR1
cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSksIChpbkV4dEF1ZGlvRmlsZSkpCitT
T0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eSwgT1NTdGF0dXMs
IChFeHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUsIEV4dEF1ZGlvRmlsZVByb3BlcnR5SUQg
aW5Qcm9wZXJ0eUlELCBVSW50MzIgKmlvUHJvcGVydHlEYXRhU2l6ZSwgdm9pZCAqb3V0UHJvcGVy
dHlEYXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpblByb3BlcnR5SUQsIGlvUHJvcGVydHlEYXRhU2l6
ZSwgb3V0UHJvcGVydHlEYXRhKSkKK1NPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmls
ZVJlYWQsIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxlLCBVSW50MzIg
KmlvTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmlvRGF0YSksIChpbkV4dEF1ZGlvRmls
ZSwgaW9OdW1iZXJGcmFtZXMsIGlvRGF0YSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRB
dWRpb0ZpbGVTZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRp
b0ZpbGUsIEV4dEF1ZGlvRmlsZVByb3BlcnR5SUQgaW5Qcm9wZXJ0eUlELCBVSW50MzIgaW5Qcm9w
ZXJ0eURhdGFTaXplLCBjb25zdCB2b2lkICppblByb3BlcnR5RGF0YSksIChpbkV4dEF1ZGlvRmls
ZSwgaW5Qcm9wZXJ0eUlELCBpblByb3BlcnR5RGF0YVNpemUsIGluUHJvcGVydHlEYXRhKSkKK1NP
RlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZVdyYXBBdWRpb0ZpbGVJRCwgT1NTdGF0
dXMsIChBdWRpb0ZpbGVJRCBpbkZpbGVJRCwgQm9vbGVhbiBpbkZvcldyaXRpbmcsIEV4dEF1ZGlv
RmlsZVJlZiAqb3V0RXh0QXVkaW9GaWxlKSwgKGluRmlsZUlELCBpbkZvcldyaXRpbmcsIG91dEV4
dEF1ZGlvRmlsZSkpCitTT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVPcGVuVVJM
LCBPU1N0YXR1cywgKENGVVJMUmVmIGluVVJMLCBFeHRBdWRpb0ZpbGVSZWYqIG91dEV4dEF1ZGlv
RmlsZSksIChpblVSTCwgb3V0RXh0QXVkaW9GaWxlKSkKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUF1ZGlvQnVmZmVyTGlzdCogdHJ5Q3JlYXRlQXVkaW9CdWZmZXJMaXN0KHNpemVf
dCBudW1iZXJPZkJ1ZmZlcnMpCitzdGF0aWMgV0FSTl9VTlVTRURfUkVUVVJOIEF1ZGlvQnVmZmVy
TGlzdCogdHJ5Q3JlYXRlQXVkaW9CdWZmZXJMaXN0KHNpemVfdCBudW1iZXJPZkJ1ZmZlcnMpCiB7
CiAgICAgQ2hlY2tlZFNpemUgYnVmZmVyTGlzdFNpemUgPSBzaXplb2YoQXVkaW9CdWZmZXJMaXN0
KSAtIHNpemVvZihBdWRpb0J1ZmZlcik7CiAgICAgYnVmZmVyTGlzdFNpemUgKz0gbnVtYmVyT2ZC
dWZmZXJzICogc2l6ZW9mKEF1ZGlvQnVmZmVyKTsKQEAgLTUyLDEyICs3MywxMiBAQCBBdWRpb0J1
ZmZlckxpc3QqIHRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3QgbnVtYmVyT2ZCdWZmZXJz
KQogICAgIHJldHVybiBidWZmZXJMaXN0OwogfQogCi12b2lkIGRlc3Ryb3lBdWRpb0J1ZmZlckxp
c3QoQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0KQorc3RhdGljIGlubGluZSB2b2lkIGRlc3Ry
b3lBdWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0KQogewogICAgIGZh
c3RGcmVlKGJ1ZmZlckxpc3QpOwogfQogCi1ib29sIHZhbGlkYXRlQXVkaW9CdWZmZXJMaXN0KEF1
ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKK3N0YXRpYyBib29sIHZhbGlkYXRlQXVkaW9CdWZm
ZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKIHsKICAgICBpZiAoIWJ1ZmZlckxp
c3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTc4LDYgKzk5LDE4OSBAQCBib29sIHZhbGlk
YXRlQXVkaW9CdWZmZXJMaXN0KEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3QgY2hh
ciogZmlsZVBhdGgpCit7CisgICAgYXV0byBmaWxlUGF0aFN0cmluZyA9IGFkb3B0Q0YoQ0ZTdHJp
bmdDcmVhdGVXaXRoQ1N0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmaWxlUGF0aCwga0NGU3Ry
aW5nRW5jb2RpbmdVVEY4KSk7CisgICAgYXV0byB1cmxSZWYgPSBhZG9wdENGKENGVVJMQ3JlYXRl
V2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIGZpbGVQYXRoU3RyaW5nLmdl
dCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKKyAgICBpZiAoIXVybFJlZikKKyAg
ICAgICAgcmV0dXJuOworICAgIEV4dEF1ZGlvRmlsZU9wZW5VUkwodXJsUmVmLmdldCgpLCAmbV9l
eHRBdWRpb0ZpbGVSZWYpOworfQorCitBdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCisgICAgOiBtX2RhdGEoZGF0YSkKKyAg
ICAsIG1fZGF0YVNpemUoZGF0YVNpemUpCit7CisgICAgaWYgKEF1ZGlvRmlsZU9wZW5XaXRoQ2Fs
bGJhY2tzKHRoaXMsIHJlYWRQcm9jLCAwLCBnZXRTaXplUHJvYywgMCwgMCwgJm1fYXVkaW9GaWxl
SUQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRXh0QXVkaW9GaWxlV3Jh
cEF1ZGlvRmlsZUlEKG1fYXVkaW9GaWxlSUQsIGZhbHNlLCAmbV9leHRBdWRpb0ZpbGVSZWYpICE9
IG5vRXJyKQorICAgICAgICBtX2V4dEF1ZGlvRmlsZVJlZiA9IDA7Cit9CisKK0F1ZGlvRmlsZVJl
YWRlcjo6fkF1ZGlvRmlsZVJlYWRlcigpCit7CisgICAgaWYgKG1fZXh0QXVkaW9GaWxlUmVmKQor
ICAgICAgICBFeHRBdWRpb0ZpbGVEaXNwb3NlKG1fZXh0QXVkaW9GaWxlUmVmKTsKKworICAgIG1f
ZXh0QXVkaW9GaWxlUmVmID0gMDsKKworICAgIGlmIChtX2F1ZGlvRmlsZUlEKQorICAgICAgICBB
dWRpb0ZpbGVDbG9zZShtX2F1ZGlvRmlsZUlEKTsKKworICAgIG1fYXVkaW9GaWxlSUQgPSAwOwor
fQorCitPU1N0YXR1cyBBdWRpb0ZpbGVSZWFkZXI6OnJlYWRQcm9jKHZvaWQqIGNsaWVudERhdGEs
IFNJbnQ2NCBwb3NpdGlvbiwgVUludDMyIHJlcXVlc3RDb3VudCwgdm9pZCogYnVmZmVyLCBVSW50
MzIqIGFjdHVhbENvdW50KQoreworICAgIGF1dG8qIGF1ZGlvRmlsZVJlYWRlciA9IHN0YXRpY19j
YXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNsaWVudERhdGEpOworCisgICAgYXV0byBkYXRhU2l6ZSA9
IGF1ZGlvRmlsZVJlYWRlci0+ZGF0YVNpemUoKTsKKyAgICBhdXRvKiBkYXRhID0gYXVkaW9GaWxl
UmVhZGVyLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKKworICAgIGlmIChz
dGF0aWNfY2FzdDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7CisgICAgICAgIHNpemVf
dCBieXRlc0F2YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3NpdGlv
bik7CisgICAgICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxhYmxl
ID8gcmVxdWVzdENvdW50IDogYnl0ZXNBdmFpbGFibGU7CisgICAgICAgIG1lbWNweShidWZmZXIs
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVh
ZCk7CisgICAgfQorCisgICAgaWYgKGFjdHVhbENvdW50KQorICAgICAgICAqYWN0dWFsQ291bnQg
PSBieXRlc1RvUmVhZDsKKworICAgIHJldHVybiBub0VycjsKK30KKworU0ludDY0IEF1ZGlvRmls
ZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Cit9CisK
K1JlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxl
UmF0ZSwgYm9vbCBtaXhUb01vbm8pCit7CisgICAgaWYgKCFtX2V4dEF1ZGlvRmlsZVJlZikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBHZXQgZmlsZSdzIGRhdGEgZm9ybWF0Cisg
ICAgVUludDMyIHNpemUgPSBzaXplb2YobV9maWxlRGF0YUZvcm1hdCk7CisgICAgaWYgKEV4dEF1
ZGlvRmlsZUdldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVy
dHlfRmlsZURhdGFGb3JtYXQsICZzaXplLCAmbV9maWxlRGF0YUZvcm1hdCkgIT0gbm9FcnIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBt
X2ZpbGVEYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lOworCisgICAgLy8gTnVtYmVyIG9mIGZy
YW1lcworICAgIFNJbnQ2NCBudW1iZXJPZkZyYW1lczY0ID0gMDsKKyAgICBzaXplID0gc2l6ZW9m
KG51bWJlck9mRnJhbWVzNjQpOworICAgIGlmIChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4
dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZz
aXplLCAmbnVtYmVyT2ZGcmFtZXM2NCkgIT0gbm9FcnIgfHwgbnVtYmVyT2ZGcmFtZXM2NCA8PSAw
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGRvdWJsZSBmaWxlU2FtcGxlUmF0ZSA9
IG1fZmlsZURhdGFGb3JtYXQubVNhbXBsZVJhdGU7CisKKyAgICAvLyBNYWtlIGNsaWVudCBmb3Jt
YXQgc2FtZSBudW1iZXIgb2YgY2hhbm5lbHMgYXMgZmlsZSBmb3JtYXQsIGJ1dCB0d2VhayBhIGZl
dyB0aGluZ3MuCisgICAgLy8gQ2xpZW50IGZvcm1hdCB3aWxsIGJlIGxpbmVhciBQQ00gKGNhbm9u
aWNhbCksIGFuZCBwb3RlbnRpYWxseSBjaGFuZ2Ugc2FtcGxlLXJhdGUuCisgICAgbV9jbGllbnRE
YXRhRm9ybWF0ID0gbV9maWxlRGF0YUZvcm1hdDsKKworICAgIGNvbnN0IGludCBieXRlc1BlckZs
b2F0ID0gc2l6ZW9mKEZsb2F0MzIpOworICAgIGNvbnN0IGludCBiaXRzUGVyQnl0ZSA9IDg7Cisg
ICAgbV9jbGllbnREYXRhRm9ybWF0Lm1Gb3JtYXRJRCA9IGtBdWRpb0Zvcm1hdExpbmVhclBDTTsK
KyAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdEZsYWdzID0ga0F1ZGlvRm9ybWF0RmxhZ3NO
YXRpdmVGbG9hdFBhY2tlZCB8IGtBdWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAg
IG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBieXRlc1BlckZsb2F0OworICAg
IG1fY2xpZW50RGF0YUZvcm1hdC5tRnJhbWVzUGVyUGFja2V0ID0gMTsKKyAgICBtX2NsaWVudERh
dGFGb3JtYXQubUJ5dGVzUGVyRnJhbWUgPSBieXRlc1BlckZsb2F0OworICAgIG1fY2xpZW50RGF0
YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7CisgICAgbV9jbGll
bnREYXRhRm9ybWF0Lm1CaXRzUGVyQ2hhbm5lbCA9IGJpdHNQZXJCeXRlICogYnl0ZXNQZXJGbG9h
dDsKKworICAgIGlmIChzYW1wbGVSYXRlKQorICAgICAgICBtX2NsaWVudERhdGFGb3JtYXQubVNh
bXBsZVJhdGUgPSBzYW1wbGVSYXRlOworCisgICAgaWYgKEV4dEF1ZGlvRmlsZVNldFByb3BlcnR5
KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xpZW50RGF0YUZvcm1h
dCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiksICZtX2NsaWVudERhdGFGb3Jt
YXQpICE9IG5vRXJyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENoYW5nZSBu
dW1iZXJPZkZyYW1lczY0IHRvIGRlc3RpbmF0aW9uIHNhbXBsZS1yYXRlCisgICAgbnVtYmVyT2ZG
cmFtZXM2NCA9IG51bWJlck9mRnJhbWVzNjQgKiAobV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVS
YXRlIC8gZmlsZVNhbXBsZVJhdGUpOworICAgIHNpemVfdCBudW1iZXJPZkZyYW1lcyA9IHN0YXRp
Y19jYXN0PHNpemVfdD4obnVtYmVyT2ZGcmFtZXM2NCk7CisKKyAgICBzaXplX3QgYnVzQ2hhbm5l
bENvdW50ID0gbWl4VG9Nb25vID8gMSA6IG51bWJlck9mQ2hhbm5lbHM7CisKKyAgICAvLyBDcmVh
dGUgQXVkaW9CdXMgd2hlcmUgd2UnbGwgcHV0IHRoZSBQQ00gYXVkaW8gZGF0YQorICAgIGF1dG8g
YXVkaW9CdXMgPSBBdWRpb0J1czo6Y3JlYXRlKGJ1c0NoYW5uZWxDb3VudCwgbnVtYmVyT2ZGcmFt
ZXMpOworICAgIGF1ZGlvQnVzLT5zZXRTYW1wbGVSYXRlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
bV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKSk7IC8vIHNhdmUgZm9yIGxhdGVyCisKKyAg
ICAvLyBPbmx5IGFsbG9jYXRlZCBpbiB0aGUgbWl4VG9Nb25vIGNhc2U7IGRlYWxsb2NhdGVkIG9u
IGRlc3RydWN0aW9uLgorICAgIEF1ZGlvRmxvYXRBcnJheSBsZWZ0Q2hhbm5lbDsKKyAgICBBdWRp
b0Zsb2F0QXJyYXkgcmlnaHRDaGFubmVsOworCisgICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJM
aXN0ID0gdHJ5Q3JlYXRlQXVkaW9CdWZmZXJMaXN0KG51bWJlck9mQ2hhbm5lbHMpOworICAgIGlm
ICghYnVmZmVyTGlzdCkgeworICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgInRy
eUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdCglbGQpIHJldHVybmVkIG51bGwiLCBudW1iZXJPZkNoYW5u
ZWxzKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGNvbnN0IHNpemVfdCBi
dWZmZXJTaXplID0gbnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxvYXQpOworCisgICAgUkVMRUFT
RV9BU1NFUlQoYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnMgPT0gbnVtYmVyT2ZDaGFubmVscyk7
CisgICAgaWYgKG1peFRvTW9ubyAmJiBudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKKyAgICAgICAg
bGVmdENoYW5uZWwucmVzaXplKG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgcmlnaHRDaGFubmVs
LnJlc2l6ZShudW1iZXJPZkZyYW1lcyk7CisKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNb
MF0ubU51bWJlckNoYW5uZWxzID0gMTsKKyAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbMF0u
bURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJz
WzBdLm1EYXRhID0gbGVmdENoYW5uZWwuZGF0YSgpOworCisgICAgICAgIGJ1ZmZlckxpc3QtPm1C
dWZmZXJzWzFdLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZm
ZXJzWzFdLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOworICAgICAgICBidWZmZXJMaXN0LT5t
QnVmZmVyc1sxXS5tRGF0YSA9IHJpZ2h0Q2hhbm5lbC5kYXRhKCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIW1peFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09IDEp
OworCisgICAgICAgIC8vIEZvciBUcnVlLXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0KQor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewor
ICAgICAgICAgICAgYXVkaW9CdXMtPmNoYW5uZWwoaSktPnplcm8oKTsKKyAgICAgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IDE7CisgICAgICAgICAgICBi
dWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKKyAgICAg
ICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhID0gYXVkaW9CdXMtPmNoYW5uZWwo
aSktPm11dGFibGVEYXRhKCk7CisgICAgICAgICAgICBBU1NFUlQoYnVmZmVyTGlzdC0+bUJ1ZmZl
cnNbaV0ubURhdGEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZUF1ZGlv
QnVmZmVyTGlzdChidWZmZXJMaXN0KSkgeworICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJB
dWRpbywgIkdlbmVyYXRlZCBidWZmZXIgaW4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoKSBk
aWQgbm90IHBhc3MgdmFsaWRhdGlvbiIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0KTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gUmVhZCBmcm9tIHRoZSBmaWxlIChvciBpbi1t
ZW1vcnkgdmVyc2lvbikKKyAgICBVSW50MzIgZnJhbWVzVG9SZWFkID0gbnVtYmVyT2ZGcmFtZXM7
CisgICAgaWYgKEV4dEF1ZGlvRmlsZVJlYWQobV9leHRBdWRpb0ZpbGVSZWYsICZmcmFtZXNUb1Jl
YWQsIGJ1ZmZlckxpc3QpICE9IG5vRXJyKSB7CisgICAgICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxp
c3QoYnVmZmVyTGlzdCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGlm
IChtaXhUb01vbm8gJiYgbnVtYmVyT2ZDaGFubmVscyA9PSAyKSB7CisgICAgICAgIC8vIE1peCBz
dGVyZW8gZG93biB0byBtb25vCisgICAgICAgIGZsb2F0KiBkZXN0TCA9IGF1ZGlvQnVzLT5jaGFu
bmVsKDApLT5tdXRhYmxlRGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bWJlck9mRnJhbWVzOyArK2kpCisgICAgICAgICAgICBkZXN0TFtpXSA9IDAuNWYgKiAobGVmdENo
YW5uZWxbaV0gKyByaWdodENoYW5uZWxbaV0pOworICAgIH0KKworICAgIC8vIENsZWFudXAKKyAg
ICBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxpc3QpOworCisgICAgcmV0dXJuIGF1ZGlv
QnVzOworfQorCitSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3Qg
Y2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAg
IEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZmlsZVBhdGgpOworICAgIHJldHVybiByZWFkZXIuY3Jl
YXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Cit9CisKK1JlZlB0cjxBdWRpb0J1cz4gY3Jl
YXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRh
U2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgQXVkaW9GaWxl
UmVhZGVyIHJlYWRlcihkYXRhLCBkYXRhU2l6ZSk7CisgICAgcmV0dXJuIHJlYWRlci5jcmVhdGVC
dXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0KIAorfSAvLyBXZWJDb3JlCisKICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvRmlsZVJlYWRlckNvY29hLmgKaW5kZXggMjk4OWUzYzFiZWY4
M2MxZmJlYzM2ZTc2YTU0ZDI3N2QzNmUxMzc1Yi4uZmRlYmQwYTU0ZDAzOGFmMTlhMmQ2MWU3YjQ1
MWQ5M2Y5MjQ1MDc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Y29jb2EvQXVkaW9GaWxlUmVhZGVyQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb0ZpbGVSZWFkZXJDb2NvYS5oCkBAIC0zMSwxMSArMzEsNDAgQEAK
IAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9G
aWxlLmg+CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0V4dGVuZGVkQXVkaW9GaWxlLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdBUk5fVU5VU0VE
X1JFVFVSTiBBdWRpb0J1ZmZlckxpc3QqIHRyeUNyZWF0ZUF1ZGlvQnVmZmVyTGlzdChzaXplX3Qg
bnVtYmVyT2ZCdWZmZXJzKTsKLXZvaWQgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChBdWRpb0J1ZmZl
ckxpc3QqKTsKLWJvb2wgdmFsaWRhdGVBdWRpb0J1ZmZlckxpc3QoQXVkaW9CdWZmZXJMaXN0Kik7
CitjbGFzcyBBdWRpb0J1czsKKworLy8gV3JhcHBlciBjbGFzcyBmb3IgQXVkaW9GaWxlIGFuZCBF
eHRBdWRpb0ZpbGUgQ29yZUF1ZGlvIEFQSXMgZm9yIHJlYWRpbmcgZmlsZXMgYW5kIGluLW1lbW9y
eSB2ZXJzaW9ucyBvZiB0aGVtLi4uCisKK2NsYXNzIEF1ZGlvRmlsZVJlYWRlciB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKTsKKyAg
ICBleHBsaWNpdCBBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKTsKKyAgICB+QXVkaW9GaWxlUmVhZGVyKCk7CisKKyAgICBSZWZQdHI8QXVkaW9CdXM+IGNy
ZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubyk7IC8vIFJldHVybnMgbnVs
bHB0ciBvbiBlcnJvcgorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNpemU7
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgT1NTdGF0dXMgcmVhZFByb2Modm9pZCogY2xpZW50
RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZmZXIs
IFVJbnQzMiogYWN0dWFsQ291bnQpOworICAgIHN0YXRpYyBTSW50NjQgZ2V0U2l6ZVByb2Modm9p
ZCogY2xpZW50RGF0YSk7CisKKyAgICBjb25zdCB2b2lkKiBtX2RhdGEgPSB7IG51bGxwdHIgfTsK
KyAgICBzaXplX3QgbV9kYXRhU2l6ZSA9IHsgMCB9OworCisgICAgQXVkaW9GaWxlSUQgbV9hdWRp
b0ZpbGVJRCA9IHsgMCB9OworICAgIEV4dEF1ZGlvRmlsZVJlZiBtX2V4dEF1ZGlvRmlsZVJlZiA9
IHsgbnVsbHB0ciB9OworCisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fZmlsZURh
dGFGb3JtYXQ7CisgICAgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIG1fY2xpZW50RGF0YUZv
cm1hdDsKK307CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vaW9zL0F1ZGlvRmlsZVJlYWRlcklPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggOWFhZTllODFhYjQxZDU0NzQ2ODE1NDAzNTE3ODYwZmFkMzNjZTdlZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlcklPUy5oIgot
Ci0jaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotI2luY2x1
ZGUgIkF1ZGlvQnVzLmgiCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAi
QXVkaW9GaWxlUmVhZGVyQ29jb2EuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8
Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Nv
ZnRMaW5raW5nLmg+Ci0KLVNPRlRfTElOS19GUkFNRVdPUksoQXVkaW9Ub29sYm94KQotU09GVF9M
SU5LKEF1ZGlvVG9vbGJveCwgQXVkaW9GaWxlQ2xvc2UsIE9TU3RhdHVzLCAoQXVkaW9GaWxlSUQg
aW5BdWRpb0ZpbGUpLCAoaW5BdWRpb0ZpbGUpKQotU09GVF9MSU5LKEF1ZGlvVG9vbGJveCwgQXVk
aW9GaWxlT3BlbldpdGhDYWxsYmFja3MsIE9TU3RhdHVzLCAodm9pZCAqaW5DbGllbnREYXRhLCBB
dWRpb0ZpbGVfUmVhZFByb2MgaW5SZWFkRnVuYywgQXVkaW9GaWxlX1dyaXRlUHJvYyBpbldyaXRl
RnVuYywgQXVkaW9GaWxlX0dldFNpemVQcm9jIGluR2V0U2l6ZUZ1bmMsIEF1ZGlvRmlsZV9TZXRT
aXplUHJvYyBpblNldFNpemVGdW5jLCBBdWRpb0ZpbGVUeXBlSUQgaW5GaWxlVHlwZUhpbnQsIEF1
ZGlvRmlsZUlEICpvdXRBdWRpb0ZpbGUpLCAoaW5DbGllbnREYXRhLCBpblJlYWRGdW5jLCBpbldy
aXRlRnVuYywgaW5HZXRTaXplRnVuYywgaW5TZXRTaXplRnVuYywgaW5GaWxlVHlwZUhpbnQsIG91
dEF1ZGlvRmlsZSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVEaXNwb3Nl
LCBPU1N0YXR1cywgKEV4dEF1ZGlvRmlsZVJlZiBpbkV4dEF1ZGlvRmlsZSksIChpbkV4dEF1ZGlv
RmlsZSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eSwg
T1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYgaW5FeHRBdWRpb0ZpbGUsIEV4dEF1ZGlvRmlsZVBy
b3BlcnR5SUQgaW5Qcm9wZXJ0eUlELCBVSW50MzIgKmlvUHJvcGVydHlEYXRhU2l6ZSwgdm9pZCAq
b3V0UHJvcGVydHlEYXRhKSwgKGluRXh0QXVkaW9GaWxlLCBpblByb3BlcnR5SUQsIGlvUHJvcGVy
dHlEYXRhU2l6ZSwgb3V0UHJvcGVydHlEYXRhKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4
dEF1ZGlvRmlsZVJlYWQsIE9TU3RhdHVzLCAoRXh0QXVkaW9GaWxlUmVmIGluRXh0QXVkaW9GaWxl
LCBVSW50MzIgKmlvTnVtYmVyRnJhbWVzLCBBdWRpb0J1ZmZlckxpc3QgKmlvRGF0YSksIChpbkV4
dEF1ZGlvRmlsZSwgaW9OdW1iZXJGcmFtZXMsIGlvRGF0YSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29s
Ym94LCBFeHRBdWRpb0ZpbGVTZXRQcm9wZXJ0eSwgT1NTdGF0dXMsIChFeHRBdWRpb0ZpbGVSZWYg
aW5FeHRBdWRpb0ZpbGUsIEV4dEF1ZGlvRmlsZVByb3BlcnR5SUQgaW5Qcm9wZXJ0eUlELCBVSW50
MzIgaW5Qcm9wZXJ0eURhdGFTaXplLCBjb25zdCB2b2lkICppblByb3BlcnR5RGF0YSksIChpbkV4
dEF1ZGlvRmlsZSwgaW5Qcm9wZXJ0eUlELCBpblByb3BlcnR5RGF0YVNpemUsIGluUHJvcGVydHlE
YXRhKSkKLVNPRlRfTElOSyhBdWRpb1Rvb2xib3gsIEV4dEF1ZGlvRmlsZVdyYXBBdWRpb0ZpbGVJ
RCwgT1NTdGF0dXMsIChBdWRpb0ZpbGVJRCBpbkZpbGVJRCwgQm9vbGVhbiBpbkZvcldyaXRpbmcs
IEV4dEF1ZGlvRmlsZVJlZiAqb3V0RXh0QXVkaW9GaWxlKSwgKGluRmlsZUlELCBpbkZvcldyaXRp
bmcsIG91dEV4dEF1ZGlvRmlsZSkpCi1TT0ZUX0xJTksoQXVkaW9Ub29sYm94LCBFeHRBdWRpb0Zp
bGVPcGVuVVJMLCBPU1N0YXR1cywgKENGVVJMUmVmIGluVVJMLCBFeHRBdWRpb0ZpbGVSZWYqIG91
dEV4dEF1ZGlvRmlsZSksIChpblVSTCwgb3V0RXh0QXVkaW9GaWxlKSkKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1BdWRpb0ZpbGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBm
aWxlUGF0aCkKLSAgICA6IG1fZGF0YSgwKQotICAgICwgbV9kYXRhU2l6ZSgwKQotICAgICwgbV9h
dWRpb0ZpbGVJRCgwKQotICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKLXsKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGFkb3B0Q0YoQ0ZVUkxDcmVhdGVGcm9tRmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKGtDRkFsbG9jYXRvckRlZmF1bHQsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgVUludDgqPihmaWxlUGF0aCksIHN0cmxlbihmaWxlUGF0aCksIGZhbHNlKSk7Ci0gICAg
aWYgKCF1cmxSZWYpCi0gICAgICAgIHJldHVybjsKLSAgICBFeHRBdWRpb0ZpbGVPcGVuVVJMKHVy
bFJlZi5nZXQoKSwgJm1fZXh0QXVkaW9GaWxlUmVmKTsKLX0KLQotQXVkaW9GaWxlUmVhZGVyOjpB
dWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotICAgIDog
bV9kYXRhKGRhdGEpCi0gICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQotICAgICwgbV9hdWRpb0Zp
bGVJRCgwKQotICAgICwgbV9leHRBdWRpb0ZpbGVSZWYobnVsbHB0cikKLXsKLSAgICBpZiAoQXVk
aW9GaWxlT3BlbldpdGhDYWxsYmFja3ModGhpcywgcmVhZFByb2MsIDAsIGdldFNpemVQcm9jLCAw
LCAwLCAmbV9hdWRpb0ZpbGVJRCkgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChFeHRBdWRpb0ZpbGVXcmFwQXVkaW9GaWxlSUQobV9hdWRpb0ZpbGVJRCwgZmFsc2UsICZtX2V4
dEF1ZGlvRmlsZVJlZikgIT0gbm9FcnIpCi0gICAgICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gbnVs
bHB0cjsKLX0KLQotQXVkaW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVyKCkKLXsKLSAgICBp
ZiAobV9leHRBdWRpb0ZpbGVSZWYpCi0gICAgICAgIEV4dEF1ZGlvRmlsZURpc3Bvc2UobV9leHRB
dWRpb0ZpbGVSZWYpOwotCi0gICAgbV9leHRBdWRpb0ZpbGVSZWYgPSBudWxscHRyOwotCi0gICAg
aWYgKG1fYXVkaW9GaWxlSUQpCi0gICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1fYXVkaW9GaWxlSUQp
OwotCi0gICAgbV9hdWRpb0ZpbGVJRCA9IDA7Ci19Ci0KLU9TU3RhdHVzIEF1ZGlvRmlsZVJlYWRl
cjo6cmVhZFByb2Modm9pZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVx
dWVzdENvdW50LCB2b2lkKiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpCi17Ci0gICAgQXVk
aW9GaWxlUmVhZGVyKiBhdWRpb0ZpbGVSZWFkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb0ZpbGVSZWFk
ZXIqPihjbGllbnREYXRhKTsKLQotICAgIHNpemVfdCBkYXRhU2l6ZSA9IGF1ZGlvRmlsZVJlYWRl
ci0+ZGF0YVNpemUoKTsKLSAgICBjb25zdCB2b2lkKiBkYXRhID0gYXVkaW9GaWxlUmVhZGVyLT5k
YXRhKCk7Ci0gICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gMDsKLQotICAgIGlmIChzdGF0aWNfY2Fz
dDxVSW50NjQ+KHBvc2l0aW9uKSA8IGRhdGFTaXplKSB7Ci0gICAgICAgIHNpemVfdCBieXRlc0F2
YWlsYWJsZSA9IGRhdGFTaXplIC0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihwb3NpdGlvbik7Ci0gICAg
ICAgIGJ5dGVzVG9SZWFkID0gcmVxdWVzdENvdW50IDw9IGJ5dGVzQXZhaWxhYmxlID8gcmVxdWVz
dENvdW50IDogYnl0ZXNBdmFpbGFibGU7Ci0gICAgICAgIG1lbWNweShidWZmZXIsIHN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSArIHBvc2l0aW9uLCBieXRlc1RvUmVhZCk7Ci0gICAg
fQotCi0gICAgaWYgKGFjdHVhbENvdW50KQotICAgICAgICAqYWN0dWFsQ291bnQgPSBieXRlc1Rv
UmVhZDsKLQotICAgIHJldHVybiBub0VycjsKLX0KLQotU0ludDY0IEF1ZGlvRmlsZVJlYWRlcjo6
Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
QXVkaW9GaWxlUmVhZGVyKj4oY2xpZW50RGF0YSktPmRhdGFTaXplKCk7Ci19Ci0KLVJlZlB0cjxB
dWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwgYm9v
bCBtaXhUb01vbm8pCi17Ci0gICAgaWYgKCFtX2V4dEF1ZGlvRmlsZVJlZikKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBHZXQgZmlsZSdzIGRhdGEgZm9ybWF0Ci0gICAgVUludDMy
IHNpemUgPSBzaXplb2YobV9maWxlRGF0YUZvcm1hdCk7Ci0gICAgaWYgKEV4dEF1ZGlvRmlsZUdl
dFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfRmlsZURh
dGFGb3JtYXQsICZzaXplLCAmbV9maWxlRGF0YUZvcm1hdCkgIT0gbm9FcnIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMgPSBtX2ZpbGVEYXRh
Rm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lOwotCi0gICAgLy8gTnVtYmVyIG9mIGZyYW1lcwotICAg
IFNJbnQ2NCBudW1iZXJPZkZyYW1lczY0ID0gMDsKLSAgICBzaXplID0gc2l6ZW9mKG51bWJlck9m
RnJhbWVzNjQpOwotICAgIGlmIChFeHRBdWRpb0ZpbGVHZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmls
ZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVMZW5ndGhGcmFtZXMsICZzaXplLCAmbnVt
YmVyT2ZGcmFtZXM2NCkgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
ZG91YmxlIGZpbGVTYW1wbGVSYXRlID0gbV9maWxlRGF0YUZvcm1hdC5tU2FtcGxlUmF0ZTsKLQot
ICAgIC8vIE1ha2UgY2xpZW50IGZvcm1hdCBzYW1lIG51bWJlciBvZiBjaGFubmVscyBhcyBmaWxl
IGZvcm1hdCwgYnV0IHR3ZWFrIGEgZmV3IHRoaW5ncy4KLSAgICAvLyBDbGllbnQgZm9ybWF0IHdp
bGwgYmUgbGluZWFyIFBDTSAoY2Fub25pY2FsKSwgYW5kIHBvdGVudGlhbGx5IGNoYW5nZSBzYW1w
bGUtcmF0ZS4KLSAgICBtX2NsaWVudERhdGFGb3JtYXQgPSBtX2ZpbGVEYXRhRm9ybWF0OwotCi0g
ICAgY29uc3QgaW50IGJ5dGVzUGVyRmxvYXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgY29uc3Qg
aW50IGJpdHNQZXJCeXRlID0gODsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1hdElEID0g
a0F1ZGlvRm9ybWF0TGluZWFyUENNOwotICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRm9ybWF0Rmxh
Z3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2VkIHwga0F1ZGlvRm9ybWF0Rmxh
Z0lzTm9uSW50ZXJsZWF2ZWQ7Ci0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1CeXRlc1BlclBhY2tl
dCA9IGJ5dGVzUGVyRmxvYXQ7Ci0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1GcmFtZXNQZXJQYWNr
ZXQgPSAxOwotICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJGcmFtZSA9IGJ5dGVzUGVy
RmxvYXQ7Ci0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1DaGFubmVsc1BlckZyYW1lID0gbnVtYmVy
T2ZDaGFubmVsczsKLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUJpdHNQZXJDaGFubmVsID0gYml0
c1BlckJ5dGUgKiBieXRlc1BlckZsb2F0OwotCi0gICAgaWYgKHNhbXBsZVJhdGUpCi0gICAgICAg
IG1fY2xpZW50RGF0YUZvcm1hdC5tU2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7Ci0KLSAgICBpZiAo
RXh0QXVkaW9GaWxlU2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVSZWYsIGtFeHRBdWRpb0ZpbGVQ
cm9wZXJ0eV9DbGllbnREYXRhRm9ybWF0LCBzaXplb2YoQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKSwgJm1fY2xpZW50RGF0YUZvcm1hdCkgIT0gbm9FcnIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgLy8gQ2hhbmdlIG51bWJlck9mRnJhbWVzNjQgdG8gZGVzdGluYXRpb24gc2Ft
cGxlLXJhdGUKLSAgICBudW1iZXJPZkZyYW1lczY0ID0gbnVtYmVyT2ZGcmFtZXM2NCAqIChtX2Ns
aWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgLyBmaWxlU2FtcGxlUmF0ZSk7Ci0gICAgc2l6ZV90
IG51bWJlck9mRnJhbWVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1iZXJPZkZyYW1lczY0KTsK
LQotICAgIHNpemVfdCBidXNDaGFubmVsQ291bnQgPSBtaXhUb01vbm8gPyAxIDogbnVtYmVyT2ZD
aGFubmVsczsKLQotICAgIC8vIENyZWF0ZSBBdWRpb0J1cyB3aGVyZSB3ZSdsbCBwdXQgdGhlIFBD
TSBhdWRpbyBkYXRhCi0gICAgYXV0byBhdWRpb0J1cyA9IEF1ZGlvQnVzOjpjcmVhdGUoYnVzQ2hh
bm5lbENvdW50LCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgYXVkaW9CdXMtPnNldFNhbXBsZVJhdGUo
bV9jbGllbnREYXRhRm9ybWF0Lm1TYW1wbGVSYXRlKTsgLy8gc2F2ZSBmb3IgbGF0ZXIKLQotICAg
IC8vIE9ubHkgYWxsb2NhdGVkIGluIHRoZSBtaXhUb01vbm8gY2FzZTsgZGVhbGxvY2F0ZWQgb24g
ZGVzdHJ1Y3Rpb24uCi0gICAgQXVkaW9GbG9hdEFycmF5IGxlZnRDaGFubmVsOwotICAgIEF1ZGlv
RmxvYXRBcnJheSByaWdodENoYW5uZWw7Ci0KLSAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxp
c3QgPSB0cnlDcmVhdGVBdWRpb0J1ZmZlckxpc3QobnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgaWYg
KCFidWZmZXJMaXN0KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFdlYkF1ZGlvLCAidHJ5
Q3JlYXRlQXVkaW9CdWZmZXJMaXN0KCVsZCkgcmV0dXJuZWQgbnVsbCIsIG51bWJlck9mQ2hhbm5l
bHMpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IGJ1
ZmZlclNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNpemVvZihmbG9hdCk7Ci0KLSAgICBSRUxFQVNF
X0FTU0VSVChidWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVycyA9PSBudW1iZXJPZkNoYW5uZWxzKTsK
LSAgICBpZiAobWl4VG9Nb25vICYmIG51bWJlck9mQ2hhbm5lbHMgPT0gMikgewotICAgICAgICBs
ZWZ0Q2hhbm5lbC5yZXNpemUobnVtYmVyT2ZGcmFtZXMpOwotICAgICAgICByaWdodENoYW5uZWwu
cmVzaXplKG51bWJlck9mRnJhbWVzKTsKLQotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sw
XS5tTnVtYmVyQ2hhbm5lbHMgPSAxOwotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1swXS5t
RGF0YUJ5dGVTaXplID0gYnVmZmVyU2l6ZTsKLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNb
MF0ubURhdGEgPSBsZWZ0Q2hhbm5lbC5kYXRhKCk7Ci0KLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1
ZmZlcnNbMV0ubU51bWJlckNoYW5uZWxzID0gMTsKLSAgICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZl
cnNbMV0ubURhdGFCeXRlU2l6ZSA9IGJ1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckxpc3QtPm1C
dWZmZXJzWzFdLm1EYXRhID0gcmlnaHRDaGFubmVsLmRhdGEoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbWl4VG9Nb25vIHx8IG51bWJlck9mQ2hhbm5lbHMgPT0gMSk7
Ci0KLSAgICAgICAgLy8gRm9yIFRydWUtc3RlcmVvIChudW1iZXJPZkNoYW5uZWxzID09IDQpCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZDaGFubmVsczsgKytpKSB7Ci0g
ICAgICAgICAgICBhdWRpb0J1cy0+Y2hhbm5lbChpKS0+emVybygpOwotICAgICAgICAgICAgYnVm
ZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBidWZmZXJTaXplOwotICAgICAg
ICAgICAgYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBhdWRpb0J1cy0+Y2hhbm5lbChp
KS0+bXV0YWJsZURhdGEoKTsKLSAgICAgICAgICAgIEFTU0VSVChidWZmZXJMaXN0LT5tQnVmZmVy
c1tpXS5tRGF0YSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQXVkaW9C
dWZmZXJMaXN0KGJ1ZmZlckxpc3QpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0ZBVUxUKFdlYkF1
ZGlvLCAiR2VuZXJhdGVkIGJ1ZmZlciBpbiBBdWRpb0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cygpIGRp
ZCBub3QgcGFzcyB2YWxpZGF0aW9uIik7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBkZXN0cm95QXVkaW9CdWZmZXJMaXN0KGJ1ZmZlckxpc3QpOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBSZWFkIGZyb20gdGhlIGZpbGUgKG9yIGluLW1l
bW9yeSB2ZXJzaW9uKQotICAgIFVJbnQzMiBmcmFtZXNUb1JlYWQgPSBudW1iZXJPZkZyYW1lczsK
LSAgICBpZiAoRXh0QXVkaW9GaWxlUmVhZChtX2V4dEF1ZGlvRmlsZVJlZiwgJmZyYW1lc1RvUmVh
ZCwgYnVmZmVyTGlzdCkgIT0gbm9FcnIpIHsKLSAgICAgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlz
dChidWZmZXJMaXN0KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KG1peFRvTW9ubyAmJiBudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKLSAgICAgICAgLy8gTWl4IHN0
ZXJlbyBkb3duIHRvIG1vbm8KLSAgICAgICAgZmxvYXQqIGRlc3RMID0gYXVkaW9CdXMtPmNoYW5u
ZWwoMCktPm11dGFibGVEYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZGcmFtZXM7ICsraSkKLSAgICAgICAgICAgIGRlc3RMW2ldID0gMC41ZiAqIChsZWZ0Q2hh
bm5lbFtpXSArIHJpZ2h0Q2hhbm5lbFtpXSk7Ci0gICAgfQotCi0gICAgZGVzdHJveUF1ZGlvQnVm
ZmVyTGlzdChidWZmZXJMaXN0KTsKLQotICAgIHJldHVybiBhdWRpb0J1czsKLX0KLQotUmVmUHRy
PEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tQXVkaW9GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoLCBi
b29sIG1peFRvTW9ubywgZmxvYXQgc2FtcGxlUmF0ZSkKLXsKLSAgICBBdWRpb0ZpbGVSZWFkZXIg
cmVhZGVyKGZpbGVQYXRoKTsKLSAgICByZXR1cm4gcmVhZGVyLmNyZWF0ZUJ1cyhzYW1wbGVSYXRl
LCBtaXhUb01vbm8pOwotfQotCi1SZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21Jbk1lbW9y
eUF1ZGlvRmlsZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGJvb2wgbWl4VG9N
b25vLCBmbG9hdCBzYW1wbGVSYXRlKQotewotICAgIEF1ZGlvRmlsZVJlYWRlciByZWFkZXIoZGF0
YSwgZGF0YVNpemUpOwotICAgIHJldHVybiByZWFkZXIuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1p
eFRvTW9ubyk7Ci19Ci0KLX0gLy8gV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2lvcy9BdWRpb0ZpbGVSZWFkZXJJT1MuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMTE1MDYxOWRkNmM0NTRkNDY2NzZjMmNmNTE2OGM3NTAzMTZmNTZhYS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9pb3MvQXVkaW9GaWxlUmVhZGVySU9TLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0jaW5jbHVk
ZSA8QXVkaW9Ub29sYm94L0F1ZGlvRmlsZS5oPgotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9FeHRl
bmRlZEF1ZGlvRmlsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBBdWRpb0J1czsKLQotLy8gV3JhcHBlciBjbGFzcyBmb3IgQXVkaW9G
aWxlIGFuZCBFeHRBdWRpb0ZpbGUgQ29yZUF1ZGlvIEFQSXMgZm9yIHJlYWRpbmcgZmlsZXMgYW5k
IGluLW1lbW9yeSB2ZXJzaW9ucyBvZiB0aGVtLi4uCi0KLWNsYXNzIEF1ZGlvRmlsZVJlYWRlciB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQ
YXRoKTsKLSAgICBleHBsaWNpdCBBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90IGRhdGFTaXplKTsKLSAgICB+QXVkaW9GaWxlUmVhZGVyKCk7Ci0KLSAgICBSZWZQdHI8QXVk
aW9CdXM+IGNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubyk7IC8vIFJl
dHVybnMgbnVsbHB0ciBvbiBlcnJvcgotCi0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQotICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVNpemU7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgT1NTdGF0dXMgcmVhZFByb2Modm9p
ZCogY2xpZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lk
KiBidWZmZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpOwotICAgIHN0YXRpYyBTSW50NjQgZ2V0U2l6
ZVByb2Modm9pZCogY2xpZW50RGF0YSk7Ci0KLSAgICBjb25zdCB2b2lkKiBtX2RhdGE7Ci0gICAg
c2l6ZV90IG1fZGF0YVNpemU7Ci0KLSAgICBBdWRpb0ZpbGVJRCBtX2F1ZGlvRmlsZUlEOwotICAg
IEV4dEF1ZGlvRmlsZVJlZiBtX2V4dEF1ZGlvRmlsZVJlZjsKLQotICAgIEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbiBtX2ZpbGVEYXRhRm9ybWF0OwotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNj
cmlwdGlvbiBtX2NsaWVudERhdGFGb3JtYXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRlck1hYy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFhNzg5YTJjYzYyZmViZGMwMWNjMzVhM2Y3ZTU2ODFl
MzdlMTliNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFjLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi0jaW5jbHVkZSAiQXVkaW9GaWxlUmVh
ZGVyTWFjLmgiCi0KLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIkF1ZGlvRmlsZVJl
YWRlci5oIgotI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRlckNvY29hLmgiCi0jaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPENvcmVGb3Vu
ZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNv
bnN0IGNoYXIqIGZpbGVQYXRoKQotICAgIDogbV9kYXRhKG51bGxwdHIpCi0gICAgLCBtX2RhdGFT
aXplKDApCi0gICAgLCBtX2F1ZGlvRmlsZUlEKDApCi0gICAgLCBtX2V4dEF1ZGlvRmlsZVJlZigw
KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmlsZVBhdGhTdHJpbmcgPSBhZG9wdENG
KENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsZVBhdGgs
IGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0g
YWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBmaWxlUGF0aFN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0g
ICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV4dEF1ZGlvRmlsZU9wZW5VUkwo
dXJsLmdldCgpLCAmbV9leHRBdWRpb0ZpbGVSZWYpOwotfQotCi1BdWRpb0ZpbGVSZWFkZXI6OkF1
ZGlvRmlsZVJlYWRlcihjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCi0gICAgOiBt
X2RhdGEoZGF0YSkKLSAgICAsIG1fZGF0YVNpemUoZGF0YVNpemUpCi0gICAgLCBtX2F1ZGlvRmls
ZUlEKDApCi0gICAgLCBtX2V4dEF1ZGlvRmlsZVJlZigwKQotewotICAgIE9TU3RhdHVzIHJlc3Vs
dCA9IEF1ZGlvRmlsZU9wZW5XaXRoQ2FsbGJhY2tzKHRoaXMsIHJlYWRQcm9jLCAwLCBnZXRTaXpl
UHJvYywgMCwgMCwgJm1fYXVkaW9GaWxlSUQpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBub0VycikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0ID0gRXh0QXVkaW9GaWxlV3JhcEF1ZGlvRmls
ZUlEKG1fYXVkaW9GaWxlSUQsIGZhbHNlLCAmbV9leHRBdWRpb0ZpbGVSZWYpOwotICAgIGlmIChy
ZXN1bHQgIT0gbm9FcnIpCi0gICAgICAgIG1fZXh0QXVkaW9GaWxlUmVmID0gMDsKLX0KLQotQXVk
aW9GaWxlUmVhZGVyOjp+QXVkaW9GaWxlUmVhZGVyKCkKLXsKLSAgICBpZiAobV9leHRBdWRpb0Zp
bGVSZWYpCi0gICAgICAgIEV4dEF1ZGlvRmlsZURpc3Bvc2UobV9leHRBdWRpb0ZpbGVSZWYpOwot
Ci0gICAgbV9leHRBdWRpb0ZpbGVSZWYgPSAwOwotCi0gICAgaWYgKG1fYXVkaW9GaWxlSUQpCi0g
ICAgICAgIEF1ZGlvRmlsZUNsb3NlKG1fYXVkaW9GaWxlSUQpOwotICAgICAgICAKLSAgICBtX2F1
ZGlvRmlsZUlEID0gMDsKLX0KLQotT1NTdGF0dXMgQXVkaW9GaWxlUmVhZGVyOjpyZWFkUHJvYyh2
b2lkKiBjbGllbnREYXRhLCBTSW50NjQgcG9zaXRpb24sIFVJbnQzMiByZXF1ZXN0Q291bnQsIHZv
aWQqIGJ1ZmZlciwgVUludDMyKiBhY3R1YWxDb3VudCkKLXsKLSAgICBBdWRpb0ZpbGVSZWFkZXIq
IGF1ZGlvRmlsZVJlYWRlciA9IHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KGNsaWVudERh
dGEpOwotCi0gICAgc2l6ZV90IGRhdGFTaXplID0gYXVkaW9GaWxlUmVhZGVyLT5kYXRhU2l6ZSgp
OwotICAgIGNvbnN0IHZvaWQqIGRhdGEgPSBhdWRpb0ZpbGVSZWFkZXItPmRhdGEoKTsKLSAgICBz
aXplX3QgYnl0ZXNUb1JlYWQgPSAwOwotCi0gICAgaWYgKHN0YXRpY19jYXN0PFVJbnQ2ND4ocG9z
aXRpb24pIDwgZGF0YVNpemUpIHsKLSAgICAgICAgc2l6ZV90IGJ5dGVzQXZhaWxhYmxlID0gZGF0
YVNpemUgLSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBvc2l0aW9uKTsKLSAgICAgICAgYnl0ZXNUb1Jl
YWQgPSByZXF1ZXN0Q291bnQgPD0gYnl0ZXNBdmFpbGFibGUgPyByZXF1ZXN0Q291bnQgOiBieXRl
c0F2YWlsYWJsZTsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc3RhdGljX2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KGRhdGEpICsgcG9zaXRpb24sIGJ5dGVzVG9SZWFkKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgYnl0ZXNUb1JlYWQgPSAwOwotCi0gICAgaWYgKGFjdHVhbENvdW50KQotICAgICAgICAqYWN0
dWFsQ291bnQgPSBieXRlc1RvUmVhZDsKLQotICAgIHJldHVybiBub0VycjsKLX0KLQotU0ludDY0
IEF1ZGlvRmlsZVJlYWRlcjo6Z2V0U2l6ZVByb2Modm9pZCogY2xpZW50RGF0YSkKLXsKLSAgICBB
dWRpb0ZpbGVSZWFkZXIqIGF1ZGlvRmlsZVJlYWRlciA9IHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJl
YWRlcio+KGNsaWVudERhdGEpOwotICAgIHJldHVybiBhdWRpb0ZpbGVSZWFkZXItPmRhdGFTaXpl
KCk7Ci19Ci0KLVJlZlB0cjxBdWRpb0J1cz4gQXVkaW9GaWxlUmVhZGVyOjpjcmVhdGVCdXMoZmxv
YXQgc2FtcGxlUmF0ZSwgYm9vbCBtaXhUb01vbm8pCi17Ci0gICAgaWYgKCFtX2V4dEF1ZGlvRmls
ZVJlZikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBHZXQgZmlsZSdzIGRhdGEg
Zm9ybWF0Ci0gICAgVUludDMyIHNpemUgPSBzaXplb2YobV9maWxlRGF0YUZvcm1hdCk7Ci0gICAg
T1NTdGF0dXMgcmVzdWx0ID0gRXh0QXVkaW9GaWxlR2V0UHJvcGVydHkobV9leHRBdWRpb0ZpbGVS
ZWYsIGtFeHRBdWRpb0ZpbGVQcm9wZXJ0eV9GaWxlRGF0YUZvcm1hdCwgJnNpemUsICZtX2ZpbGVE
YXRhRm9ybWF0KTsKLSAgICBpZiAocmVzdWx0ICE9IG5vRXJyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIE51bWJlciBvZiBjaGFubmVscwotICAgIHNpemVfdCBudW1iZXJPZkNo
YW5uZWxzID0gbV9maWxlRGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZTsKLQotICAgIC8vIE51
bWJlciBvZiBmcmFtZXMKLSAgICBTSW50NjQgbnVtYmVyT2ZGcmFtZXM2NCA9IDA7Ci0gICAgc2l6
ZSA9IHNpemVvZihudW1iZXJPZkZyYW1lczY0KTsKLSAgICByZXN1bHQgPSBFeHRBdWRpb0ZpbGVH
ZXRQcm9wZXJ0eShtX2V4dEF1ZGlvRmlsZVJlZiwga0V4dEF1ZGlvRmlsZVByb3BlcnR5X0ZpbGVM
ZW5ndGhGcmFtZXMsICZzaXplLCAmbnVtYmVyT2ZGcmFtZXM2NCk7Ci0gICAgaWYgKHJlc3VsdCAh
PSBub0VyciB8fCBudW1iZXJPZkZyYW1lczY0IDw9IDApCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gU2FtcGxlLXJhdGUKLSAgICBkb3VibGUgZmlsZVNhbXBsZVJhdGUgPSBtX2Zp
bGVEYXRhRm9ybWF0Lm1TYW1wbGVSYXRlOwotCi0gICAgLy8gTWFrZSBjbGllbnQgZm9ybWF0IHNh
bWUgbnVtYmVyIG9mIGNoYW5uZWxzIGFzIGZpbGUgZm9ybWF0LCBidXQgdHdlYWsgYSBmZXcgdGhp
bmdzLgotICAgIC8vIENsaWVudCBmb3JtYXQgd2lsbCBiZSBsaW5lYXIgUENNIChjYW5vbmljYWwp
LCBhbmQgcG90ZW50aWFsbHkgY2hhbmdlIHNhbXBsZS1yYXRlLgotICAgIG1fY2xpZW50RGF0YUZv
cm1hdCA9IG1fZmlsZURhdGFGb3JtYXQ7Ci0KLSAgICBtX2NsaWVudERhdGFGb3JtYXQubUZvcm1h
dElEID0ga0F1ZGlvRm9ybWF0TGluZWFyUENNOwotICAgIG1fY2xpZW50RGF0YUZvcm1hdC5tRm9y
bWF0RmxhZ3MgPSBrQXVkaW9Gb3JtYXRGbGFnc05hdGl2ZUZsb2F0UGFja2VkOwotICAgIG1fY2xp
ZW50RGF0YUZvcm1hdC5tQml0c1BlckNoYW5uZWwgPSA4ICogc2l6ZW9mKEZsb2F0MzIpOwotICAg
IG1fY2xpZW50RGF0YUZvcm1hdC5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bWJlck9mQ2hhbm5lbHM7
Ci0gICAgbV9jbGllbnREYXRhRm9ybWF0Lm1GcmFtZXNQZXJQYWNrZXQgPSAxOwotICAgIG1fY2xp
ZW50RGF0YUZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQgPSBzaXplb2YoRmxvYXQzMik7Ci0gICAgbV9j
bGllbnREYXRhRm9ybWF0Lm1CeXRlc1BlckZyYW1lID0gc2l6ZW9mKEZsb2F0MzIpOwotICAgIG1f
Y2xpZW50RGF0YUZvcm1hdC5tRm9ybWF0RmxhZ3MgfD0ga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50
ZXJsZWF2ZWQ7Ci0KLSAgICBpZiAoc2FtcGxlUmF0ZSkKLSAgICAgICAgbV9jbGllbnREYXRhRm9y
bWF0Lm1TYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKLQotICAgIHJlc3VsdCA9IEV4dEF1ZGlvRmls
ZVNldFByb3BlcnR5KG1fZXh0QXVkaW9GaWxlUmVmLCBrRXh0QXVkaW9GaWxlUHJvcGVydHlfQ2xp
ZW50RGF0YUZvcm1hdCwgc2l6ZW9mKEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiksICZtX2Ns
aWVudERhdGFGb3JtYXQpOwotICAgIGlmIChyZXN1bHQgIT0gbm9FcnIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgLy8gQ2hhbmdlIG51bWJlck9mRnJhbWVzNjQgdG8gZGVzdGluYXRp
b24gc2FtcGxlLXJhdGUKLSAgICBudW1iZXJPZkZyYW1lczY0ID0gbnVtYmVyT2ZGcmFtZXM2NCAq
IChtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJhdGUgLyBmaWxlU2FtcGxlUmF0ZSk7Ci0gICAg
c2l6ZV90IG51bWJlck9mRnJhbWVzID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1iZXJPZkZyYW1l
czY0KTsKLQotICAgIHNpemVfdCBidXNDaGFubmVsQ291bnQgPSBtaXhUb01vbm8gPyAxIDogbnVt
YmVyT2ZDaGFubmVsczsKLQotICAgIC8vIENyZWF0ZSBBdWRpb0J1cyB3aGVyZSB3ZSdsbCBwdXQg
dGhlIFBDTSBhdWRpbyBkYXRhCi0gICAgYXV0byBhdWRpb0J1cyA9IEF1ZGlvQnVzOjpjcmVhdGUo
YnVzQ2hhbm5lbENvdW50LCBudW1iZXJPZkZyYW1lcyk7Ci0gICAgYXVkaW9CdXMtPnNldFNhbXBs
ZVJhdGUobmFycm93UHJlY2lzaW9uVG9GbG9hdChtX2NsaWVudERhdGFGb3JtYXQubVNhbXBsZVJh
dGUpKTsgLy8gc2F2ZSBmb3IgbGF0ZXIKLQotICAgIC8vIE9ubHkgYWxsb2NhdGVkIGluIHRoZSBt
aXhUb01vbm8gY2FzZQotICAgIEF1ZGlvRmxvYXRBcnJheSBidWZMOwotICAgIEF1ZGlvRmxvYXRB
cnJheSBidWZSOwotICAgIGZsb2F0KiBidWZmZXJMID0gMDsKLSAgICBmbG9hdCogYnVmZmVyUiA9
IDA7Ci0gICAgCi0gICAgLy8gU2V0dXAgQXVkaW9CdWZmZXJMaXN0IGluIHByZXBhcmF0aW9uIGZv
ciByZWFkaW5nCi0gICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gdHJ5Q3JlYXRlQXVk
aW9CdWZmZXJMaXN0KG51bWJlck9mQ2hhbm5lbHMpOwotICAgIGlmICghYnVmZmVyTGlzdCkgewot
ICAgICAgICBSRUxFQVNFX0xPR19GQVVMVChXZWJBdWRpbywgInRyeUNyZWF0ZUF1ZGlvQnVmZmVy
TGlzdCglbGQpIHJldHVybmVkIG51bGwiLCBudW1iZXJPZkNoYW5uZWxzKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlQoYnVmZmVyTGlzdC0+bU51
bWJlckJ1ZmZlcnMgPT0gbnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgaWYgKG1peFRvTW9ubyAmJiBu
dW1iZXJPZkNoYW5uZWxzID09IDIpIHsKLSAgICAgICAgYnVmTC5yZXNpemUobnVtYmVyT2ZGcmFt
ZXMpOwotICAgICAgICBidWZSLnJlc2l6ZShudW1iZXJPZkZyYW1lcyk7Ci0gICAgICAgIGJ1ZmZl
ckwgPSBidWZMLmRhdGEoKTsKLSAgICAgICAgYnVmZmVyUiA9IGJ1ZlIuZGF0YSgpOwotCi0gICAg
ICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1OdW1iZXJDaGFubmVscyA9IDE7Ci0gICAgICAg
IGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhQnl0ZVNpemUgPSBudW1iZXJPZkZyYW1lcyAq
IHNpemVvZihmbG9hdCk7Ci0gICAgICAgIGJ1ZmZlckxpc3QtPm1CdWZmZXJzWzBdLm1EYXRhID0g
YnVmZmVyTDsKLQotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tTnVtYmVyQ2hhbm5l
bHMgPSAxOwotICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1sxXS5tRGF0YUJ5dGVTaXplID0g
bnVtYmVyT2ZGcmFtZXMgKiBzaXplb2YoZmxvYXQpOwotICAgICAgICBidWZmZXJMaXN0LT5tQnVm
ZmVyc1sxXS5tRGF0YSA9IGJ1ZmZlclI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1peFRvTW9ubyB8fCBudW1iZXJPZkNoYW5uZWxzID09IDEpOwotCi0gICAgICAgIC8v
IGZvciBUcnVlLXN0ZXJlbyAobnVtYmVyT2ZDaGFubmVscyA9PSA0KQotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bWJlck9mQ2hhbm5lbHM7ICsraSkgewotICAgICAgICAgICAgYnVm
ZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gMTsKLSAgICAgICAgICAgIGJ1
ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBudW1iZXJPZkZyYW1lcyAqIHNp
emVvZihmbG9hdCk7Ci0gICAgICAgICAgICBidWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSA9
IGF1ZGlvQnVzLT5jaGFubmVsKGkpLT5tdXRhYmxlRGF0YSgpOwotICAgICAgICAgICAgQVNTRVJU
KGJ1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghdmFsaWRhdGVBdWRpb0J1ZmZlckxpc3QoYnVmZmVyTGlzdCkpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0dfRkFVTFQoV2ViQXVkaW8sICJHZW5lcmF0ZWQgYnVmZmVyIGluIEF1ZGlvRmlsZVJl
YWRlcjo6Y3JlYXRlQnVzKCkgZGlkIG5vdCBwYXNzIHZhbGlkYXRpb24iKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3QoYnVmZmVy
TGlzdCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIC8vIFJlYWQgZnJv
bSB0aGUgZmlsZSAob3IgaW4tbWVtb3J5IHZlcnNpb24pCi0gICAgVUludDMyIGZyYW1lc1RvUmVh
ZCA9IG51bWJlck9mRnJhbWVzOwotICAgIHJlc3VsdCA9IEV4dEF1ZGlvRmlsZVJlYWQobV9leHRB
dWRpb0ZpbGVSZWYsICZmcmFtZXNUb1JlYWQsIGJ1ZmZlckxpc3QpOwotICAgIGlmIChyZXN1bHQg
IT0gbm9FcnIpIHsKLSAgICAgICAgZGVzdHJveUF1ZGlvQnVmZmVyTGlzdChidWZmZXJMaXN0KTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1peFRvTW9ubyAmJiBu
dW1iZXJPZkNoYW5uZWxzID09IDIpIHsKLSAgICAgICAgLy8gTWl4IHN0ZXJlbyBkb3duIHRvIG1v
bm8KLSAgICAgICAgZmxvYXQqIGRlc3RMID0gYXVkaW9CdXMtPmNoYW5uZWwoMCktPm11dGFibGVE
YXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZGcmFtZXM7IGkr
KykKLSAgICAgICAgICAgIGRlc3RMW2ldID0gMC41ZiAqIChidWZmZXJMW2ldICsgYnVmZmVyUltp
XSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYW51cAotICAgIGRlc3Ryb3lBdWRpb0J1ZmZlckxpc3Qo
YnVmZmVyTGlzdCk7Ci0KLSAgICByZXR1cm4gYXVkaW9CdXM7Ci19Ci0KLVJlZlB0cjxBdWRpb0J1
cz4gY3JlYXRlQnVzRnJvbUF1ZGlvRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCwgYm9vbCBtaXhU
b01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0gICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihm
aWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7Ci19Ci0KLVJlZlB0cjxB
dWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEs
IHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNhbXBsZVJhdGUpCi17Ci0g
ICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRhU2l6ZSkuY3JlYXRlQnVzKHNhbXBs
ZVJhdGUsIG1peFRvTW9ubyk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIFBMQVRGT1JNKE1BQykKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9GaWxlUmVhZGVyTWFj
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ODViZDVhZTg4ZjdlYmY5MTA5MGRi
YTc5NDJjYWEwOTc5MDc4MmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvRmlsZVJlYWRl
ck1hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBdWRpb0ZpbGVSZWFkZXJNYWNf
aAotI2RlZmluZSBBdWRpb0ZpbGVSZWFkZXJNYWNfaAotCi0jaW5jbHVkZSA8QXVkaW9Ub29sYm94
L0F1ZGlvRmlsZS5oPgotI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9FeHRlbmRlZEF1ZGlvRmlsZS5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBBdWRpb0J1czsKLSAgICAKLS8vIFdyYXBwZXIgY2xhc3MgZm9yIEF1ZGlvRmlsZSBhbmQgRXh0
QXVkaW9GaWxlIENvcmVBdWRpbyBBUElzIGZvciByZWFkaW5nIGZpbGVzIGFuZCBpbi1tZW1vcnkg
dmVyc2lvbnMgb2YgdGhlbS4uLgotCi1jbGFzcyBBdWRpb0ZpbGVSZWFkZXIgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IEF1ZGlvRmlsZVJlYWRlcihjb25zdCBjaGFyKiBmaWxlUGF0aCk7Ci0gICAg
ZXhwbGljaXQgQXVkaW9GaWxlUmVhZGVyKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6
ZSk7Ci0gICAgfkF1ZGlvRmlsZVJlYWRlcigpOwotCi0gICAgLy8gUmV0dXJucyBudWxscHRyIGlm
IGVycm9yCi0gICAgUmVmUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXMoZmxvYXQgc2FtcGxlUmF0ZSwg
Ym9vbCBtaXhUb01vbm8pOwotCi0gICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQotICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNp
emU7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgT1NTdGF0dXMgcmVhZFByb2Modm9pZCogY2xp
ZW50RGF0YSwgU0ludDY0IHBvc2l0aW9uLCBVSW50MzIgcmVxdWVzdENvdW50LCB2b2lkKiBidWZm
ZXIsIFVJbnQzMiogYWN0dWFsQ291bnQpOwotICAgIHN0YXRpYyBTSW50NjQgZ2V0U2l6ZVByb2Mo
dm9pZCogY2xpZW50RGF0YSk7Ci0KLSAgICBjb25zdCB2b2lkKiBtX2RhdGE7Ci0gICAgc2l6ZV90
IG1fZGF0YVNpemU7Ci0KLSAgICBBdWRpb0ZpbGVJRCBtX2F1ZGlvRmlsZUlEOwotICAgIEV4dEF1
ZGlvRmlsZVJlZiBtX2V4dEF1ZGlvRmlsZVJlZjsKLQotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNj
cmlwdGlvbiBtX2ZpbGVEYXRhRm9ybWF0OwotICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biBtX2NsaWVudERhdGFGb3JtYXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0gCi0j
ZW5kaWYgLy8gQXVkaW9GaWxlUmVhZGVyTWFjX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>