<?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>216565</bug_id>
          
          <creation_ts>2020-09-15 09:44:48 -0700</creation_ts>
          <short_desc>Move SerializationState from ImageBuffer to ImageBitmap</short_desc>
          <delta_ts>2020-09-25 18:42:14 -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>Canvas</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>
          <dependson>211484</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kbr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1688726</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-15 09:44:48 -0700</bug_when>
    <thetext>This structure belongs to ImageBitmap. It describes how the ImageBitmap can deal with its ImageBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688741</commentid>
    <comment_count>1</comment_count>
      <attachid>408828</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-15 10:13:38 -0700</bug_when>
    <thetext>Created attachment 408828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688751</commentid>
    <comment_count>2</comment_count>
      <attachid>408833</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-15 10:52:16 -0700</bug_when>
    <thetext>Created attachment 408833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689255</commentid>
    <comment_count>3</comment_count>
      <attachid>408961</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-16 16:38:52 -0700</bug_when>
    <thetext>Created attachment 408961
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689283</commentid>
    <comment_count>4</comment_count>
      <attachid>408969</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-16 17:39:54 -0700</bug_when>
    <thetext>Created attachment 408969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689294</commentid>
    <comment_count>5</comment_count>
      <attachid>408975</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-16 18:23:06 -0700</bug_when>
    <thetext>Created attachment 408975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689692</commentid>
    <comment_count>6</comment_count>
      <attachid>408975</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-09-17 18:59:04 -0700</bug_when>
    <thetext>Comment on attachment 408975
Patch

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

There are several nice aspects to this patch - the use of the OptionSet is a good cleanup. A few thoughts - happy to r+ this if you prefer things in the form presented here.

&gt; Source/WebCore/html/ImageBitmap.cpp:839
&gt;      m_bitmapData = nullptr;

It seems undesirable to me to reach up into the superclass&apos;s implementation for this operation. It will probably make it harder to add any GPU acceleration for ImageBitmap later, when the ImageBitmap&apos;s backing store is a texture rather than CPU-side bytes.

&gt; Source/WebCore/html/SerializableImageBuffer.h:34
&gt; +class SerializableImageBuffer {

This name is confusing to me because this class isn&apos;t an ImageBuffer. Perhaps call it something like &quot;ImageBufferSerializationHelper&quot;? (Also not a great name.)

Pulling so much of the ImageBitmap&apos;s functionality into a superclass, and using it for two purposes - constructing ImageBitmaps themselves, and as the data which is serialized/deserialized - makes the code harder to think about in my opinion. I recommend composition over inheritance.

&gt; Source/WebCore/html/SerializableImageBuffer.h:61
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; m_bitmapData;

The fact that this data member is protected rather than private makes it more complicated to reason about correct states of this class and its subclass, ImageBitmap. I think it would be better to make it private and access it via accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690128</commentid>
    <comment_count>7</comment_count>
      <attachid>408975</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-09-19 17:39:53 -0700</bug_when>
    <thetext>Comment on attachment 408975
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        std::pair&lt;std::unique_ptr&lt;ImageBuffer&gt;, OptionSet&lt;SerializationState&gt;&gt;
&gt; +        can be replaced by a new class named SerializableImageBuffer. This class
&gt; +        will also be a superclass of ImageBitmap. All the operations on ImageBuffer

What benefit is there in making it the superclass? Could it just be a member of ImageBitmap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690200</commentid>
    <comment_count>8</comment_count>
      <attachid>409241</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-20 12:49:45 -0700</bug_when>
    <thetext>Created attachment 409241
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690209</commentid>
    <comment_count>9</comment_count>
      <attachid>409245</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-20 13:12:59 -0700</bug_when>
    <thetext>Created attachment 409245
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690247</commentid>
    <comment_count>10</comment_count>
      <attachid>409258</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-20 21:14:47 -0700</bug_when>
    <thetext>Created attachment 409258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690340</commentid>
    <comment_count>11</comment_count>
      <attachid>408975</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-21 10:20:54 -0700</bug_when>
    <thetext>Comment on attachment 408975
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt; +        will also be a superclass of ImageBitmap. All the operations on ImageBuffer
&gt; 
&gt; What benefit is there in making it the superclass? Could it just be a member of ImageBitmap?

I added a new class named ImageBitmapSource and I made it a member of ImageBitmap.

&gt;&gt; Source/WebCore/html/ImageBitmap.cpp:839
&gt;&gt;      m_bitmapData = nullptr;
&gt; 
&gt; It seems undesirable to me to reach up into the superclass&apos;s implementation for this operation. It will probably make it harder to add any GPU acceleration for ImageBitmap later, when the ImageBitmap&apos;s backing store is a texture rather than CPU-side bytes.

I added a new class named ImageBitmapSource and I made it a member of ImageBitmap. In the future it can be made an abstract class and inherited by ImageBitmapBufferSource and ImageBitmapTextureSource.

&gt;&gt; Source/WebCore/html/SerializableImageBuffer.h:34
&gt;&gt; +class SerializableImageBuffer {
&gt; 
&gt; This name is confusing to me because this class isn&apos;t an ImageBuffer. Perhaps call it something like &quot;ImageBufferSerializationHelper&quot;? (Also not a great name.)
&gt; 
&gt; Pulling so much of the ImageBitmap&apos;s functionality into a superclass, and using it for two purposes - constructing ImageBitmaps themselves, and as the data which is serialized/deserialized - makes the code harder to think about in my opinion. I recommend composition over inheritance.

I named it ImageBitmapSource to make it more generic name so it can be extended for non CPU buffer back end.

&gt;&gt; Source/WebCore/html/SerializableImageBuffer.h:61
&gt;&gt; +    std::unique_ptr&lt;ImageBuffer&gt; m_bitmapData;
&gt; 
&gt; The fact that this data member is protected rather than private makes it more complicated to reason about correct states of this class and its subclass, ImageBitmap. I think it would be better to make it private and access it via accessors.

Done since this class is now a member of ImageBitmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690743</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-22 09:45:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/69375838&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691202</commentid>
    <comment_count>13</comment_count>
      <attachid>409258</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-09-23 11:53:33 -0700</bug_when>
    <thetext>Comment on attachment 409258
Patch

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

Looks good to me. A few minor comments. Please fix the style issues before landing. r+

&gt; Source/WebCore/Headers.cmake:644
&gt; +    html/ImageBitmapSource.h

Per below: since this is the backing store per the ChangeLog comment, I think ImageBitmapBacking would be a better name.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1046
&gt; +        write(static_cast&lt;uint8_t&gt;(imageBitmap.serializationState().toRaw()));

Should this file #include ImageBitmapSource.h? It looks like it&apos;s getting it implicitly through the unified build.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:54
&gt;  class ImageBitmap;

Is the ImageBitmap forward declaration needed?

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:56
&gt; +class ImageBitmapSource;

This header #includes ImageBuffer.h. Should that be removed now?

&gt; Source/WebCore/html/ImageBitmap.h:29
&gt; +#include &quot;ImageBitmapSource.h&quot;

Per below: I think &quot;ImageBitmapBacking&quot; would be a more descriptive name.

&gt; Source/WebCore/html/ImageBitmap.h:91
&gt; +    std::unique_ptr&lt;ImageBuffer&gt; takeImageBuffer();

Maybe worth a comment that this has the implicit side-effect of detaching the backing store, and that it returns nullptr if the ImageBitmap&apos;s already detached.

&gt; Source/WebCore/html/ImageBitmap.h:101
&gt; +    Optional&lt;ImageBitmapSource&gt; takeImageBitmapSource();

Suggest &quot;takeImageBitmapBacking&quot; as the name.

&gt; Source/WebCore/html/ImageBitmap.h:130
&gt; +    Optional&lt;ImageBitmapSource&gt; m_imageSource;

I think m_backing or m_backingStore would be a better choice of name.

&gt; Source/WebCore/html/ImageBitmapSource.cpp:31
&gt; +ImageBitmapSource::ImageBitmapSource(std::unique_ptr&lt;ImageBuffer&gt;&amp;&amp; bitmapData, OptionSet&lt;SerializationState&gt; serializationState)

See below regarding naming.

&gt; Source/WebCore/html/ImageBitmapSource.h:39
&gt; +class ImageBitmapSource {

Per the ChangeLog comment, since this is now acting as the ImageBitmap&apos;s backing store, I think &quot;ImageBitmapBacking&quot; would be a better name.

&gt; Source/WebCore/html/ImageBitmapSource.h:41
&gt; +    ImageBitmapSource() = default;

This constructor leaves m_serializationState thinking it&apos;s not origin-clean. Is that what was intended?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692053</commentid>
    <comment_count>14</comment_count>
      <attachid>409745</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-25 15:06:51 -0700</bug_when>
    <thetext>Created attachment 409745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692072</commentid>
    <comment_count>15</comment_count>
      <attachid>409752</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-09-25 15:53:40 -0700</bug_when>
    <thetext>Created attachment 409752
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692137</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-25 18:42:13 -0700</bug_when>
    <thetext>Committed r267615: &lt;https://trac.webkit.org/changeset/267615&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409752.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408828</attachid>
            <date>2020-09-15 10:13:38 -0700</date>
            <delta_ts>2020-09-15 10:52:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200915101337.patch</filename>
            <type>text/plain</type>
            <size>29753</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgyZDcxNDI4Y2YwMjkx
M2ZlNjAwNDgyNzM5OTNjN2MyYmY3OGQ2NS4uYzg0ZGQzMGRjYTUxYTkzMjA4ZjdkZGRmNDc5Yzgz
OWQ3ZWVlMjY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIwLTA5LTE1ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgbW92aW5nIFNl
cmlhbGl6YXRpb25TdGF0ZSB0byBJbWFnZUJpdG1hcCwgbWFraW5nIGl0IGFuIGVudW0gYW5kCisg
ICAgICAgIG1ha2luZyBJbWFnZUJ1ZmZlciBzdG9yZXMgYW4gT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4sIEkgcmVhbGl6ZWQKKyAgICAgICAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZGV0YWNo
aW5nIGFuZCByZWF0dGFjaGluZyB0aGUgSW1hZ2VCdWZmZXIgZnJvbSBhbmQKKyAgICAgICAgdG8g
dGhlIEltYWdlQml0bWFwLiBXZSBjYW4gc3RvcmUgUmVmUHRyPEltYWdlQml0bWFwPiBpbnN0ZWFk
IG9mIHN0b3JpbmcKKyAgICAgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4sIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+PgorICAgICAgICBzaW5jZSB0aGlzIGlz
IHdoYXQgSW1hZ2VCaXRtYXAgYWN0dWFsbHkgc3RvcmVzLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXpl
cjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
RGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21wdXRlTWVtb3J5Q29zdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnJlc29sdmVXaXRoQmxhbmtJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpoZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjp0cmFuc2Zlck93bmVyc2hpcEFuZENs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmg6CisgICAgICAgICogaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFu
c2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorCiAyMDIwLTA5LTE0ICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVHlwZSBvZiBBbmFseXNlck5vZGUncyBhdHRy
aWJ1dGVzIHNob3VsZCBub3QgYmUgdW5yZXN0cmljdGVkIGRvdWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNmVm
NWExMzBmY2U1YThkNjMzOTgzZTc1ZGViNmJjYzg4ODRmMGU4MS4uOWZmMjJkZDcxZmU4ZmFiMzY3
Nzc1MTMxNTE5NWE4YWE3OWJmZTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xMDQzLDkgKzEwNDMsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgd3JpdGUoSW1hZ2VCaXRtYXBUYWcpOwotICAg
ICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5vcmlnaW5DbGVhbigp
KSk7Ci0gICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGltYWdlQml0bWFwLnByZW11
bHRpcGx5QWxwaGEoKSkpOwotICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFn
ZUJpdG1hcC5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSkpOworICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5zZXJpYWxpemF0aW9uU3RhdGUoKS50b1Jhdygp
KSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLndpZHRo
KCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8aW50MzJfdD4obG9naWNhbFNpemUuaGVp
Z2h0KCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8ZG91YmxlPihidWZmZXItPnJlc29s
dXRpb25TY2FsZSgpKSk7CkBAIC0xOTMxLDcgKzE5MjksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBzdHI7CiAgICAgfQogCi0gICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNl
cmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNz
YWdlUG9ydHMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwg
SW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAgc3Rh
dGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SW1h
Z2VCaXRtYXA+PiYmIGltYWdlQml0bWFwcwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
ICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+
PiYmIGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMTk0Myw3ICsxOTQxLDcg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKCFidWZmZXIuc2l6ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGpzTnVsbCgpLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZTo6VW5zcGVjaWZpZWRFcnJvcik7Ci0gICAgICAgIENsb25lRGVzZXJpYWxpemVyIGRlc2VyaWFs
aXplcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgYXJy
YXlCdWZmZXJDb250ZW50c0FycmF5LCBidWZmZXIsIGJsb2JVUkxzLCBibG9iRmlsZVBhdGhzLCBz
aGFyZWRCdWZmZXJzLCBXVEZNb3ZlKGltYWdlQnVmZmVycykKKyAgICAgICAgQ2xvbmVEZXNlcmlh
bGl6ZXIgZGVzZXJpYWxpemVyKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVz
c2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJs
b2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1hZ2VCaXRtYXBzKQogI2lmIEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAgICAgLCBXVEZNb3ZlKGRldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzZXMpCiAjZW5kaWYKQEAgLTE5OTYsNyArMTk5NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgIH07CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMs
IEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVm
ZmVyCisgICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFy
cmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGltYWdlQml0
bWFwcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIKICNpZiBFTkFCTEUoT0ZGU0NSRUVO
X0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2Ny
ZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzID0geyB9CiAjZW5kaWYKQEAg
LTIwMTQsOCArMjAxMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9tZXNzYWdlUG9ydHMobWVz
c2FnZVBvcnRzKQogICAgICAgICAsIG1fYXJyYXlCdWZmZXJDb250ZW50cyhhcnJheUJ1ZmZlckNv
bnRlbnRzKQogICAgICAgICAsIG1fYXJyYXlCdWZmZXJzKGFycmF5QnVmZmVyQ29udGVudHMgPyBh
cnJheUJ1ZmZlckNvbnRlbnRzLT5zaXplKCkgOiAwKQotICAgICAgICAsIG1faW1hZ2VCdWZmZXJz
KFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKLSAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdl
QnVmZmVycy5zaXplKCkpCisgICAgICAgICwgbV9pbWFnZUJpdG1hcHMoV1RGTW92ZShpbWFnZUJp
dG1hcHMpKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAsIG1fZGV0YWNo
ZWRPZmZzY3JlZW5DYW52YXNlcyhXVEZNb3ZlKGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpKQog
ICAgICAgICAsIG1fb2Zmc2NyZWVuQ2FudmFzZXMobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
LnNpemUoKSkKQEAgLTIwMjgsNyArMjAyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3Zl
cnNpb24gPSAweEZGRkZGRkZGOwogICAgIH0KIAotICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAg
Q2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBv
cnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVy
Q29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMsIEFycmF5
QnVmZmVyQ29udGVudHNBcnJheSogc2hhcmVkQnVmZmVycywgVmVjdG9yPFJlZlB0cjxJbWFnZUJp
dG1hcD4+JiYgaW1hZ2VCaXRtYXBzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAg
ICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYg
ZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0yMDQ5LDggKzIwNDYsNyBAQCBw
cml2YXRlOgogICAgICAgICAsIG1fYmxvYlVSTHMoYmxvYlVSTHMpCiAgICAgICAgICwgbV9ibG9i
RmlsZVBhdGhzKGJsb2JGaWxlUGF0aHMpCiAgICAgICAgICwgbV9zaGFyZWRCdWZmZXJzKHNoYXJl
ZEJ1ZmZlcnMpCi0gICAgICAgICwgbV9pbWFnZUJ1ZmZlcnMoV1RGTW92ZShpbWFnZUJ1ZmZlcnMp
KQotICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKG1faW1hZ2VCdWZmZXJzLnNpemUoKSkKKyAgICAg
ICAgLCBtX2ltYWdlQml0bWFwcyhXVEZNb3ZlKGltYWdlQml0bWFwcykpCiAjaWYgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKFdU
Rk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykpCiAgICAgICAgICwgbV9vZmZzY3JlZW5D
YW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMuc2l6ZSgpKQpAQCAtMjg4MywxNCAr
Mjg3OSwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgdWludDMyX3QgaW5kZXg7CiAgICAg
ICAgIGJvb2wgaW5kZXhTdWNjZXNzZnVsbHlSZWFkID0gcmVhZChpbmRleCk7Ci0gICAgICAgIGlm
ICghaW5kZXhTdWNjZXNzZnVsbHlSZWFkIHx8IGluZGV4ID49IG1faW1hZ2VCdWZmZXJzLnNpemUo
KSkgeworICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBpbmRleCA+PSBtX2lt
YWdlQml0bWFwcy5zaXplKCkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1faW1hZ2VCaXRtYXBz
W2luZGV4XSkKLSAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFw
OjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVmZmVycy5hdChpbmRleCkpKTsKLQogICAgICAgICBh
dXRvIGJpdG1hcCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJu
IGdldEpTVmFsdWUoYml0bWFwKTsKICAgICB9CkBAIC0yOTYyLDE1ICsyOTU1LDEzIEBAIHByaXZh
dGU6CiAKICAgICBKU1ZhbHVlIHJlYWRJbWFnZUJpdG1hcCgpCiAgICAgewotICAgICAgICB1aW50
OF90IG9yaWdpbkNsZWFuOwotICAgICAgICB1aW50OF90IHByZW11bHRpcGx5QWxwaGE7Ci0gICAg
ICAgIHVpbnQ4X3QgZm9yY2libHlQcmVtdWx0aXBseUFscGhhOworICAgICAgICB1aW50OF90IHNl
cmlhbGl6YXRpb25TdGF0ZTsKICAgICAgICAgaW50MzJfdCBsb2dpY2FsV2lkdGg7CiAgICAgICAg
IGludDMyX3QgbG9naWNhbEhlaWdodDsKICAgICAgICAgZG91YmxlIHJlc29sdXRpb25TY2FsZTsK
ICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlcjsKIAotICAgICAgICBpZiAo
IXJlYWQob3JpZ2luQ2xlYW4pIHx8ICFyZWFkKHByZW11bHRpcGx5QWxwaGEpIHx8ICFyZWFkKGZv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQobG9naWNhbFdpZHRoKSB8fCAhcmVhZChs
b2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUpIHx8ICFyZWFkQXJyYXlCdWZm
ZXIoYXJyYXlCdWZmZXIpKSB7CisgICAgICAgIGlmICghcmVhZChzZXJpYWxpemF0aW9uU3RhdGUp
IHx8ICFyZWFkKGxvZ2ljYWxXaWR0aCkgfHwgIXJlYWQobG9naWNhbEhlaWdodCkgfHwgIXJlYWQo
cmVzb2x1dGlvblNjYWxlKSB8fCAhcmVhZEFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSkgewogICAg
ICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAg
fQpAQCAtMjk5OSw3ICsyOTkwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBidWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRh
LCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogCi0gICAgICAgIGF1dG8gYml0
bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgSW1hZ2VCdWZmZXI6
OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFuKSwgc3Rh
dGljX2Nhc3Q8Ym9vbD4ocHJlbXVsdGlwbHlBbHBoYSksIHN0YXRpY19jYXN0PGJvb2w+KGZvcmNp
Ymx5UHJlbXVsdGlwbHlBbHBoYSkgfX0pOworICAgICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0
bWFwOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCBPcHRpb25TZXQ8SW1hZ2VCaXRtYXA6OlNlcmlh
bGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2VyaWFsaXphdGlvblN0YXRlKSk7CiAgICAgICAgIHJl
dHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CiAgICAgfQogCkBAIC0zNDM0LDcgKzM0MjUsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9ibG9iRmlsZVBhdGhzOwogICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9zaGFy
ZWRCdWZmZXJzOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IG1faW1hZ2VCdWZmZXJzOwog
ICAgIFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBtX2ltYWdlQml0bWFwczsKICNpZiBFTkFC
TEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVk
T2Zmc2NyZWVuQ2FudmFzPj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwpAQCAtMzY1OCw3
ICszNjQ4LDcgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUo
VmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBzdGQ6OnVuaXEKICAgICBtX21lbW9yeUNvc3QgPSBj
b21wdXRlTWVtb3J5Q29zdCgpOwogfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4g
YXJyYXlCdWZmZXJDb250ZW50c0FycmF5LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250
ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5LCBWZWN0b3I8c3RkOjpwYWlyPHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3Rh
dGU+PiYmIGltYWdlQnVmZmVycworU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5
QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNB
cnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1h
cD4+JiYgaW1hZ2VCaXRtYXBzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAg
ICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0zNjY5LDcgKzM2NTksNyBAQCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dWludDhfdD4m
JiBidWZmZXIsIGNvbnN0IFZlYwogICAgIDogbV9kYXRhKFdURk1vdmUoYnVmZmVyKSkKICAgICAs
IG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KFdURk1vdmUoYXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5KSkKICAgICAsIG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheShXVEZNb3ZlKHNoYXJlZEJ1
ZmZlckNvbnRlbnRzQXJyYXkpKQotICAgICwgbV9pbWFnZUJ1ZmZlcnMoV1RGTW92ZShpbWFnZUJ1
ZmZlcnMpKQorICAgICwgbV9pbWFnZUJpdG1hcHMoV1RGTW92ZShpbWFnZUJpdG1hcHMpKQogI2lm
IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICwgbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZh
c2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykpCiAjZW5kaWYKQEAgLTM2OTks
OSArMzY4OSw5IEBAIHNpemVfdCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNvbXB1dGVNZW1vcnlD
b3N0KCkgY29uc3QKICAgICAgICAgICAgIGNvc3QgKz0gY29udGVudC5zaXplSW5CeXRlcygpOwog
ICAgIH0KIAotICAgIGZvciAoYXV0byYgcGFpciA6IG1faW1hZ2VCdWZmZXJzKSB7Ci0gICAgICAg
IGlmIChwYWlyLmZpcnN0KQotICAgICAgICAgICAgY29zdCArPSBwYWlyLmZpcnN0LT5tZW1vcnlD
b3N0KCk7CisgICAgZm9yIChhdXRvJiBiaXRtYXAgOiBtX2ltYWdlQml0bWFwcykgeworICAgICAg
ICBpZiAoYml0bWFwLT5idWZmZXIoKSkKKyAgICAgICAgICAgIGNvc3QgKz0gYml0bWFwLT5idWZm
ZXIoKS0+bWVtb3J5Q29zdCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFT
KQpAQCAtMzkyNSwxNSArMzkxNSwxMyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNHbG9iYWxPYgogICAgIGlm
IChhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFzZUV4Y2VwdGlvbigpOwogCi0gICAgYXV0
byBpbWFnZUJ1ZmZlcnMgPSBJbWFnZUJpdG1hcDo6ZGV0YWNoQml0bWFwcyhXVEZNb3ZlKGltYWdl
Qml0bWFwcykpOwotCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IGRldGFjaGVkQ2FudmFzZXM7
CiAgICAgZm9yIChhdXRvIG9mZnNjcmVlbkNhbnZhcyA6IG9mZnNjcmVlbkNhbnZhc2VzKQogICAg
ICAgICBkZXRhY2hlZENhbnZhc2VzLmFwcGVuZChvZmZzY3JlZW5DYW52YXMtPmRldGFjaCgpKTsK
ICNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KFdURk1vdmUoYnVmZmVyKSwgYmxvYlVSTHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSwgY29udGV4dCA9PSBTZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2Vy
UG9zdE1lc3NhZ2UgPyBXVEZNb3ZlKHNoYXJlZEJ1ZmZlcnMpIDogbnVsbHB0ciwgV1RGTW92ZShp
bWFnZUJ1ZmZlcnMpCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKFdURk1vdmUoYnVmZmVyKSwgYmxvYlVSTHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSwgY29udGV4dCA9PSBTZXJpYWxpemF0aW9uQ29udGV4dDo6V29y
a2VyUG9zdE1lc3NhZ2UgPyBXVEZNb3ZlKHNoYXJlZEJ1ZmZlcnMpIDogbnVsbHB0ciwgV1RGTW92
ZShpbWFnZUJpdG1hcHMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICAg
ICAgICAgLCBXVEZNb3ZlKGRldGFjaGVkQ2FudmFzZXMpCiAjZW5kaWYKQEAgLTM5ODksNyArMzk3
Nyw3IEBAIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwKIAogSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQ
b3J0Pj4mIG1lc3NhZ2VQb3J0cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocywgU2VyaWFsaXphdGlvbkVycm9yTW9kZSB0
aHJvd0V4Y2VwdGlvbnMpCiB7Ci0gICAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IHJlc3VsdCA9IENs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBtZXNzYWdlUG9ydHMsIFdURk1vdmUobV9pbWFnZUJ1ZmZlcnMpCisgICAgRGVzZXJp
YWxpemF0aW9uUmVzdWx0IHJlc3VsdCA9IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIFdURk1vdmUo
bV9pbWFnZUJpdG1hcHMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwg
V1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggMjBh
OTdiNmJlNTczZWMxNDU1NDIzODQwMzI5ODUyNmFjZTc1YWU3YS4uNWZiMjczN2RkZTcxNzIxZjZh
MjE2NGI3Mjk1OWZkYTExZmU3Y2U5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIFdFQkNPUkVfRVhQT1JUIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0
b3I8dW5zaWduZWQgY2hhcj4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5Pik7Ci0gICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiYmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVl
X3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYm
IGltYWdlQnVmZmVycworICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQg
Y2hhcj4mJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5Piwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheT4gc2hhcmVkQnVmZmVycywgVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYK
ICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiA9IHsgfQogI2VuZGlmCkBAIC0xMzEs
NyArMTMxLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gbV9kYXRhOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IG1fYXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXk+IG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheTsKLSAgICBWZWN0b3I8c3RkOjpwYWly
PHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9u
U3RhdGU+PiBtX2ltYWdlQnVmZmVyczsKKyAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4g
bV9pbWFnZUJpdG1hcHM7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZz
Y3JlZW5DYW52YXNlczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRl
eCBhMDRkYzA5OTZiMDVmNDIyMGY3OTE4MGRlN2VmZTA4MTVjYTdlODAwLi5iOGZjMWI1MGU5MDBh
ZTU2NDBmYzk5NTA4ZjNkYmJiOTZmOTBjNTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcApAQCAtNzIsMTggKzcyLDkgQEAgUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3Jl
YXRlKEludFNpemUgc2l6ZSkKICAgICByZXR1cm4gY3JlYXRlKEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmluZ01v
ZGUpKTsKIH0KIAotUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlv
blN0YXRlPiYmIGJ1ZmZlcikKK1JlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXph
dGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCiB7Ci0gICAgYXV0byBpbWFnZUJpdG1hcCA9
IGNyZWF0ZShXVEZNb3ZlKGJ1ZmZlci5maXJzdCkpOwotICAgIGltYWdlQml0bWFwLT5tX29yaWdp
bkNsZWFuID0gYnVmZmVyLnNlY29uZC5vcmlnaW5DbGVhbjsKLSAgICBpbWFnZUJpdG1hcC0+bV9w
cmVtdWx0aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5wcmVtdWx0aXBseUFscGhhOwotICAgIGlt
YWdlQml0bWFwLT5tX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQuZm9y
Y2libHlQcmVtdWx0aXBseUFscGhhOwotICAgIHJldHVybiBpbWFnZUJpdG1hcDsKLX0KLQotUmVm
PEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAo
V1RGTW92ZShidWZmZXIpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAo
V1RGTW92ZShidWZmZXIpLCBzZXJpYWxpemF0aW9uU3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJp
dG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlv
bnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCkBAIC05NSwxNSAr
ODYsNiBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgKTsKIH0KIAotVmVjdG9yPHN0ZDo6
cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXph
dGlvblN0YXRlPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+JiYgYml0bWFwcykKLXsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBidWZm
ZXJzOwotICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykKLSAgICAgICAgYnVmZmVycy5h
cHBlbmQoc3RkOjptYWtlX3BhaXIoYml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCks
IEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyBiaXRtYXAtPm9yaWdpbkNsZWFuKCks
IGJpdG1hcC0+cHJlbXVsdGlwbHlBbHBoYSgpLCBiaXRtYXAtPmZvcmNpYmx5UHJlbXVsdGlwbHlB
bHBoYSgpIH0pKTsKLSAgICByZXR1cm4gYnVmZmVyczsKLX0KLQotCiB2b2lkIEltYWdlQml0bWFw
OjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0aW9ucyYm
IG9wdGlvbnMsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRtYXA6OlBy
b21pc2UmJiBwcm9taXNlKQogewogICAgIC8vIDEuIElmIGVpdGhlciB0aGUgc3cgb3Igc2ggYXJn
dW1lbnRzIGFyZSBzcGVjaWZpZWQgYnV0IHplcm8sIHJldHVybiBhIHByb21pc2UKQEAgLTI0OSw3
ICsyMzEsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIo
Ym9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIDkuIElmIHRoZSBvcmln
aW4gb2YgaW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBvcmlnaW4g
c3BlY2lmaWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwgdGhlbiBz
ZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncwogICAg
IC8vICAgIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5DbGVhbiA9
IG9yaWdpbkNsZWFuOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgb3JpZ2luQ2xlYW4pOwogCiAgICAgLy8g
MTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVw
cyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBu
ZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTM4MCw5ICszNjIsOSBAQCB2
b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBS
ZWZQdHI8SFRNTEltYWdlRWxlbWVudAogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwg
dGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3Qn
cwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KIAotICAgIGltYWdlQml0bWFwLT5tX29yaWdp
bkNsZWFuID0gIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpOworICAgIGltYWdlQml0bWFwLT5t
X3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwg
IXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKTsKIAotICAgIGltYWdlQml0bWFwLT5tX3ByZW11
bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEo
b3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNl
cmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlv
bkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8vIDEwLiBSZXR1cm4gYSBu
ZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwu
CiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3IEltYWdlQml0bWFw
IG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC00NDUsOSArNDI3LDkgQEAgdm9pZCBJbWFnZUJpdG1h
cDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgQ2FudmFzQmFzZSYgY2Fu
dmFzLCBJbWEKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFn
ZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUgdmFsdWUgYXMKICAgICAvLyAgICB0
aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGNhbnZhcyBlbGVtZW50J3MgYml0bWFwLgogCi0g
ICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBjYW52YXMub3JpZ2luQ2xlYW4oKTsKKyAg
ICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0
ZTo6T3JpZ2luQ2xlYW4sIGNhbnZhcy5vcmlnaW5DbGVhbigpKTsKIAotICAgIGltYWdlQml0bWFw
LT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRp
cGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3Rh
dGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8vIDYuIFJl
dHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVwcyBpbiBw
YXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJbWFn
ZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTIwLDkgKzUwMiw5IEBAIHZvaWQgSW1h
Z2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwKICAgICAvLyA2LjMuIElmIHRoZSBvcmlnaW4gb2YgaW1hZ2UncyB2aWRl
byBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBlbnRyeQogICAgIC8vICAgICAgc2V0dGluZ3Mgb2Jq
ZWN0J3Mgb3JpZ2luLCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YKICAgICAvLyAg
ICAgIGltYWdlJ3MgYml0bWFwIHRvIGZhbHNlLgotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNs
ZWFuID0gIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5T3JpZ2lu
KCksICp2aWRlbyk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChT
ZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuLCAhdGFpbnRzT3JpZ2luKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKSk7CiAKLSAgICBpbWFnZUJpdG1h
cC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0
aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0
YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVs
dGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyA2LjQu
MS4gUmVzb2x2ZSBwIHdpdGggaW1hZ2VCaXRtYXAuCiAgICAgcHJvbWlzZS5yZXNvbHZlKFdURk1v
dmUoaW1hZ2VCaXRtYXApKTsKQEAgLTU3MSwxNSArNTUzLDE1IEBAIHZvaWQgSW1hZ2VCaXRtYXA6
OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZlB0cjxJbWFnZUJpdG1h
cD4mIGV4CiAKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFn
ZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUKICAgICAvLyAgICB2YWx1ZSBhcyB0
aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGJpdG1hcCBvZiB0aGUgaW1hZ2UgYXJndW1lbnQu
Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBleGlzdGluZ0ltYWdlQml0bWFwLT5v
cmlnaW5DbGVhbigpOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgZXhpc3RpbmdJbWFnZUJpdG1hcC0+b3Jp
Z2luQ2xlYW4oKSk7CiAKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFs
cGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlw
bHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAg
aW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6
OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFs
cGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgQ29yZSBHcmFwaGljcyBi
YWNrZW5kLCB3aGVuIGNyZWF0aW5nIGFuIEltYWdlQml0bWFwIGZyb20KICAgICAvLyBhbiBJbWFn
ZUJpdG1hcCwgdGhlIGFscGhhIGNoYW5uZWwgb2YgYml0bWFwRGF0YSBpc24ndCBwcmVtdWx0aXBs
aWVkIGV2ZW4KICAgICAvLyB0aG91Z2ggdGhlIGFscGhhIG1vZGUgb2YgdGhlIGludGVybmFsIHN1
cmZhY2UgY2xhaW1zIGl0IGlzLiBJbnN0cnVjdAogICAgIC8vIHVzZXJzIG9mIHRoaXMgSW1hZ2VC
aXRtYXAgdG8gaWdub3JlIHRoZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4KLSAgICBp
bWFnZUJpdG1hcC0+bV9mb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSBpbWFnZUJpdG1hcC0+bV9w
cmVtdWx0aXBseUFscGhhOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5z
ZXQoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEsIGltYWdlQml0
bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6OlBy
ZW11bHRpcGx5QWxwaGEpKTsKIAogICAgIC8vIDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQg
Y29udGludWUgcnVubmluZyB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNv
bHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZh
bHVlLgpAQCAtNzU0LDcgKzczNiw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZm
ZXIoCiAKICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkp
OwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRp
cGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGltYWdlQml0bWFw
LT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBs
eUFscGhhLCBhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25z
LnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOwogCiAgICAgcHJvbWlzZS5yZXNvbHZlKFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKIH0KQEAg
LTgxOCw4ICs4MDAsOSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8SW1hZ2VEYXRhPiYgaW1hZwogICAgIHByb21pc2UucmVz
b2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUltYWdlQml0bWFwOjpJbWFnZUJpdG1h
cChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQorSW1hZ2VCaXRtYXA6Oklt
YWdlQml0bWFwKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIsIE9wdGlvblNl
dDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSkKICAgICA6IG1fYml0bWFw
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpCisgICAgLCBtX3NlcmlhbGl6YXRpb25TdGF0ZShzZXJpYWxp
emF0aW9uU3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fYml0bWFwRGF0YSk7CiB9CkBAIC04MjgsNyAr
ODExLDcgQEAgSW1hZ2VCaXRtYXA6On5JbWFnZUJpdG1hcCgpID0gZGVmYXVsdDsKIAogdW5zaWdu
ZWQgSW1hZ2VCaXRtYXA6OndpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAh
bV9iaXRtYXBEYXRhKQorICAgIGlmICghbV9iaXRtYXBEYXRhKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCB3aWR0aD8KQEAgLTgzNyw3ICs4MjAs
NyBAQCB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6d2lkdGgoKSBjb25zdAogCiB1bnNpZ25lZCBJbWFn
ZUJpdG1hcDo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRt
YXBEYXRhKQorICAgIGlmICghbV9iaXRtYXBEYXRhKQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/CkBAIC04NDYsMTMgKzgyOSwxMSBA
QCB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6aGVpZ2h0KCkgY29uc3QKIAogdm9pZCBJbWFnZUJpdG1h
cDo6Y2xvc2UoKQogewotICAgIG1fZGV0YWNoZWQgPSB0cnVlOwogICAgIG1fYml0bWFwRGF0YSA9
IG51bGxwdHI7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCaXRtYXA6
OnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKQogewotICAgIG1fZGV0YWNoZWQgPSB0cnVlOwog
ICAgIHJldHVybiBXVEZNb3ZlKG1fYml0bWFwRGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VC
aXRtYXAuaAppbmRleCBiZjBkZDVlMWQ3NDkyMTk0ZTI3YzZjMjdkNzg2YWExYjMyMmE5ZGQ5Li41
ZDIwOWU1ZTc3YWZlYTE4MjI3NjQwYjhjNmNiZjE2YzJlNWEzMGQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5oCkBAIC02MCw2ICs2MCwxMiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiBjbGFzcyBET01Qcm9taXNlRGVmZXJyZWQ7CiBjbGFzcyBJbWFnZUJpdG1hcCBmaW5hbCA6IHB1
YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZDb3VudGVkPEltYWdlQml0bWFwPiB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJpdG1hcCk7CiBwdWJsaWM6CisgICAgZW51
bSBjbGFzcyBTZXJpYWxpemF0aW9uU3RhdGUgOiB1aW50OF90IHsKKyAgICAgICAgT3JpZ2luQ2xl
YW4gICAgICAgICAgICAgID0gMSA8PCAwLAorICAgICAgICBQcmVtdWx0aXBseUFscGhhICAgICAg
ICAgPSAxIDw8IDEsCisgICAgICAgIEZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSA9IDEgPDwgMgor
ICAgIH07CisKICAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PAogICAgICAgICBSZWZQdHI8SFRN
TEltYWdlRWxlbWVudD4sCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtODMsNyArODksNyBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgU291cmNlJiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBpbnQgc3gsIGludCBzeSwgaW50IHN3
LCBpbnQgc2gsIFByb21pc2UmJik7CiAKICAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVh
dGUoSW50U2l6ZSk7Ci0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3JlYXRlKHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlv
blN0YXRlPiYmKTsKKyAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiYmLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiA9IHsg
fSk7CiAKICAgICB+SW1hZ2VCaXRtYXAoKTsKIApAQCAtOTEsMzAgKzk3LDI4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKICAgICB2b2lkIGNsb3NlKCk7CiAKLSAgICBi
b29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2RldGFjaGVkOyB9Ci0KLSAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9iaXRtYXBEYXRhLmdldCgpOyB9CisgICAgYm9v
bCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIWJ1ZmZlcigpOyB9CiAKLSAgICBib29sIG9y
aWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQorICAgIEltYWdlQnVm
ZmVyKiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2JpdG1hcERhdGEuZ2V0KCk7IH0KIAotICAg
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBo
YTsgfQorICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRp
b25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsgfQogCisg
ICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9u
U3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsgfQog
ICAgIC8vIFdoZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VC
aXRtYXAncyBJbWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycwogICAgIC8vIHRoZSBhbHBo
YSBtb2RlIG9mIHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29y
ZSBHcmFwaGljcyBiYWNrZW5kLiBGb3IKICAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9t
IEltYWdlQml0bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxs
ZXJzIG11c3QgYmUKICAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZv
cmNpYmx5IHByZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgotICAgIGJvb2wgZm9yY2libHlQ
cmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjaWJseVByZW11bHRpcGx5QWxw
aGE7IH0KKyAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VyaWFsaXphdGlvblN0YXRlLmNvbnRhaW5zKFNlcmlhbGl6YXRpb25TdGF0ZTo6Rm9yY2li
bHlQcmVtdWx0aXBseUFscGhhKTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0
aW9uU3RhdGU7IH0KIAotICAgIHN0YXRpYyBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBkZXRhY2hC
aXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IHRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgSW1hZ2VCaXRtYXBJbWFnZU9ic2VydmVyOwogICAgIGZyaWVuZCBj
bGFzcyBQZW5kaW5nSW1hZ2VCaXRtYXA7CiAKLSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKLSAgICBJbWFnZUJpdG1hcChz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpOworICAgIEltYWdlQml0bWFwKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4pOwog
CiAgICAgc3RhdGljIHZvaWQgcmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVmZmVyKGJvb2wgb3JpZ2lu
Q2xlYW4sIFByb21pc2UmJik7CiAKQEAgLTEzNCwxMCArMTM4LDcgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgdm9pZCBjcmVhdGVGcm9tQnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwgU3RyaW5nIG1p
bWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBVUkwmLCBJbWFn
ZUJpdG1hcE9wdGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBib29sIG1fZGV0
YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUgfTsKLSAgICBi
b29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0
ZT4gbV9zZXJpYWxpemF0aW9uU3RhdGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAKaW5kZXggMTg5YWMxOTI1NDRkYzlkZWI2ZDUzNjYzYzgyOTQwYTYwMTI3
MzAwYy4uMzgyNjEwOWQ0MjA4OTQzYzNmYWMyZWMyZGQwOTAxZTViOWNkZmQwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMjUwLDEzICsyNTAsMTYgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRv
SW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7
IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpCi0g
ICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCBJbWFnZUJ1ZmZlcjo6
U2VyaWFsaXphdGlvblN0YXRlIHsgdHJ1ZSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAgICAgICAg
ICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgSW1hZ2VCaXRtYXA6OlNlcmlhbGl6
YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRh
a2VJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVy
biB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAotICAgICAgICByZXR1cm4g
eyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2Vy
aWFsaXphdGlvblN0YXRlIHsgb3JpZ2luQ2xlYW4oKSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAg
ICAgICBpZiAob3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIEltYWdlQml0bWFwOjpTZXJpYWxpemF0aW9uU3Rh
dGU6Ok9yaWdpbkNsZWFuIH0pIH07CisKKyAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSB9KSB9OwogICAgIH0KIAogI2lmIEVOQUJMRShXRUJHTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4
IGZjOWEwMzgyMWVlYTE5OTc5NWU0MWE0ZGY3ZDExMDE0MjA5OTM3ZDUuLmQxNDY0OTJjNGE4ZGY5
MzVjYWY5NGI5ZmI5NTU5MDlhYWQxY2JhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMzgsMTIgKzM4LDYgQEAgY2xhc3MgRHJhd2lu
Z0NvbnRleHQ7CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgU2Vy
aWFsaXphdGlvblN0YXRlIHsKLSAgICAgICAgYm9vbCBvcmlnaW5DbGVhbiB7IGZhbHNlIH07Ci0g
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgZm9y
Y2libHlQcmVtdWx0aXBseUFscGhhIHsgZmFsc2UgfTsKLSAgICB9OwotCiAgICAgLy8gV2lsbCBy
ZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBTaG91bGRBY2NlbGVyYXRlLCBTaG91bGRVc2VEaXNwbGF5TGlzdCwgUmVuZGVy
aW5nUHVycG9zZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9y
U3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408833</attachid>
            <date>2020-09-15 10:52:16 -0700</date>
            <delta_ts>2020-09-16 16:38:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200915105215.patch</filename>
            <type>text/plain</type>
            <size>30789</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjgyZDcxNDI4Y2YwMjkx
M2ZlNjAwNDgyNzM5OTNjN2MyYmY3OGQ2NS4uN2Q0NzMxOGEzOThmYzRkNDE3YzczZTFlYzM2MjFk
MWU3YWM1YzhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA5LTE1ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgbW92aW5nIFNl
cmlhbGl6YXRpb25TdGF0ZSB0byBJbWFnZUJpdG1hcCwgbWFraW5nIGl0IGFuIGVudW0gYW5kCisg
ICAgICAgIG1ha2luZyBJbWFnZUJ1ZmZlciBzdG9yZXMgYW4gT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4sIEkgcmVhbGl6ZWQKKyAgICAgICAgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZGV0YWNo
aW5nIGFuZCByZWF0dGFjaGluZyB0aGUgSW1hZ2VCdWZmZXIgZnJvbSBhbmQKKyAgICAgICAgdG8g
dGhlIEltYWdlQml0bWFwLiBXZSBjYW4gc3RvcmUgUmVmUHRyPEltYWdlQml0bWFwPiBpbnN0ZWFk
IG9mIHN0b3JpbmcKKyAgICAgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4sIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+PgorICAgICAgICBzaW5jZSB0aGlzIGlz
IHdoYXQgSW1hZ2VCaXRtYXAgYWN0dWFsbHkgc3RvcmVzLgorCisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXpl
cjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6
ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
RGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21wdXRlTWVtb3J5Q29zdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnJlc29sdmVXaXRoQmxhbmtJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpoZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjp0YWtlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBE
ZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuaDoKKyAgICAgICAgKiBodG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRy
YW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0wOS0xNCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFR5cGUgb2YgQW5hbHlzZXJO
b2RlJ3MgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHVucmVzdHJpY3RlZCBkb3VibGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3NWRlYjZiY2M4ODg0ZjBlODEuLjlmZjIyZGQ3
MWZlOGZhYjM2Nzc3NTEzMTUxOTVhOGFhNzliZmUyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTA0Myw5ICsx
MDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIHdyaXRlKEltYWdlQml0bWFw
VGFnKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAub3Jp
Z2luQ2xlYW4oKSkpOwotICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJp
dG1hcC5wcmVtdWx0aXBseUFscGhhKCkpKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oaW1hZ2VCaXRtYXAuZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkpKTsKKyAgICAgICAg
d3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuc2VyaWFsaXphdGlvblN0YXRl
KCkudG9SYXcoKSkpOwogICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDxpbnQzMl90Pihsb2dpY2Fs
U2l6ZS53aWR0aCgpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGludDMyX3Q+KGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGRvdWJsZT4oYnVm
ZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSkpOwpAQCAtMTkzMSw3ICsxOTI5LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25S
ZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBv
cnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVy
cworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8
UmVmUHRyPEltYWdlQml0bWFwPj4mJiBpbWFnZUJpdG1hcHMKICNpZiBFTkFCTEUoT0ZGU0NSRUVO
X0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2Ny
ZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTE5NDMs
NyArMTk0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmICghYnVmZmVyLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihqc051bGwoKSwgU2VyaWFsaXphdGlv
blJldHVybkNvZGU6OlVuc3BlY2lmaWVkRXJyb3IpOwotICAgICAgICBDbG9uZURlc2VyaWFsaXpl
ciBkZXNlcmlhbGl6ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdl
UG9ydHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZp
bGVQYXRocywgc2hhcmVkQnVmZmVycywgV1RGTW92ZShpbWFnZUJ1ZmZlcnMpCisgICAgICAgIENs
b25lRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LCBidWZmZXIsIGJs
b2JVUkxzLCBibG9iRmlsZVBhdGhzLCBzaGFyZWRCdWZmZXJzLCBXVEZNb3ZlKGltYWdlQml0bWFw
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAgICwgV1RGTW92ZShk
ZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKQogI2VuZGlmCkBAIC0xOTk2LDcgKzE5OTQsNyBAQCBw
cml2YXRlOgogICAgICAgICBzaXplX3QgbV9pbmRleDsKICAgICB9OwogCi0gICAgQ2xvbmVEZXNl
cmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVz
c2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMs
IFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZm
ZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1hZ2VCdWZmZXJzLCBjb25zdCBWZWN0b3I8dWlu
dDhfdD4mIGJ1ZmZlcgorICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50
c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4m
JiBpbWFnZUJpdG1hcHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRh
Y2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsgfQog
I2VuZGlmCkBAIC0yMDE0LDggKzIwMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fbWVzc2Fn
ZVBvcnRzKG1lc3NhZ2VQb3J0cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVudHMoYXJy
YXlCdWZmZXJDb250ZW50cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJheUJ1ZmZlckNv
bnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKLSAgICAgICAgLCBtX2lt
YWdlQnVmZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1h
cHMobV9pbWFnZUJ1ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKFdURk1v
dmUoaW1hZ2VCaXRtYXBzKSkKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAg
LCBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hlZE9mZnNjcmVlbkNh
bnZhc2VzKSkKICAgICAgICAgLCBtX29mZnNjcmVlbkNhbnZhc2VzKG1fZGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXNlcy5zaXplKCkpCkBAIC0yMDI4LDcgKzIwMjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAgICB9CiAKLSAgICBDbG9uZURlc2VyaWFs
aXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdl
UG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJM
cywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlCdWZmZXJDb250ZW50
c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVm
ZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRy
PE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBh
cnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBh
dGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxSZWZQ
dHI8SW1hZ2VCaXRtYXA+PiYmIGltYWdlQml0bWFwcwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FO
VkFTKQogICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5D
YW52YXM+PiYmIGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMjA0OSw4ICsy
MDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQogICAgICAg
ICAsIG1fYmxvYkZpbGVQYXRocyhibG9iRmlsZVBhdGhzKQogICAgICAgICAsIG1fc2hhcmVkQnVm
ZmVycyhzaGFyZWRCdWZmZXJzKQotICAgICAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1h
Z2VCdWZmZXJzKSkKLSAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlQnVmZmVycy5zaXpl
KCkpCisgICAgICAgICwgbV9pbWFnZUJpdG1hcHMoV1RGTW92ZShpbWFnZUJpdG1hcHMpKQogI2lm
IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAsIG1fZGV0YWNoZWRPZmZzY3JlZW5D
YW52YXNlcyhXVEZNb3ZlKGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpKQogICAgICAgICAsIG1f
b2Zmc2NyZWVuQ2FudmFzZXMobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzLnNpemUoKSkKQEAg
LTI4ODMsMTQgKzI4NzksMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGlu
ZGV4OwogICAgICAgICBib29sIGluZGV4U3VjY2Vzc2Z1bGx5UmVhZCA9IHJlYWQoaW5kZXgpOwot
ICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBpbmRleCA+PSBtX2ltYWdlQnVm
ZmVycy5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFpbmRleFN1Y2Nlc3NmdWxseVJlYWQgfHwgaW5k
ZXggPj0gbV9pbWFnZUJpdG1hcHMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtX2lt
YWdlQml0bWFwc1tpbmRleF0pCi0gICAgICAgICAgICBtX2ltYWdlQml0bWFwc1tpbmRleF0gPSBJ
bWFnZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUobV9pbWFnZUJ1ZmZlcnMuYXQoaW5kZXgpKSk7Ci0K
ICAgICAgICAgYXV0byBiaXRtYXAgPSBtX2ltYWdlQml0bWFwc1tpbmRleF0uZ2V0KCk7CiAgICAg
ICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CiAgICAgfQpAQCAtMjk2MiwxNSArMjk1NSwx
MyBAQCBwcml2YXRlOgogCiAgICAgSlNWYWx1ZSByZWFkSW1hZ2VCaXRtYXAoKQogICAgIHsKLSAg
ICAgICAgdWludDhfdCBvcmlnaW5DbGVhbjsKLSAgICAgICAgdWludDhfdCBwcmVtdWx0aXBseUFs
cGhhOwotICAgICAgICB1aW50OF90IGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAg
dWludDhfdCBzZXJpYWxpemF0aW9uU3RhdGU7CiAgICAgICAgIGludDMyX3QgbG9naWNhbFdpZHRo
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIGRvdWJsZSByZXNvbHV0
aW9uU2NhbGU7CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXI7CiAKLSAg
ICAgICAgaWYgKCFyZWFkKG9yaWdpbkNsZWFuKSB8fCAhcmVhZChwcmVtdWx0aXBseUFscGhhKSB8
fCAhcmVhZChmb3JjaWJseVByZW11bHRpcGx5QWxwaGEpIHx8ICFyZWFkKGxvZ2ljYWxXaWR0aCkg
fHwgIXJlYWQobG9naWNhbEhlaWdodCkgfHwgIXJlYWQocmVzb2x1dGlvblNjYWxlKSB8fCAhcmVh
ZEFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSkgeworICAgICAgICBpZiAoIXJlYWQoc2VyaWFsaXph
dGlvblN0YXRlKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQp
IHx8ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZl
cikpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAgICAgICAgIH0KQEAgLTI5OTksNyArMjk5MCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgYnVm
ZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
KmltYWdlRGF0YSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAotICAgICAg
ICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIElt
YWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5D
bGVhbiksIHN0YXRpY19jYXN0PGJvb2w+KHByZW11bHRpcGx5QWxwaGEpLCBzdGF0aWNfY2FzdDxi
b29sPihmb3JjaWJseVByZW11bHRpcGx5QWxwaGEpIH19KTsKKyAgICAgICAgYXV0byBiaXRtYXAg
PSBJbWFnZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PEltYWdlQml0
bWFwOjpTZXJpYWxpemF0aW9uU3RhdGU+Ojpmcm9tUmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpOwog
ICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwogICAgIH0KIApAQCAtMzQzNCw3ICsz
NDI1LDYgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOwogICAgIFZl
Y3RvcjxTdHJpbmc+IG1fYmxvYkZpbGVQYXRoczsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXkqIG1fc2hhcmVkQnVmZmVyczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBtX2ltYWdl
QnVmZmVyczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gbV9pbWFnZUJpdG1hcHM7
CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlczsK
QEAgLTM2NTgsNyArMzY0OCw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgc3RkOjp1bmlxCiAgICAgbV9tZW1v
cnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5
QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZlY3RvcjxSZWZQdHI8
SW1hZ2VCaXRtYXA+PiYmIGltYWdlQml0bWFwcwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFT
KQogICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52
YXM+PiYmIGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMzY2OSw3ICszNjU5
LDcgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9y
PHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBWZWMKICAgICA6IG1fZGF0YShXVEZNb3ZlKGJ1ZmZl
cikpCiAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheShXVEZNb3ZlKGFycmF5QnVmZmVy
Q29udGVudHNBcnJheSkpCiAgICAgLCBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92
ZShzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5KSkKLSAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1v
dmUoaW1hZ2VCdWZmZXJzKSkKKyAgICAsIG1faW1hZ2VCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRt
YXBzKSkKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAsIG1fZGV0YWNoZWRPZmZz
Y3JlZW5DYW52YXNlcyhXVEZNb3ZlKGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpKQogI2VuZGlm
CkBAIC0zNjk5LDkgKzM2ODksOSBAQCBzaXplX3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21w
dXRlTWVtb3J5Q29zdCgpIGNvbnN0CiAgICAgICAgICAgICBjb3N0ICs9IGNvbnRlbnQuc2l6ZUlu
Qnl0ZXMoKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2ltYWdlQnVmZmVycykg
ewotICAgICAgICBpZiAocGFpci5maXJzdCkKLSAgICAgICAgICAgIGNvc3QgKz0gcGFpci5maXJz
dC0+bWVtb3J5Q29zdCgpOworICAgIGZvciAoYXV0byYgYml0bWFwIDogbV9pbWFnZUJpdG1hcHMp
IHsKKyAgICAgICAgaWYgKGJpdG1hcC0+YnVmZmVyKCkpCisgICAgICAgICAgICBjb3N0ICs9IGJp
dG1hcC0+YnVmZmVyKCktPm1lbW9yeUNvc3QoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKQEAgLTM5MjUsMTUgKzM5MTUsMTMgQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTR2xvYmFs
T2IKICAgICBpZiAoYXJyYXlCdWZmZXJDb250ZW50c0FycmF5Lmhhc0V4Y2VwdGlvbigpKQogICAg
ICAgICByZXR1cm4gYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VFeGNlcHRpb24oKTsK
IAotICAgIGF1dG8gaW1hZ2VCdWZmZXJzID0gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoV1RG
TW92ZShpbWFnZUJpdG1hcHMpKTsKLQogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiBkZXRhY2hl
ZENhbnZhc2VzOwogICAgIGZvciAoYXV0byBvZmZzY3JlZW5DYW52YXMgOiBvZmZzY3JlZW5DYW52
YXNlcykKICAgICAgICAgZGV0YWNoZWRDYW52YXNlcy5hcHBlbmQob2Zmc2NyZWVuQ2FudmFzLT5k
ZXRhY2goKSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXkucmVsZWFzZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRl
eHQ6OldvcmtlclBvc3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxwdHIs
IFdURk1vdmUoaW1hZ2VCdWZmZXJzKQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXkucmVsZWFzZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNv
bnRleHQ6OldvcmtlclBvc3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxw
dHIsIFdURk1vdmUoaW1hZ2VCaXRtYXBzKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
ICAgICAgICAgICAgICAgICwgV1RGTW92ZShkZXRhY2hlZENhbnZhc2VzKQogI2VuZGlmCkBAIC0z
OTg5LDcgKzM5NzcsNyBAQCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxp
emUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsCiAKIEpTVmFsdWUgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9i
VVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlhbGl6YXRpb25F
cnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIERlc2VyaWFsaXphdGlvblJlc3VsdCBy
ZXN1bHQgPSBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBXVEZNb3ZlKG1faW1hZ2VCdWZmZXJzKQor
ICAgIERlc2VyaWFsaXphdGlvblJlc3VsdCByZXN1bHQgPSBDbG9uZURlc2VyaWFsaXplcjo6ZGVz
ZXJpYWxpemUoJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRz
LCBXVEZNb3ZlKG1faW1hZ2VCaXRtYXBzKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
ICAgICAgICAsIFdURk1vdmUobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
CmluZGV4IDIwYTk3YjZiZTU3M2VjMTQ1NTQyMzg0MDMyOTg1MjZhY2U3NWFlN2EuLjVmYjI3Mzdk
ZGU3MTcyMWY2YTIxNjRiNzI5NTlmZGExMWZlN2NlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xMTcsNyArMTE3LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0
VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwgc3RkOjp1bmlxdWVfcHRy
PEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4pOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShW
ZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBz
dGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5Piwgc3RkOjp1bmlxdWVfcHRy
PEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlv
blN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9y
PHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1
bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiYmCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7IH0KICNlbmRp
ZgpAQCAtMTMxLDcgKzEzMSw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
IG1fZGF0YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBt
X2FycmF5QnVmZmVyQ29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0gICAgVmVjdG9y
PHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2Vy
aWFsaXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+IG1faW1hZ2VCaXRtYXBzOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiBtX2Rl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1h
cC5jcHAKaW5kZXggYTA0ZGMwOTk2YjA1ZjQyMjBmNzkxODBkZTdlZmUwODE1Y2E3ZTgwMC4uMjM0
YWYxODA5NDM2N2JhOGM2NzA5MWIyZjFlZDc0NThmYTFlNDJmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAKQEAgLTcyLDE4ICs3Miw5IEBAIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VC
aXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCiAgICAgcmV0dXJuIGNyZWF0ZShJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpLCBidWZmZXJS
ZW5kZXJpbmdNb2RlKSk7CiB9CiAKLVJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0
ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNl
cmlhbGl6YXRpb25TdGF0ZT4mJiBidWZmZXIpCitSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFw
OjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlciwgT3B0aW9uU2V0
PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlKQogewotICAgIGF1dG8gaW1h
Z2VCaXRtYXAgPSBjcmVhdGUoV1RGTW92ZShidWZmZXIuZmlyc3QpKTsKLSAgICBpbWFnZUJpdG1h
cC0+bV9vcmlnaW5DbGVhbiA9IGJ1ZmZlci5zZWNvbmQub3JpZ2luQ2xlYW47Ci0gICAgaW1hZ2VC
aXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQucHJlbXVsdGlwbHlBbHBo
YTsKLSAgICBpbWFnZUJpdG1hcC0+bV9mb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSBidWZmZXIu
c2Vjb25kLmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsKLSAgICByZXR1cm4gaW1hZ2VCaXRtYXA7
Ci19Ci0KLVJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlQml0bWFwKFdURk1vdmUoYnVmZmVyKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElt
YWdlQml0bWFwKFdURk1vdmUoYnVmZmVyKSwgc2VyaWFsaXphdGlvblN0YXRlKSk7CiB9CiAKIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNvdXJjZSwgSW1hZ2VC
aXRtYXBPcHRpb25zJiYgb3B0aW9ucywgSW1hZ2VCaXRtYXA6OlByb21pc2UmJiBwcm9taXNlKQpA
QCAtOTUsMTUgKzg2LDYgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICk7CiB9CiAKLVZl
Y3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6
OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxS
ZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCi17Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlPj4gYnVmZmVyczsKLSAgICBmb3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAg
IGJ1ZmZlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGJpdG1hcC0+dHJhbnNmZXJPd25lcnNoaXBB
bmRDbG9zZSgpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsgYml0bWFwLT5vcmln
aW5DbGVhbigpLCBiaXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFwLT5mb3JjaWJseVBy
ZW11bHRpcGx5QWxwaGEoKSB9KSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcnM7Ci19Ci0KLQogdm9pZCBJ
bWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1h
cE9wdGlvbnMmJiBvcHRpb25zLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdl
Qml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkKIHsKICAgICAvLyAxLiBJZiBlaXRoZXIgdGhlIHN3
IG9yIHNoIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkIGJ1dCB6ZXJvLCByZXR1cm4gYSBwcm9taXNl
CkBAIC0yNDksNyArMjMxLDcgQEAgdm9pZCBJbWFnZUJpdG1hcDo6cmVzb2x2ZVdpdGhCbGFua0lt
YWdlQnVmZmVyKGJvb2wgb3JpZ2luQ2xlYW4sIFByb21pc2UmJiBwcm9taXMKICAgICAvLyA5LiBJ
ZiB0aGUgb3JpZ2luIG9mIGltYWdlJ3MgaW1hZ2UgaXMgbm90IHRoZSBzYW1lIG9yaWdpbiBhcyB0
aGUgb3JpZ2luIHNwZWNpZmllZCBieSB0aGUKICAgICAvLyAgICBlbnRyeSBzZXR0aW5ncyBvYmpl
Y3QsIHRoZW4gc2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRtYXAgb2Jq
ZWN0J3MKICAgICAvLyAgICBiaXRtYXAgdG8gZmFsc2UuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3Jp
Z2luQ2xlYW4gPSBvcmlnaW5DbGVhbjsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9u
U3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4sIG9yaWdpbkNsZWFuKTsK
IAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcg
dGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ug
d2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC0zODAsOSAr
MzYyLDkgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQKICAgICAvLyAgICBlbnRyeSBzZXR0aW5n
cyBvYmplY3QsIHRoZW4gc2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRt
YXAgb2JqZWN0J3MKICAgICAvLyAgICBiaXRtYXAgdG8gZmFsc2UuCiAKLSAgICBpbWFnZUJpdG1h
cC0+bV9vcmlnaW5DbGVhbiA9ICF0YWludHNPcmlnaW4oKmNhY2hlZEltYWdlKTsKKyAgICBpbWFn
ZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3Jp
Z2luQ2xlYW4sICF0YWludHNPcmlnaW4oKmNhY2hlZEltYWdlKSk7CiAKLSAgICBpbWFnZUJpdG1h
cC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0
aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0
YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVs
dGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyAxMC4g
UmV0dXJuIGEgbmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBzIGlu
IHBhcmFsbGVsLgogICAgIC8vIDExLiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJ
bWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNDQ1LDkgKzQyNyw5IEBAIHZvaWQg
SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIENhbnZh
c0Jhc2UmIGNhbnZhcywgSW1hCiAgICAgLy8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBv
ZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0J3MgYml0bWFwIHRvIHRoZSBzYW1lIHZhbHVlIGFzCiAg
ICAgLy8gICAgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBjYW52YXMgZWxlbWVudCdzIGJp
dG1hcC4KIAotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNs
ZWFuKCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChTZXJpYWxp
emF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuLCBjYW52YXMub3JpZ2luQ2xlYW4oKSk7CiAKLSAgICBp
bWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25G
b3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFs
aXphdGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFs
cGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlw
bHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAg
ICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ug
c3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRo
ZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTUyMCw5ICs1MDIsOSBA
QCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgLy8gNi4zLiBJZiB0aGUgb3JpZ2luIG9mIGlt
YWdlJ3MgdmlkZW8gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggZW50cnkKICAgICAvLyAgICAgIHNl
dHRpbmdzIG9iamVjdCdzIG9yaWdpbiwgdGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9m
CiAgICAgLy8gICAgICBpbWFnZSdzIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+
bV9vcmlnaW5DbGVhbiA9ICF0YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1
cml0eU9yaWdpbigpLCAqdmlkZW8pOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25T
dGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgIXRhaW50c09yaWdpbihz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5T3JpZ2luKCksICp2aWRlbykpOwogCi0gICAg
aW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9u
Rm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGltYWdlQml0bWFwLT5tX3Nlcmlh
bGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhLCBh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogCiAg
ICAgLy8gNi40LjEuIFJlc29sdmUgcCB3aXRoIGltYWdlQml0bWFwLgogICAgIHByb21pc2UucmVz
b2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CkBAIC01NzEsMTUgKzU1MywxNSBAQCB2b2lkIElt
YWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8
SW1hZ2VCaXRtYXA+JiBleAogCiAgICAgLy8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBv
ZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0J3MgYml0bWFwIHRvIHRoZSBzYW1lCiAgICAgLy8gICAg
dmFsdWUgYXMgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBiaXRtYXAgb2YgdGhlIGltYWdl
IGFyZ3VtZW50LgotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gZXhpc3RpbmdJbWFn
ZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9u
U3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4sIGV4aXN0aW5nSW1hZ2VC
aXRtYXAtPm9yaWdpbkNsZWFuKCkpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlB
bHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25z
LnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXph
dGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhLCBhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJl
bXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQpOwogCiAgICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUg
R3JhcGhpY3MgYmFja2VuZCwgd2hlbiBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCiAgICAg
Ly8gYW4gSW1hZ2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3Qg
cHJlbXVsdGlwbGllZCBldmVuCiAgICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBp
bnRlcm5hbCBzdXJmYWNlIGNsYWltcyBpdCBpcy4gSW5zdHJ1Y3QKICAgICAvLyB1c2VycyBvZiB0
aGlzIEltYWdlQml0bWFwIHRvIGlnbm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1v
ZGUuCi0gICAgaW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VC
aXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0
aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6Rm9yY2libHlQcmVtdWx0aXBseUFscGhh
LCBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlv
blN0YXRlOjpQcmVtdWx0aXBseUFscGhhKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJv
bWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAg
Ly8gNy4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0
IGFzIHRoZSB2YWx1ZS4KQEAgLTc1NCw3ICs3MzYsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVh
dGVGcm9tQnVmZmVyKAogCiAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJp
dG1hcERhdGEpKTsKIAotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxw
aGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBs
eUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBp
bWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6
UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxw
aGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKTsKIAogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFw
KSk7CiB9CkBAIC04MTgsOCArODAwLDkgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlRGF0YT4mIGltYWcKICAgICBw
cm9taXNlLnJlc29sdmUoV1RGTW92ZShpbWFnZUJpdG1hcCkpOwogfQogCi1JbWFnZUJpdG1hcDo6
SW1hZ2VCaXRtYXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKK0ltYWdl
Qml0bWFwOjpJbWFnZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
LCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCiAgICAg
OiBtX2JpdG1hcERhdGEoV1RGTW92ZShidWZmZXIpKQorICAgICwgbV9zZXJpYWxpemF0aW9uU3Rh
dGUoc2VyaWFsaXphdGlvblN0YXRlKQogewogICAgIEFTU0VSVChtX2JpdG1hcERhdGEpOwogfQpA
QCAtODI4LDcgKzgxMSw3IEBAIEltYWdlQml0bWFwOjp+SW1hZ2VCaXRtYXAoKSA9IGRlZmF1bHQ7
CiAKIHVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGV0
YWNoZWQgfHwgIW1fYml0bWFwRGF0YSkKKyAgICBpZiAoIW1fYml0bWFwRGF0YSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/CkBAIC04
MzcsNyArODIwLDcgQEAgdW5zaWduZWQgSW1hZ2VCaXRtYXA6OndpZHRoKCkgY29uc3QKIAogdW5z
aWduZWQgSW1hZ2VCaXRtYXA6OmhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZGV0YWNoZWQg
fHwgIW1fYml0bWFwRGF0YSkKKyAgICBpZiAoIW1fYml0bWFwRGF0YSkKICAgICAgICAgcmV0dXJu
IDA7CiAKICAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgaGVpZ2h0PwpAQCAtODQ2LDEz
ICs4MjksMTEgQEAgdW5zaWduZWQgSW1hZ2VCaXRtYXA6OmhlaWdodCgpIGNvbnN0CiAKIHZvaWQg
SW1hZ2VCaXRtYXA6OmNsb3NlKCkKIHsKLSAgICBtX2RldGFjaGVkID0gdHJ1ZTsKICAgICBtX2Jp
dG1hcERhdGEgPSBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQml0bWFwOjp0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcigpCiB7Ci0gICAgbV9kZXRh
Y2hlZCA9IHRydWU7CiAgICAgcmV0dXJuIFdURk1vdmUobV9iaXRtYXBEYXRhKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZUJpdG1hcC5oCmluZGV4IGJmMGRkNWUxZDc0OTIxOTRlMjdjNmMyN2Q3ODZh
YTFiMzIyYTlkZDkuLjU5YjQxNGFiMDFiNDU5MjM0NDhiN2IwNDBjNzhhZjZiY2JiY2UyM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKQEAgLTYwLDYgKzYwLDEyIEBAIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IGNsYXNzIERPTVByb21pc2VEZWZlcnJlZDsKIGNsYXNzIEltYWdlQml0
bWFwIGZpbmFsIDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8SW1h
Z2VCaXRtYXA+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQml0bWFwKTsKIHB1
YmxpYzoKKyAgICBlbnVtIGNsYXNzIFNlcmlhbGl6YXRpb25TdGF0ZSA6IHVpbnQ4X3QgeworICAg
ICAgICBPcmlnaW5DbGVhbiAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIFByZW11bHRp
cGx5QWxwaGEgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgRm9yY2libHlQcmVtdWx0aXBseUFs
cGhhID0gMSA8PCAyCisgICAgfTsKKwogICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlhbnQ8CiAgICAg
ICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwKICNpZiBFTkFCTEUoVklERU8pCkBAIC04Myw3
ICs4OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVQcm9taXNlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBTb3VyY2UmJiwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIGludCBzeCwg
aW50IHN5LCBpbnQgc3csIGludCBzaCwgUHJvbWlzZSYmKTsKIAogICAgIHN0YXRpYyBSZWY8SW1h
Z2VCaXRtYXA+IGNyZWF0ZShJbnRTaXplKTsKLSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBj
cmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVy
OjpTZXJpYWxpemF0aW9uU3RhdGU+JiYpOworICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNy
ZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYsIE9wdGlvblNldDxTZXJpYWxpemF0
aW9uU3RhdGU+ID0geyB9KTsKIAogICAgIH5JbWFnZUJpdG1hcCgpOwogCkBAIC05MSwzMCArOTcs
MjggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0OwogICAgIHZvaWQgY2xv
c2UoKTsKIAotICAgIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoZWQ7
IH0KLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSB7IHJldHVybiBtX2JpdG1hcERhdGEuZ2V0
KCk7IH0KKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhYnVmZmVyKCk7IH0K
IAotICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9
CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fYml0bWFwRGF0YS5n
ZXQoKTsgfQogCi0gICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9w
cmVtdWx0aXBseUFscGhhOyB9CisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VyaWFsaXphdGlvblN0YXRlLmNvbnRhaW5zKFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2lu
Q2xlYW4pOyB9CiAKKyAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRp
cGx5QWxwaGEpOyB9CiAgICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21pbmcg
ZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3JzCiAg
ICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxwaGFJ
bmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgogICAgIC8vIEltYWdlQml0bWFw
cyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhY2N1
cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQogICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBhbHBo
YSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAg
Ym9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNpYmx5
UHJlbXVsdGlwbHlBbHBoYTsgfQorICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlv
blN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEpOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IHRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKTsKKyAgICBPcHRpb25T
ZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQogCi0gICAgc3RhdGljIFZlY3RvcjxzdGQ6OnBhaXI8
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25T
dGF0ZT4+IGRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdlQnVmZmVyKCk7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1hZ2VPYnNlcnZlcjsKICAgICBmcmll
bmQgY2xhc3MgUGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1h
cD4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJik7Ci0gICAgSW1hZ2VCaXRt
YXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBJbWFnZUJpdG1hcChzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYsIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+
KTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxhbmtJbWFnZUJ1ZmZlcihib29sIG9y
aWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzQsMTAgKzEzOCw3IEBAIHByaXZhdGU6CiAg
ICAgc3RhdGljIHZvaWQgY3JlYXRlRnJvbUJ1ZmZlcihSZWY8QXJyYXlCdWZmZXI+JiYsIFN0cmlu
ZyBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgVVJMJiwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYsIE9wdGlvbmFsPEludFJlY3Q+LCBQcm9taXNlJiYpOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7Ci0gICAgYm9vbCBt
X2RldGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07Ci0g
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb3JjaWJs
eVByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9u
U3RhdGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDE4OWFjMTkyNTQ0ZGM5ZGViNmQ1MzY2M2M4Mjk0MGE2
MDEyNzMwMGMuLjJhNDcwMWFiOTU3YjZmNGQ3ZWE1M2Q2ODUyNGJlODNkMGI2Mzk4YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTI1MCwxMyArMjUwLDE2IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNm
ZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgSW1hZ2VCdWZm
ZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHRydWUsIGZhbHNlLCBmYWxzZSB9fSkgfTsKKyAgICAg
ICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCBJbWFnZUJpdG1hcDo6U2VyaWFs
aXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbikgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRh
a2VJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVy
biB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAotICAgICAgICByZXR1cm4g
eyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2Vy
aWFsaXphdGlvblN0YXRlIHsgb3JpZ2luQ2xlYW4oKSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAg
ICAgICBpZiAob3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoV1RGTW92ZShidWZmZXIpLCBJbWFnZUJpdG1hcDo6U2VyaWFsaXphdGlvblN0YXRl
OjpPcmlnaW5DbGVhbikgfTsKKworICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRl
KFdURk1vdmUoYnVmZmVyKSkgfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcAppbmRleCBiNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1
Li5kZTFmNzc0Njg2MTdjNzhkMDcwZjQ3NWQyYjI0YzRkODI0NmQ0ZWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYQogICAg
ICAgICBjYW52YXMoKS0+c2V0T3JpZ2luQ2xlYW4oKTsKICAgICBlbHNlCiAgICAgICAgIGNhbnZh
cygpLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgY2FudmFzKCktPnNldEltYWdlQnVmZmVyQW5k
TWFya0RpcnR5KGltYWdlQml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkpOworICAg
IGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+dGFrZUlt
YWdlQnVmZmVyKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1h
Z2VCaXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAppbmRleCBmYzlhMDM4MjFlZWExOTk3OTVlNDFhNGRmN2QxMTAxNDIwOTkzN2Q1Li5kMTQ2
NDkyYzRhOGRmOTM1Y2FmOTRiOWZiOTU1OTA5YWFkMWNiYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM4LDEyICszOCw2IEBAIGNs
YXNzIERyYXdpbmdDb250ZXh0OwogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IFNlcmlhbGl6YXRpb25TdGF0ZSB7Ci0gICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4geyBm
YWxzZSB9OwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgICAg
ICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgfTsKLQogICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgU2hvdWxkQWNjZWxlcmF0ZSwgU2hvdWxkVXNlRGlzcGxheUxp
c3QsIFJlbmRlcmluZ1B1cnBvc2UsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3Bh
Y2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBu
dWxscHRyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408961</attachid>
            <date>2020-09-16 16:38:52 -0700</date>
            <delta_ts>2020-09-16 18:09:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200916163851.patch</filename>
            <type>text/plain</type>
            <size>37527</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZmMzg2ZmY4ZWMxOWIz
MDQ5YjYxZGFlNjQ3YzBjZjQ4MTgzMDMxMy4uNzRmNGY5YjEyNjMzMjUxMjY4Y2RkYjNkZjQwZjEy
YWQ4Njc3ZTliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA5LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgbW92aW5nIFNl
cmlhbGl6YXRpb25TdGF0ZSB0byBJbWFnZUJpdG1hcCwgbWFraW5nIGl0IGFuIGVudW0gYW5kCisg
ICAgICAgIG1ha2luZyBJbWFnZUJ1ZmZlciBzdG9yZXMgYW4gT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4sIEkgcmVhbGl6ZWQKKyAgICAgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+PgorICAgICAgICBjYW4g
YmUgcmVwbGFjZWQgYnkgYSBuZXcgY2xhc3MgbmFtZWQgU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIu
IFRoaXMgY2xhc3MKKyAgICAgICAgd2lsbCBhbHNvIGJlIGEgc3VwZXJjbGFzcyBvZiBJbWFnZUJp
dG1hcC4gQWxsIHRoZSBvcGVyYXRpb25zIG9uIEltYWdlQnVmZmVyCisgICAgICAgIGFuZCBTZXJp
YWxpemF0aW9uU3RhdGUgd2lsbCBiZSBtb3ZlZCB0byBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci4g
SXQgd2lsbAorICAgICAgICBhbHNvIG93biB0aGUgZW51bSBTZXJpYWxpemF0aW9uU3RhdGUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdl
Qml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VC
aXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
Ojpjb21wdXRlTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogaHRtbC9JbWFnZUJpdG1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6
OkltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjp3aWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6aGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgICog
aHRtbC9JbWFnZUJpdG1hcC5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFw
KToKKyAgICAgICAgKiBodG1sL1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIGh0bWwvU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6aXNEZXRhY2hl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6YnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUltYWdlQnVmZmVyOjp0
YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZm
ZXI6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUlt
YWdlQnVmZmVyOjpwcmVtdWx0aXBseUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
cmlhbGl6YWJsZUltYWdlQnVmZmVyOjpmb3JjaWJseVByZW11bHRpcGx5QWxwaGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OnNlcmlhbGl6YXRpb25T
dGF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6c2V0T3V0cHV0Qml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0wOS0xNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIFBlcmlvZGljV2F2ZSBpbXByb3Zl
bWVudHMgZnJvbSBCbGluawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAxZGY1NDg1NWIwZGNkNGMyNmE0Zjc2
YjM1NDJmYTIxNDZjZmJhOWQ4Li4zYjgyNWIyYmQwZTI0YjIyMDg0YzAwNDNkYTNjNjU2NjE5MGUx
Y2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTIxMSw2ICsxMjExLDcgQEAgaHRtbC9SZXNldElucHV0
VHlwZS5jcHAKIGh0bWwvUnVieUVsZW1lbnQuY3BwCiBodG1sL1J1YnlUZXh0RWxlbWVudC5jcHAK
IGh0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAoraHRtbC9TZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5j
cHAKIGh0bWwvU3RlcFJhbmdlLmNwcAogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCiBodG1sL1Rl
bGVwaG9uZUlucHV0VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0YjUwOWJlZjQxMDIxNTQ3Mzk4M2IxNzIwYjY1ZDIy
ZDgzMmRlMGQ3Li4zNzViMzZkNGY0NTI4YTZiYzlkYzIzNDRhNGNkZmUxZGM4ZWNkMDczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMTYwLDYgKzIxNjAsNyBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhC
MDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0
NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0
IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogU2VyaWFsaXphYmxl
SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgz
RjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhU
QmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07
CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05ODg3LDYgKzk4ODgsOCBAQAogCQk3MUZGODUxODIyQTNGODFG
MDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9w
ZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1Zh
bHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFCNDk3MDI1MTJB
QzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJs
ZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWlu
TWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzExMyw2ICsyMzExNiw4IEBA
CiAJCQkJNTgyNEFCQTUxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovLAog
CQkJCUY1NUIzRDlEMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJbnB1dFR5cGUuY3BwICovLAog
CQkJCUY1NUIzRDlFMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJbnB1dFR5cGUuaCAqLywKKwkJ
CQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuY3Bw
ICovLAorCQkJCTcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBTZXJpYWxpemFibGVJbWFnZUJ1
ZmZlci5oICovLAogCQkJCUE1QUZCMzREMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3Bw
ICovLAogCQkJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLywKIAkJ
CQlGNTVCM0Q5RjEyNTFGMTJEMDAzRUYyNjkgLyogU3VibWl0SW5wdXRUeXBlLmNwcCAqLywKQEAg
LTMzNzE3LDYgKzMzNzIyLDcgQEAKIAkJCQk0MTUwNzE1ODE2ODUwNjczMDBDM0M3QjMgLyogU2Vs
ZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMTA3QkUyMThDQzE5REUwMENDMThF
OCAvKiBTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NTMyMkFD
MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY0RDQzRDY2MjE4ODAzOEIwMEVDRUNBQyAvKiBTZXJpYWxpemVkQXR0
YWNobWVudERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOERGMzM1MThBQUYxMkMwMDc3M0U1
OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc3QUYx
NDAxOEY0QUU0MDAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggNmVmNWExMzBmY2U1YThkNjMzOTgzZTc1ZGViNmJjYzg4ODRm
MGU4MS4uMDBjMDhlODNkZDFjYzZlZjBmNjExYjk0NzNhOWJkZDEwZDVlZGY5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CkBAIC0xMDQzLDkgKzEwNDMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgd3Jp
dGUoSW1hZ2VCaXRtYXBUYWcpOwotICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90Pihp
bWFnZUJpdG1hcC5vcmlnaW5DbGVhbigpKSk7Ci0gICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGltYWdlQml0bWFwLnByZW11bHRpcGx5QWxwaGEoKSkpOwotICAgICAgICB3cml0ZShz
dGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEo
KSkpOworICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5zZXJp
YWxpemF0aW9uU3RhdGUoKS50b1JhdygpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGxvZ2ljYWxTaXplLndpZHRoKCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8
aW50MzJfdD4obG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nh
c3Q8ZG91YmxlPihidWZmZXItPnJlc29sdXRpb25TY2FsZSgpKSk7CkBAIC0xOTMxLDcgKzE5Mjks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogCi0gICAgc3RhdGljIERl
c2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+
JiYgaW1hZ2VCdWZmZXJzCisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlh
bGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdl
UG9ydHMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcnMKICNp
ZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
CiAjZW5kaWYKQEAgLTE5OTYsNyArMTk5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwogICAgIH07CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4m
JiBpbWFnZUJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCisgICAgQ2xvbmVE
ZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYg
bWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVu
dHMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcnMsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+
JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsgfQogI2VuZGlmCkBAIC0yMDI4LDcgKzIw
MjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAg
ICB9CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSog
YXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQ
YXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3Rk
OjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxp
emF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZl
cnMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNh
bnZhc2VzCiAjZW5kaWYKQEAgLTI4ODksNyArMjg4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1faW1hZ2VCaXRtYXBzW2luZGV4XSkKLSAgICAgICAgICAgIG1faW1h
Z2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVm
ZmVycy5hdChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IElt
YWdlQml0bWFwOjpjcmVhdGUobV9pbWFnZUJ1ZmZlcnMuYXQoaW5kZXgpLnRha2VJbWFnZUJ1ZmZl
cigpLCBtX2ltYWdlQnVmZmVycy5hdChpbmRleCkuc2VyaWFsaXphdGlvblN0YXRlKCkpOwogCiAg
ICAgICAgIGF1dG8gYml0bWFwID0gbV9pbWFnZUJpdG1hcHNbaW5kZXhdLmdldCgpOwogICAgICAg
ICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpAQCAtMjk2MiwxNSArMjk2MCwxMyBAQCBwcml2
YXRlOgogCiAgICAgSlNWYWx1ZSByZWFkSW1hZ2VCaXRtYXAoKQogICAgIHsKLSAgICAgICAgdWlu
dDhfdCBvcmlnaW5DbGVhbjsKLSAgICAgICAgdWludDhfdCBwcmVtdWx0aXBseUFscGhhOwotICAg
ICAgICB1aW50OF90IGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgdWludDhfdCBz
ZXJpYWxpemF0aW9uU3RhdGU7CiAgICAgICAgIGludDMyX3QgbG9naWNhbFdpZHRoOwogICAgICAg
ICBpbnQzMl90IGxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIGRvdWJsZSByZXNvbHV0aW9uU2NhbGU7
CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXI7CiAKLSAgICAgICAgaWYg
KCFyZWFkKG9yaWdpbkNsZWFuKSB8fCAhcmVhZChwcmVtdWx0aXBseUFscGhhKSB8fCAhcmVhZChm
b3JjaWJseVByZW11bHRpcGx5QWxwaGEpIHx8ICFyZWFkKGxvZ2ljYWxXaWR0aCkgfHwgIXJlYWQo
bG9naWNhbEhlaWdodCkgfHwgIXJlYWQocmVzb2x1dGlvblNjYWxlKSB8fCAhcmVhZEFycmF5QnVm
ZmVyKGFycmF5QnVmZmVyKSkgeworICAgICAgICBpZiAoIXJlYWQoc2VyaWFsaXphdGlvblN0YXRl
KSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8ICFyZWFk
KHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikpIHsKICAg
ICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
IH0KQEAgLTI5OTksNyArMjk5NSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgYnVmZmVyLT5wdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0
YSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAotICAgICAgICBhdXRvIGJp
dG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIEltYWdlQnVmZmVy
OjpTZXJpYWxpemF0aW9uU3RhdGUgeyBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbiksIHN0
YXRpY19jYXN0PGJvb2w+KHByZW11bHRpcGx5QWxwaGEpLCBzdGF0aWNfY2FzdDxib29sPihmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGEpIH19KTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PEltYWdlQml0bWFwOjpTZXJp
YWxpemF0aW9uU3RhdGU+Ojpmcm9tUmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogICAgICAgICBy
ZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwogICAgIH0KIApAQCAtMzQzNCw3ICszNDMwLDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOwogICAgIFZlY3RvcjxTdHJp
bmc+IG1fYmxvYkZpbGVQYXRoczsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIG1fc2hh
cmVkQnVmZmVyczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBtX2ltYWdlQnVmZmVyczsK
KyAgICBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJzOwogICAg
IFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBtX2ltYWdlQml0bWFwczsKICNpZiBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwpAQCAtMzY1OCw3ICsz
NjU0LDcgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBzdGQ6OnVuaXEKICAgICBtX21lbW9yeUNvc3QgPSBjb21w
dXRlTWVtb3J5Q29zdCgpOwogfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gYXJy
YXlCdWZmZXJDb250ZW50c0FycmF5LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5LCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+
PiYmIGltYWdlQnVmZmVycworU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxv
YlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVm
ZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVm
ZmVyPiYmIGltYWdlQnVmZmVycwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAg
ICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiYmIGRl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMzY5OSw5ICszNjk1LDkgQEAgc2l6
ZV90IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QoKSBjb25zdAogICAg
ICAgICAgICAgY29zdCArPSBjb250ZW50LnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiBwYWlyIDogbV9pbWFnZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3Qp
Ci0gICAgICAgICAgICBjb3N0ICs9IHBhaXIuZmlyc3QtPm1lbW9yeUNvc3QoKTsKKyAgICBmb3Ig
KGF1dG8mIGltYWdlQnVmZmVyIDogbV9pbWFnZUJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKGltYWdl
QnVmZmVyLmJ1ZmZlcigpKQorICAgICAgICAgICAgY29zdCArPSBpbWFnZUJ1ZmZlci5idWZmZXIo
KS0+bWVtb3J5Q29zdCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAppbmRleCAyMGE5N2I2YmU1NzNlYzE0NTU0MjM4NDAzMjk4NTI2YWNlNzVhZTdhLi5lMGFiOWMz
M2E5NzlmZGUzOWQzYjJmOTNkMmRmNDU0Y2Y5YWE2ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtNTMsNiArNTMsNyBA
QCBjbGFzcyBEZXRhY2hlZE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3Mg
SW1hZ2VCaXRtYXA7CiBjbGFzcyBNZXNzYWdlUG9ydDsKK2NsYXNzIFNlcmlhbGl6YWJsZUltYWdl
QnVmZmVyOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZTsKIApAQCAtMTE3LDcgKzExOCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV0VC
Q09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2ln
bmVkIGNoYXI+JiYsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KTsK
LSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRC
dWZmZXJzLCBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXJzCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7IH0KICNlbmRpZgpAQCAtMTMxLDcg
KzEzMiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX2FycmF5QnVmZmVy
Q29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gbV9kZXRhY2hlZE9m
ZnNjcmVlbkNhbnZhc2VzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmlu
ZGV4IGEwNGRjMDk5NmIwNWY0MjIwZjc5MTgwZGU3ZWZlMDgxNWNhN2U4MDAuLjgyNTZjMTFjYTg3
YzZhNDZlZjE4MDNmZTBmZWY5ZDQ0OTUxYjc1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwCkBAIC03MiwxOCArNzIsOSBAQCBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpj
cmVhdGUoSW50U2l6ZSBzaXplKQogICAgIHJldHVybiBjcmVhdGUoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSwgYnVmZmVyUmVuZGVyaW5n
TW9kZSkpOwogfQogCi1SZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+JiYgYnVmZmVyKQorUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIsIE9wdGlvblNldDxTZXJpYWxp
emF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSkKIHsKLSAgICBhdXRvIGltYWdlQml0bWFw
ID0gY3JlYXRlKFdURk1vdmUoYnVmZmVyLmZpcnN0KSk7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3Jp
Z2luQ2xlYW4gPSBidWZmZXIuc2Vjb25kLm9yaWdpbkNsZWFuOwotICAgIGltYWdlQml0bWFwLT5t
X3ByZW11bHRpcGx5QWxwaGEgPSBidWZmZXIuc2Vjb25kLnByZW11bHRpcGx5QWxwaGE7Ci0gICAg
aW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5m
b3JjaWJseVByZW11bHRpcGx5QWxwaGE7Ci0gICAgcmV0dXJuIGltYWdlQml0bWFwOwotfQotCi1S
ZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1h
cChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1h
cChXVEZNb3ZlKGJ1ZmZlciksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogfQogCiB2b2lkIEltYWdl
Qml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0
aW9ucyYmIG9wdGlvbnMsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkKQEAgLTk1LDE1
ICs4NiwxNCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgKTsKIH0KIAotVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJ
bWFnZUJpdG1hcD4+JiYgYml0bWFwcykKK1ZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4g
SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYg
Yml0bWFwcykKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBidWZmZXJzOworICAgIFZl
Y3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4gYnVmZmVyczsKICAgICBmb3IgKGF1dG8mIGJp
dG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGJp
dG1hcC0+dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXph
dGlvblN0YXRlIHsgYml0bWFwLT5vcmlnaW5DbGVhbigpLCBiaXRtYXAtPnByZW11bHRpcGx5QWxw
aGEoKSwgYml0bWFwLT5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSB9KSk7CisgICAgICAgIGJ1
ZmZlcnMuYXBwZW5kKHsgYml0bWFwLT50YWtlSW1hZ2VCdWZmZXIoKSwgYml0bWFwLT5zZXJpYWxp
emF0aW9uU3RhdGUoKSB9KTsKICAgICByZXR1cm4gYnVmZmVyczsKIH0KIAotCiB2b2lkIEltYWdl
Qml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0
aW9ucyYmIG9wdGlvbnMsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRt
YXA6OlByb21pc2UmJiBwcm9taXNlKQogewogICAgIC8vIDEuIElmIGVpdGhlciB0aGUgc3cgb3Ig
c2ggYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQgYnV0IHplcm8sIHJldHVybiBhIHByb21pc2UKQEAg
LTI0OSw3ICsyMzksNyBAQCB2b2lkIEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VC
dWZmZXIoYm9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIDkuIElmIHRo
ZSBvcmlnaW4gb2YgaW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBv
cmlnaW4gc3BlY2lmaWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwg
dGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3Qn
cwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5D
bGVhbiA9IG9yaWdpbkNsZWFuOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0
ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgb3JpZ2luQ2xlYW4pOwogCiAg
ICAgLy8gMTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVz
ZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRo
IHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTM4MCw5ICszNzAs
OSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudAogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9i
amVjdCwgdGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBv
YmplY3QncwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KIAotICAgIGltYWdlQml0bWFwLT5t
X29yaWdpbkNsZWFuID0gIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpOworICAgIGltYWdlQml0
bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5D
bGVhbiwgIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKTsKIAotICAgIGltYWdlQml0bWFwLT5t
X3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5
QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUu
c2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQcmVtdWx0aXBs
aWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8vIDEwLiBSZXR1
cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFy
YWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3IEltYWdl
Qml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC00NDUsOSArNDM1LDkgQEAgdm9pZCBJbWFn
ZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgQ2FudmFzQmFz
ZSYgY2FudmFzLCBJbWEKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRo
ZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUgdmFsdWUgYXMKICAgICAv
LyAgICB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGNhbnZhcyBlbGVtZW50J3MgYml0bWFw
LgogCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBjYW52YXMub3JpZ2luQ2xlYW4o
KTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRp
b25TdGF0ZTo6T3JpZ2luQ2xlYW4sIGNhbnZhcy5vcmlnaW5DbGVhbigpKTsKIAotICAgIGltYWdl
Qml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclBy
ZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0
aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFs
cGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8v
IDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVw
cyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTIwLDkgKzUxMCw5IEBAIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwKICAgICAvLyA2LjMuIElmIHRoZSBvcmlnaW4gb2YgaW1hZ2Un
cyB2aWRlbyBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBlbnRyeQogICAgIC8vICAgICAgc2V0dGlu
Z3Mgb2JqZWN0J3Mgb3JpZ2luLCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YKICAg
ICAvLyAgICAgIGltYWdlJ3MgYml0bWFwIHRvIGZhbHNlLgotICAgIGltYWdlQml0bWFwLT5tX29y
aWdpbkNsZWFuID0gIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5
T3JpZ2luKCksICp2aWRlbyk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRl
LnNldChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuLCAhdGFpbnRzT3JpZ2luKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKSk7CiAKLSAgICBpbWFn
ZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQ
cmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXph
dGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhh
UHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlB
bHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAv
LyA2LjQuMS4gUmVzb2x2ZSBwIHdpdGggaW1hZ2VCaXRtYXAuCiAgICAgcHJvbWlzZS5yZXNvbHZl
KFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKQEAgLTU3MSwxNSArNTYxLDE1IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZlB0cjxJbWFn
ZUJpdG1hcD4mIGV4CiAKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRo
ZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUKICAgICAvLyAgICB2YWx1
ZSBhcyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGJpdG1hcCBvZiB0aGUgaW1hZ2UgYXJn
dW1lbnQuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBleGlzdGluZ0ltYWdlQml0
bWFwLT5vcmlnaW5DbGVhbigpOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0
ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgZXhpc3RpbmdJbWFnZUJpdG1h
cC0+b3JpZ2luQ2xlYW4oKSk7CiAKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhh
ID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJl
bXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9u
U3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0
aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgQ29yZSBHcmFw
aGljcyBiYWNrZW5kLCB3aGVuIGNyZWF0aW5nIGFuIEltYWdlQml0bWFwIGZyb20KICAgICAvLyBh
biBJbWFnZUJpdG1hcCwgdGhlIGFscGhhIGNoYW5uZWwgb2YgYml0bWFwRGF0YSBpc24ndCBwcmVt
dWx0aXBsaWVkIGV2ZW4KICAgICAvLyB0aG91Z2ggdGhlIGFscGhhIG1vZGUgb2YgdGhlIGludGVy
bmFsIHN1cmZhY2UgY2xhaW1zIGl0IGlzLiBJbnN0cnVjdAogICAgIC8vIHVzZXJzIG9mIHRoaXMg
SW1hZ2VCaXRtYXAgdG8gaWdub3JlIHRoZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4K
LSAgICBpbWFnZUJpdG1hcC0+bV9mb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSBpbWFnZUJpdG1h
cC0+bV9wcmVtdWx0aXBseUFscGhhOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25T
dGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEsIGlt
YWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3Rh
dGU6OlByZW11bHRpcGx5QWxwaGEpKTsKIAogICAgIC8vIDYuIFJldHVybiBhIG5ldyBwcm9taXNl
LCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyA3
LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QgYXMg
dGhlIHZhbHVlLgpAQCAtNzU0LDcgKzc0NCw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZUZy
b21CdWZmZXIoCiAKICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFw
RGF0YSkpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVBy
ZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxw
aGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGltYWdl
Qml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVt
dWx0aXBseUFscGhhLCBhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShv
cHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogCiAgICAgcHJvbWlzZS5yZXNvbHZlKFdURk1vdmUoaW1hZ2VCaXRtYXApKTsK
IH0KQEAgLTgxOCw4ICs4MDgsOCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8SW1hZ2VEYXRhPiYgaW1hZwogICAgIHByb21p
c2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUltYWdlQml0bWFwOjpJbWFn
ZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQotICAgIDogbV9i
aXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkKK0ltYWdlQml0bWFwOjpJbWFnZUJpdG1hcChzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlv
blN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBTZXJpYWxpemFibGVJbWFnZUJ1ZmZl
cihXVEZNb3ZlKGJ1ZmZlciksIHNlcmlhbGl6YXRpb25TdGF0ZSkKIHsKICAgICBBU1NFUlQobV9i
aXRtYXBEYXRhKTsKIH0KQEAgLTgyOCw3ICs4MTgsNyBAQCBJbWFnZUJpdG1hcDo6fkltYWdlQml0
bWFwKCkgPSBkZWZhdWx0OwogCiB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6d2lkdGgoKSBjb25zdAog
ewotICAgIGlmIChtX2RldGFjaGVkIHx8ICFtX2JpdG1hcERhdGEpCisgICAgaWYgKCFtX2JpdG1h
cERhdGEpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJp
Z2h0IHdpZHRoPwpAQCAtODM3LDcgKzgyNyw3IEBAIHVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0
aCgpIGNvbnN0CiAKIHVuc2lnbmVkIEltYWdlQml0bWFwOjpoZWlnaHQoKSBjb25zdAogewotICAg
IGlmIChtX2RldGFjaGVkIHx8ICFtX2JpdG1hcERhdGEpCisgICAgaWYgKCFtX2JpdG1hcERhdGEp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IGhl
aWdodD8KQEAgLTg0NiwxNCArODM2LDcgQEAgdW5zaWduZWQgSW1hZ2VCaXRtYXA6OmhlaWdodCgp
IGNvbnN0CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNsb3NlKCkKIHsKLSAgICBtX2RldGFjaGVkID0g
dHJ1ZTsKICAgICBtX2JpdG1hcERhdGEgPSBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQml0bWFwOjp0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkKLXsK
LSAgICBtX2RldGFjaGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gV1RGTW92ZShtX2JpdG1hcERhdGEp
OwotfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKaW5kZXggYmYwZGQ1ZTFkNzQ5MjE5
NGUyN2M2YzI3ZDc4NmFhMWIzMjJhOWRkOS4uMzQxM2U0NjMxNDU5YjZkZjg3NDQxOTg5YzlmYmM1
NDI2NTBjNTNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaApAQCAtMjYsOCArMjYsOCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IEltYWdlQml0bWFwT3B0aW9uczsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVkOwog
Ci1jbGFzcyBJbWFnZUJpdG1hcCBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBSZWZDb3VudGVkPEltYWdlQml0bWFwPiB7CitjbGFzcyBJbWFnZUJpdG1hcCBmaW5hbCA6IHB1
YmxpYyBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlciwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVi
bGljIFJlZkNvdW50ZWQ8SW1hZ2VCaXRtYXA+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQml0bWFwKTsKIHB1YmxpYzoKICAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PApAQCAt
ODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgU291cmNlJiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBpbnQg
c3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIFByb21pc2UmJik7CiAKICAgICBzdGF0aWMgUmVm
PEltYWdlQml0bWFwPiBjcmVhdGUoSW50U2l6ZSk7Ci0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1h
cD4gY3JlYXRlKHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPiYmKTsKKyAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFw
PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmLCBPcHRpb25TZXQ8U2VyaWFs
aXphdGlvblN0YXRlPiA9IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwogCiAgICAg
fkltYWdlQml0bWFwKCk7CiAKQEAgLTkxLDMwICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgaGVpZ2h0KCkgY29uc3Q7CiAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgYm9vbCBpc0RldGFj
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhY2hlZDsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIGJ1
ZmZlcigpIHsgcmV0dXJuIG1fYml0bWFwRGF0YS5nZXQoKTsgfQotCi0gICAgYm9vbCBvcmlnaW5D
bGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KLQotICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAg
Ly8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21pbmcgZnJvbSBhbiBJbWFnZUJpdG1h
cCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3JzCi0gICAgLy8gdGhlIGFscGhhIG1v
ZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxwaGFJbmZvIGluIHRoZSBDb3JlIEdy
YXBoaWNzIGJhY2tlbmQuIEZvcgotICAgIC8vIEltYWdlQml0bWFwcyBjcmVhdGVkIGZyb20gSW1h
Z2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhY2N1cmF0ZSwgYW5kIGNhbGxlcnMg
bXVzdCBiZQotICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBhbHBoYSBtb2RlLCBhbmQgZm9yY2li
bHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgYm9vbCBmb3JjaWJseVByZW11
bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsg
fQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0cmFuc2Zlck93bmVyc2hpcEFu
ZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gZGV0YWNoQml0
bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CisgICAgc3RhdGljIFZlY3RvcjxT
ZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1h
Z2VPYnNlcnZlcjsKICAgICBmcmllbmQgY2xhc3MgUGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAg
c3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJik7Ci0gICAgSW1hZ2VCaXRtYXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsK
KyAgICBJbWFnZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYsIE9wdGlvblNl
dDxTZXJpYWxpemF0aW9uU3RhdGU+KTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxh
bmtJbWFnZUJ1ZmZlcihib29sIG9yaWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzIsMTIg
KzExNSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlRGF0YT4mLCBJbWFnZUJpdG1hcE9wdGlvbnMm
JiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRl
UHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPFR5cGVkT01DU1NJbWFnZVZh
bHVlPiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBPcHRpb25hbDxJbnRSZWN0PiwgUHJvbWlzZSYm
KTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVGcm9tQnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwg
U3RyaW5nIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBV
UkwmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBi
b29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUg
fTsKLSAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Zv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMTg5YWMxOTI1NDRkYzlkZWI2ZDUzNjYzYzgy
OTQwYTYwMTI3MzAwYy4uZTgzYzhmZTRmZTRmYWIxMGI5ZWVjZjViOGI2ZjAzMjRkZGQ2MmUyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMjUwLDEzICsyNTAs
MTMgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0
cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdl
Qml0bWFwPiB7IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVhdGVkSW1hZ2VC
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCBJbWFn
ZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsgdHJ1ZSwgZmFsc2UsIGZhbHNlIH19KSB9Owor
ICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIH07CiAKICAgICAgICAg
YXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAK
LSAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwg
SW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IG9yaWdpbkNsZWFuKCksIGZhbHNlLCBm
YWxzZSB9fSkgfTsKKyAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZShXVEZNb3Zl
KGJ1ZmZlciksIG9yaWdpbkNsZWFuKCkgPyBJbWFnZUJpdG1hcDo6U2VyaWFsaXphdGlvblN0YXRl
OjpPcmlnaW5DbGVhbiA6IEltYWdlQml0bWFwOjpTZXJpYWxpemF0aW9uU3RhdGUoKSkgfTsKICAg
ICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlMDUyMDA1NzY4YzdjNzA1MWMyN2My
MDczOThiYzU5ZWEzMjkyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
LmgiCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0
YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBtX2JpdG1hcERhdGEoV1RGTW92ZShidWZm
ZXIpKQorICAgICwgbV9zZXJpYWxpemF0aW9uU3RhdGUoc2VyaWFsaXphdGlvblN0YXRlKQorewor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1Nlcmlh
bGl6YWJsZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM3OGFiMzVhYjk5MTNiOTNhZDk5MDNm
OTA4ZDg4MjlkMDY3ZWYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CisKK2NsYXNzIFNlcmlhbGl6YWJsZUltYWdl
QnVmZmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFNlcmlhbGl6YXRpb25TdGF0ZSA6IHVp
bnQ4X3QgeworICAgICAgICBPcmlnaW5DbGVhbiAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAg
ICAgIFByZW11bHRpcGx5QWxwaGEgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgRm9yY2libHlQ
cmVtdWx0aXBseUFscGhhID0gMSA8PCAyCisgICAgfTsKKworICAgIFNlcmlhbGl6YWJsZUltYWdl
QnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6
YXRpb25TdGF0ZT4pOworCisgICAgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIWJ1
ZmZlcigpOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9i
aXRtYXBEYXRhLmdldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0YWtl
SW1hZ2VCdWZmZXIoKSB7IHJldHVybiBXVEZNb3ZlKG1fYml0bWFwRGF0YSk7IH0KKworICAgIGJv
b2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZS5jb250
YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsgfQorCisgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFp
bnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsgfQorICAgIC8vIFdoZW4g
V2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VCaXRtYXAncyBJbWFn
ZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8vIHRoZSBhbHBoYSBtb2RlIG9mIHRo
YXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29yZSBHcmFwaGljcyBi
YWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9tIEltYWdlQml0bWFw
cywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxsZXJzIG11c3QgYmUK
KyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZvcmNpYmx5IHByZW11
bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFs
aXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEpOyB9CisKKyAgICBPcHRpb25T
ZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4gbV9zZXJpYWxpemF0aW9uU3RhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBiNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1
Yzk0NGRkNzNlMGE1Li5kZTFmNzc0Njg2MTdjNzhkMDcwZjQ3NWQyYjI0YzRkODI0NmQ0ZWE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1h
Z2VCaXRtYQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luQ2xlYW4oKTsKICAgICBlbHNlCiAg
ICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgY2FudmFzKCktPnNldElt
YWdlQnVmZmVyQW5kTWFya0RpcnR5KGltYWdlQml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENs
b3NlKCkpOworICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJp
dG1hcC0+dGFrZUltYWdlQnVmZmVyKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKFJlZlB0cjxJbWFn
ZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCBmYzlhMDM4MjFlZWExOTk3OTVlNDFhNGRmN2QxMTAxNDIw
OTkzN2Q1Li5kMTQ2NDkyYzRhOGRmOTM1Y2FmOTRiOWZiOTU1OTA5YWFkMWNiYWYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM4LDEy
ICszOCw2IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0OwogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7CiBw
dWJsaWM6Ci0gICAgc3RydWN0IFNlcmlhbGl6YXRpb25TdGF0ZSB7Ci0gICAgICAgIGJvb2wgb3Jp
Z2luQ2xlYW4geyBmYWxzZSB9OwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgeyBmYWxz
ZSB9OwotICAgICAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0g
ICAgfTsKLQogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24g
ZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgU2hvdWxkQWNjZWxlcmF0ZSwgU2hvdWxk
VXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2UsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51
bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9z
dFdpbmRvdyogPSBudWxscHRyKTsK
</data>
<flag name="commit-queue"
          id="424533"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408969</attachid>
            <date>2020-09-16 17:39:54 -0700</date>
            <delta_ts>2020-09-16 18:48:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200916173953.patch</filename>
            <type>text/plain</type>
            <size>37610</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZmMzg2ZmY4ZWMxOWIz
MDQ5YjYxZGFlNjQ3YzBjZjQ4MTgzMDMxMy4uOTYxZGEwNDE3MjA1N2FhODk3YmU5ODM0N2RlNmY0
ZWFlNjY3NjNmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA5LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgbW92aW5nIFNl
cmlhbGl6YXRpb25TdGF0ZSB0byBJbWFnZUJpdG1hcCwgbWFraW5nIGl0IGFuIGVudW0gYW5kCisg
ICAgICAgIG1ha2luZyBJbWFnZUJ1ZmZlciBzdG9yZXMgYW4gT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4sIEkgcmVhbGl6ZWQKKyAgICAgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+PgorICAgICAgICBjYW4g
YmUgcmVwbGFjZWQgYnkgYSBuZXcgY2xhc3MgbmFtZWQgU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIu
IFRoaXMgY2xhc3MKKyAgICAgICAgd2lsbCBhbHNvIGJlIGEgc3VwZXJjbGFzcyBvZiBJbWFnZUJp
dG1hcC4gQWxsIHRoZSBvcGVyYXRpb25zIG9uIEltYWdlQnVmZmVyCisgICAgICAgIGFuZCBTZXJp
YWxpemF0aW9uU3RhdGUgd2lsbCBiZSBtb3ZlZCB0byBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci4g
SXQgd2lsbAorICAgICAgICBhbHNvIG93biB0aGUgZW51bSBTZXJpYWxpemF0aW9uU3RhdGUuCisK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFw
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdl
Qml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VC
aXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxp
emVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
Ojpjb21wdXRlTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgICogaHRtbC9JbWFnZUJpdG1hcC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6
OkltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjp3aWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6aGVpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSk6IERlbGV0ZWQuCisgICAgICAgICog
aHRtbC9JbWFnZUJpdG1hcC5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFw
KToKKyAgICAgICAgKiBodG1sL1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OnRh
a2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9TZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUltYWdlQnVmZmVyOjppc0Rl
dGFjaGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
OjpidWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZm
ZXI6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUlt
YWdlQnVmZmVyOjpwcmVtdWx0aXBseUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNl
cmlhbGl6YWJsZUltYWdlQnVmZmVyOjpmb3JjaWJseVByZW11bHRpcGx5QWxwaGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OnNlcmlhbGl6YXRpb25T
dGF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6c2V0T3V0cHV0Qml0bWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoKTogRGVsZXRlZC4KKwogMjAyMC0wOS0xNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIFBlcmlvZGljV2F2ZSBpbXByb3Zl
bWVudHMgZnJvbSBCbGluawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAxZGY1NDg1NWIwZGNkNGMyNmE0Zjc2
YjM1NDJmYTIxNDZjZmJhOWQ4Li4zYjgyNWIyYmQwZTI0YjIyMDg0YzAwNDNkYTNjNjU2NjE5MGUx
Y2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTIxMSw2ICsxMjExLDcgQEAgaHRtbC9SZXNldElucHV0
VHlwZS5jcHAKIGh0bWwvUnVieUVsZW1lbnQuY3BwCiBodG1sL1J1YnlUZXh0RWxlbWVudC5jcHAK
IGh0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAoraHRtbC9TZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5j
cHAKIGh0bWwvU3RlcFJhbmdlLmNwcAogaHRtbC9TdWJtaXRJbnB1dFR5cGUuY3BwCiBodG1sL1Rl
bGVwaG9uZUlucHV0VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0YjUwOWJlZjQxMDIxNTQ3Mzk4M2IxNzIwYjY1ZDIy
ZDgzMmRlMGQ3Li4zNzViMzZkNGY0NTI4YTZiYzlkYzIzNDRhNGNkZmUxZGM4ZWNkMDczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0yMTYwLDYgKzIxNjAsNyBAQAogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhC
MDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0
NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0
IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogU2VyaWFsaXphYmxl
SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgz
RjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhU
QmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07
CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05ODg3LDYgKzk4ODgsOCBAQAogCQk3MUZGODUxODIyQTNGODFG
MDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9w
ZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1Zh
bHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFCNDk3MDI1MTJB
QzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIyQTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJs
ZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWlu
TWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzExMyw2ICsyMzExNiw4IEBA
CiAJCQkJNTgyNEFCQTUxQUU4MTM4NDAwOTA3NEI3IC8qIFJ1YnlUZXh0RWxlbWVudC5oICovLAog
CQkJCUY1NUIzRDlEMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJbnB1dFR5cGUuY3BwICovLAog
CQkJCUY1NUIzRDlFMTI1MUYxMkQwMDNFRjI2OSAvKiBTZWFyY2hJbnB1dFR5cGUuaCAqLywKKwkJ
CQk3MjFCNDk2RjI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuY3Bw
ICovLAorCQkJCTcyMUI0OTcwMjUxMkFDMDQwMEZFOUQzQiAvKiBTZXJpYWxpemFibGVJbWFnZUJ1
ZmZlci5oICovLAogCQkJCUE1QUZCMzREMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuY3Bw
ICovLAogCQkJCUE1QUZCMzRFMTE1MTUxQTcwMEIwNDVDQiAvKiBTdGVwUmFuZ2UuaCAqLywKIAkJ
CQlGNTVCM0Q5RjEyNTFGMTJEMDAzRUYyNjkgLyogU3VibWl0SW5wdXRUeXBlLmNwcCAqLywKQEAg
LTMzNzE3LDYgKzMzNzIyLDcgQEAKIAkJCQk0MTUwNzE1ODE2ODUwNjczMDBDM0M3QjMgLyogU2Vs
ZWN0b3JGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzMTA3QkUyMThDQzE5REUwMENDMThF
OCAvKiBTZWxlY3RvclBzZXVkb1R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NTMyMkFD
MTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjFCNDk3NDI1MTJCQTNCMDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUY0RDQzRDY2MjE4ODAzOEIwMEVDRUNBQyAvKiBTZXJpYWxpemVkQXR0
YWNobWVudERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOERGMzM1MThBQUYxMkMwMDc3M0U1
OSAvKiBTZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc3QUYx
NDAxOEY0QUU0MDAwMDFFRDYxIC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggNmVmNWExMzBmY2U1YThkNjMzOTgzZTc1ZGViNmJjYzg4ODRm
MGU4MS4uMDBjMDhlODNkZDFjYzZlZjBmNjExYjk0NzNhOWJkZDEwZDVlZGY5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CkBAIC0xMDQzLDkgKzEwNDMsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgd3Jp
dGUoSW1hZ2VCaXRtYXBUYWcpOwotICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90Pihp
bWFnZUJpdG1hcC5vcmlnaW5DbGVhbigpKSk7Ci0gICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGltYWdlQml0bWFwLnByZW11bHRpcGx5QWxwaGEoKSkpOwotICAgICAgICB3cml0ZShz
dGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEo
KSkpOworICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5zZXJp
YWxpemF0aW9uU3RhdGUoKS50b1JhdygpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGxvZ2ljYWxTaXplLndpZHRoKCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8
aW50MzJfdD4obG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgd3JpdGUoc3RhdGljX2Nh
c3Q8ZG91YmxlPihidWZmZXItPnJlc29sdXRpb25TY2FsZSgpKSk7CkBAIC0xOTMxLDcgKzE5Mjks
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogCi0gICAgc3RhdGljIERl
c2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+
JiYgaW1hZ2VCdWZmZXJzCisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlh
bGl6ZShKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdl
UG9ydHMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcnMKICNp
ZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
CiAjZW5kaWYKQEAgLTE5OTYsNyArMTk5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwogICAgIH07CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4m
JiBpbWFnZUJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCisgICAgQ2xvbmVE
ZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYg
bWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVu
dHMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZlcnMsIGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+
JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsgfQogI2VuZGlmCkBAIC0yMDI4LDcgKzIw
MjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAg
ICB9CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSog
YXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQ
YXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3Rk
OjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxp
emF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4mJiBpbWFnZUJ1ZmZl
cnMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNh
bnZhc2VzCiAjZW5kaWYKQEAgLTI4ODksNyArMjg4Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoIW1faW1hZ2VCaXRtYXBzW2luZGV4XSkKLSAgICAgICAgICAgIG1faW1h
Z2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVm
ZmVycy5hdChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IElt
YWdlQml0bWFwOjpjcmVhdGUobV9pbWFnZUJ1ZmZlcnMuYXQoaW5kZXgpLnRha2VJbWFnZUJ1ZmZl
cigpLCBtX2ltYWdlQnVmZmVycy5hdChpbmRleCkuc2VyaWFsaXphdGlvblN0YXRlKCkpOwogCiAg
ICAgICAgIGF1dG8gYml0bWFwID0gbV9pbWFnZUJpdG1hcHNbaW5kZXhdLmdldCgpOwogICAgICAg
ICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpAQCAtMjk2MiwxNSArMjk2MCwxMyBAQCBwcml2
YXRlOgogCiAgICAgSlNWYWx1ZSByZWFkSW1hZ2VCaXRtYXAoKQogICAgIHsKLSAgICAgICAgdWlu
dDhfdCBvcmlnaW5DbGVhbjsKLSAgICAgICAgdWludDhfdCBwcmVtdWx0aXBseUFscGhhOwotICAg
ICAgICB1aW50OF90IGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgdWludDhfdCBz
ZXJpYWxpemF0aW9uU3RhdGU7CiAgICAgICAgIGludDMyX3QgbG9naWNhbFdpZHRoOwogICAgICAg
ICBpbnQzMl90IGxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIGRvdWJsZSByZXNvbHV0aW9uU2NhbGU7
CiAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXI7CiAKLSAgICAgICAgaWYg
KCFyZWFkKG9yaWdpbkNsZWFuKSB8fCAhcmVhZChwcmVtdWx0aXBseUFscGhhKSB8fCAhcmVhZChm
b3JjaWJseVByZW11bHRpcGx5QWxwaGEpIHx8ICFyZWFkKGxvZ2ljYWxXaWR0aCkgfHwgIXJlYWQo
bG9naWNhbEhlaWdodCkgfHwgIXJlYWQocmVzb2x1dGlvblNjYWxlKSB8fCAhcmVhZEFycmF5QnVm
ZmVyKGFycmF5QnVmZmVyKSkgeworICAgICAgICBpZiAoIXJlYWQoc2VyaWFsaXphdGlvblN0YXRl
KSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8ICFyZWFk
KHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikpIHsKICAg
ICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
IH0KQEAgLTI5OTksNyArMjk5NSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgYnVmZmVyLT5wdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0
YSwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKIAotICAgICAgICBhdXRvIGJp
dG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIEltYWdlQnVmZmVy
OjpTZXJpYWxpemF0aW9uU3RhdGUgeyBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbiksIHN0
YXRpY19jYXN0PGJvb2w+KHByZW11bHRpcGx5QWxwaGEpLCBzdGF0aWNfY2FzdDxib29sPihmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGEpIH19KTsKKyAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKFdURk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PEltYWdlQml0bWFwOjpTZXJp
YWxpemF0aW9uU3RhdGU+Ojpmcm9tUmF3KHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogICAgICAgICBy
ZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwogICAgIH0KIApAQCAtMzQzNCw3ICszNDMwLDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JVUkxzOwogICAgIFZlY3RvcjxTdHJp
bmc+IG1fYmxvYkZpbGVQYXRoczsKICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIG1fc2hh
cmVkQnVmZmVyczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBtX2ltYWdlQnVmZmVyczsK
KyAgICBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXJzOwogICAg
IFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBtX2ltYWdlQml0bWFwczsKICNpZiBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwpAQCAtMzY1OCw3ICsz
NjU0LDcgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBzdGQ6OnVuaXEKICAgICBtX21lbW9yeUNvc3QgPSBjb21w
dXRlTWVtb3J5Q29zdCgpOwogfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gYXJy
YXlCdWZmZXJDb250ZW50c0FycmF5LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5LCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+
PiYmIGltYWdlQnVmZmVycworU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxv
YlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVm
ZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVm
ZmVyPiYmIGltYWdlQnVmZmVycwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAg
ICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiYmIGRl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMKICNlbmRpZgpAQCAtMzY5OSw5ICszNjk1LDkgQEAgc2l6
ZV90IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QoKSBjb25zdAogICAg
ICAgICAgICAgY29zdCArPSBjb250ZW50LnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiBwYWlyIDogbV9pbWFnZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3Qp
Ci0gICAgICAgICAgICBjb3N0ICs9IHBhaXIuZmlyc3QtPm1lbW9yeUNvc3QoKTsKKyAgICBmb3Ig
KGF1dG8mIGltYWdlQnVmZmVyIDogbV9pbWFnZUJ1ZmZlcnMpIHsKKyAgICAgICAgaWYgKGltYWdl
QnVmZmVyLmJ1ZmZlcigpKQorICAgICAgICAgICAgY29zdCArPSBpbWFnZUJ1ZmZlci5idWZmZXIo
KS0+bWVtb3J5Q29zdCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAppbmRleCAyMGE5N2I2YmU1NzNlYzE0NTU0MjM4NDAzMjk4NTI2YWNlNzVhZTdhLi5lMGFiOWMz
M2E5NzlmZGUzOWQzYjJmOTNkMmRmNDU0Y2Y5YWE2ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtNTMsNiArNTMsNyBA
QCBjbGFzcyBEZXRhY2hlZE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3Mg
SW1hZ2VCaXRtYXA7CiBjbGFzcyBNZXNzYWdlUG9ydDsKK2NsYXNzIFNlcmlhbGl6YWJsZUltYWdl
QnVmZmVyOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uUmV0
dXJuQ29kZTsKIApAQCAtMTE3LDcgKzExOCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV0VC
Q09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYm
KTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2ln
bmVkIGNoYXI+JiYsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KTsK
LSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRC
dWZmZXJzLCBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXJzCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7IH0KICNlbmRpZgpAQCAtMTMxLDcg
KzEzMiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX2FycmF5QnVmZmVy
Q29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
PiBtX2ltYWdlQnVmZmVyczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gbV9kZXRhY2hlZE9m
ZnNjcmVlbkNhbnZhc2VzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmlu
ZGV4IGEwNGRjMDk5NmIwNWY0MjIwZjc5MTgwZGU3ZWZlMDgxNWNhN2U4MDAuLjgyNTZjMTFjYTg3
YzZhNDZlZjE4MDNmZTBmZWY5ZDQ0OTUxYjc1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwCkBAIC03MiwxOCArNzIsOSBAQCBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpj
cmVhdGUoSW50U2l6ZSBzaXplKQogICAgIHJldHVybiBjcmVhdGUoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSwgYnVmZmVyUmVuZGVyaW5n
TW9kZSkpOwogfQogCi1SZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+JiYgYnVmZmVyKQorUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIsIE9wdGlvblNldDxTZXJpYWxp
emF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSkKIHsKLSAgICBhdXRvIGltYWdlQml0bWFw
ID0gY3JlYXRlKFdURk1vdmUoYnVmZmVyLmZpcnN0KSk7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3Jp
Z2luQ2xlYW4gPSBidWZmZXIuc2Vjb25kLm9yaWdpbkNsZWFuOwotICAgIGltYWdlQml0bWFwLT5t
X3ByZW11bHRpcGx5QWxwaGEgPSBidWZmZXIuc2Vjb25kLnByZW11bHRpcGx5QWxwaGE7Ci0gICAg
aW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5m
b3JjaWJseVByZW11bHRpcGx5QWxwaGE7Ci0gICAgcmV0dXJuIGltYWdlQml0bWFwOwotfQotCi1S
ZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1h
cChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1h
cChXVEZNb3ZlKGJ1ZmZlciksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogfQogCiB2b2lkIEltYWdl
Qml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0
aW9ucyYmIG9wdGlvbnMsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkKQEAgLTk1LDE1
ICs4NiwxNCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgKTsKIH0KIAotVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJ
bWFnZUJpdG1hcD4+JiYgYml0bWFwcykKK1ZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4g
SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYg
Yml0bWFwcykKIHsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiBidWZmZXJzOworICAgIFZl
Y3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4gYnVmZmVyczsKICAgICBmb3IgKGF1dG8mIGJp
dG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGJp
dG1hcC0+dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXph
dGlvblN0YXRlIHsgYml0bWFwLT5vcmlnaW5DbGVhbigpLCBiaXRtYXAtPnByZW11bHRpcGx5QWxw
aGEoKSwgYml0bWFwLT5mb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSB9KSk7CisgICAgICAgIGJ1
ZmZlcnMuYXBwZW5kKHsgYml0bWFwLT50YWtlSW1hZ2VCdWZmZXIoKSwgYml0bWFwLT5zZXJpYWxp
emF0aW9uU3RhdGUoKSB9KTsKICAgICByZXR1cm4gYnVmZmVyczsKIH0KIAotCiB2b2lkIEltYWdl
Qml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIEltYWdlQml0bWFwOjpTb3VyY2UmJiBzb3VyY2UsIEltYWdlQml0bWFwT3B0
aW9ucyYmIG9wdGlvbnMsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgSW1hZ2VCaXRt
YXA6OlByb21pc2UmJiBwcm9taXNlKQogewogICAgIC8vIDEuIElmIGVpdGhlciB0aGUgc3cgb3Ig
c2ggYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQgYnV0IHplcm8sIHJldHVybiBhIHByb21pc2UKQEAg
LTI0OSw3ICsyMzksNyBAQCB2b2lkIEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VC
dWZmZXIoYm9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIDkuIElmIHRo
ZSBvcmlnaW4gb2YgaW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBv
cmlnaW4gc3BlY2lmaWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwg
dGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3Qn
cwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5D
bGVhbiA9IG9yaWdpbkNsZWFuOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0
ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgb3JpZ2luQ2xlYW4pOwogCiAg
ICAgLy8gMTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVz
ZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRo
IHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTM4MCw5ICszNzAs
OSBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudAogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9i
amVjdCwgdGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBv
YmplY3QncwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KIAotICAgIGltYWdlQml0bWFwLT5t
X29yaWdpbkNsZWFuID0gIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpOworICAgIGltYWdlQml0
bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5D
bGVhbiwgIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKTsKIAotICAgIGltYWdlQml0bWFwLT5t
X3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5
QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUu
c2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQcmVtdWx0aXBs
aWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8vIDEwLiBSZXR1
cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFy
YWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3IEltYWdl
Qml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC00NDUsOSArNDM1LDkgQEAgdm9pZCBJbWFn
ZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgQ2FudmFzQmFz
ZSYgY2FudmFzLCBJbWEKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRo
ZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUgdmFsdWUgYXMKICAgICAv
LyAgICB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGNhbnZhcyBlbGVtZW50J3MgYml0bWFw
LgogCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBjYW52YXMub3JpZ2luQ2xlYW4o
KTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRp
b25TdGF0ZTo6T3JpZ2luQ2xlYW4sIGNhbnZhcy5vcmlnaW5DbGVhbigpKTsKIAotICAgIGltYWdl
Qml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclBy
ZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0
aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSwgYWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFs
cGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKIAogICAgIC8v
IDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVw
cyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTIwLDkgKzUxMCw5IEBAIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwKICAgICAvLyA2LjMuIElmIHRoZSBvcmlnaW4gb2YgaW1hZ2Un
cyB2aWRlbyBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBlbnRyeQogICAgIC8vICAgICAgc2V0dGlu
Z3Mgb2JqZWN0J3Mgb3JpZ2luLCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YKICAg
ICAvLyAgICAgIGltYWdlJ3MgYml0bWFwIHRvIGZhbHNlLgotICAgIGltYWdlQml0bWFwLT5tX29y
aWdpbkNsZWFuID0gIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250ZXh0LnNlY3VyaXR5
T3JpZ2luKCksICp2aWRlbyk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRl
LnNldChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuLCAhdGFpbnRzT3JpZ2luKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKSk7CiAKLSAgICBpbWFn
ZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQ
cmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXph
dGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhh
UHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlB
bHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAv
LyA2LjQuMS4gUmVzb2x2ZSBwIHdpdGggaW1hZ2VCaXRtYXAuCiAgICAgcHJvbWlzZS5yZXNvbHZl
KFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKQEAgLTU3MSwxNSArNTYxLDE1IEBAIHZvaWQgSW1hZ2VC
aXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZlB0cjxJbWFn
ZUJpdG1hcD4mIGV4CiAKICAgICAvLyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRo
ZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhlIHNhbWUKICAgICAvLyAgICB2YWx1
ZSBhcyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGJpdG1hcCBvZiB0aGUgaW1hZ2UgYXJn
dW1lbnQuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBleGlzdGluZ0ltYWdlQml0
bWFwLT5vcmlnaW5DbGVhbigpOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0
ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgZXhpc3RpbmdJbWFnZUJpdG1h
cC0+b3JpZ2luQ2xlYW4oKSk7CiAKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhh
ID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJl
bXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9u
U3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0
aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgQ29yZSBHcmFw
aGljcyBiYWNrZW5kLCB3aGVuIGNyZWF0aW5nIGFuIEltYWdlQml0bWFwIGZyb20KICAgICAvLyBh
biBJbWFnZUJpdG1hcCwgdGhlIGFscGhhIGNoYW5uZWwgb2YgYml0bWFwRGF0YSBpc24ndCBwcmVt
dWx0aXBsaWVkIGV2ZW4KICAgICAvLyB0aG91Z2ggdGhlIGFscGhhIG1vZGUgb2YgdGhlIGludGVy
bmFsIHN1cmZhY2UgY2xhaW1zIGl0IGlzLiBJbnN0cnVjdAogICAgIC8vIHVzZXJzIG9mIHRoaXMg
SW1hZ2VCaXRtYXAgdG8gaWdub3JlIHRoZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4K
LSAgICBpbWFnZUJpdG1hcC0+bV9mb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSBpbWFnZUJpdG1h
cC0+bV9wcmVtdWx0aXBseUFscGhhOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25T
dGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEsIGlt
YWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3Rh
dGU6OlByZW11bHRpcGx5QWxwaGEpKTsKIAogICAgIC8vIDYuIFJldHVybiBhIG5ldyBwcm9taXNl
LCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyA3
LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QgYXMg
dGhlIHZhbHVlLgpAQCAtNzU0LDcgKzc0NCw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZUZy
b21CdWZmZXIoCiAKICAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFw
RGF0YSkpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVBy
ZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxw
aGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGltYWdl
Qml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVt
dWx0aXBseUFscGhhLCBhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShv
cHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOwogCiAgICAgcHJvbWlzZS5yZXNvbHZlKFdURk1vdmUoaW1hZ2VCaXRtYXApKTsK
IH0KQEAgLTgxOCw4ICs4MDgsOCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8SW1hZ2VEYXRhPiYgaW1hZwogICAgIHByb21p
c2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUltYWdlQml0bWFwOjpJbWFn
ZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQotICAgIDogbV9i
aXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkKK0ltYWdlQml0bWFwOjpJbWFnZUJpdG1hcChzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlv
blN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBTZXJpYWxpemFibGVJbWFnZUJ1ZmZl
cihXVEZNb3ZlKGJ1ZmZlciksIHNlcmlhbGl6YXRpb25TdGF0ZSkKIHsKICAgICBBU1NFUlQobV9i
aXRtYXBEYXRhKTsKIH0KQEAgLTgyOCw3ICs4MTgsNyBAQCBJbWFnZUJpdG1hcDo6fkltYWdlQml0
bWFwKCkgPSBkZWZhdWx0OwogCiB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6d2lkdGgoKSBjb25zdAog
ewotICAgIGlmIChtX2RldGFjaGVkIHx8ICFtX2JpdG1hcERhdGEpCisgICAgaWYgKCFtX2JpdG1h
cERhdGEpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJp
Z2h0IHdpZHRoPwpAQCAtODM3LDcgKzgyNyw3IEBAIHVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0
aCgpIGNvbnN0CiAKIHVuc2lnbmVkIEltYWdlQml0bWFwOjpoZWlnaHQoKSBjb25zdAogewotICAg
IGlmIChtX2RldGFjaGVkIHx8ICFtX2JpdG1hcERhdGEpCisgICAgaWYgKCFtX2JpdG1hcERhdGEp
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IGhl
aWdodD8KQEAgLTg0NiwxNCArODM2LDcgQEAgdW5zaWduZWQgSW1hZ2VCaXRtYXA6OmhlaWdodCgp
IGNvbnN0CiAKIHZvaWQgSW1hZ2VCaXRtYXA6OmNsb3NlKCkKIHsKLSAgICBtX2RldGFjaGVkID0g
dHJ1ZTsKICAgICBtX2JpdG1hcERhdGEgPSBudWxscHRyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQml0bWFwOjp0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkKLXsK
LSAgICBtX2RldGFjaGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gV1RGTW92ZShtX2JpdG1hcERhdGEp
OwotfQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKaW5kZXggYmYwZGQ1ZTFkNzQ5MjE5
NGUyN2M2YzI3ZDc4NmFhMWIzMjJhOWRkOS4uMzQxM2U0NjMxNDU5YjZkZjg3NDQxOTg5YzlmYmM1
NDI2NTBjNTNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaApAQCAtMjYsOCArMjYsOCBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTU3LDcgKzU3LDcgQEAgc3RydWN0IEltYWdlQml0bWFwT3B0aW9uczsK
IAogdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVkOwog
Ci1jbGFzcyBJbWFnZUJpdG1hcCBmaW5hbCA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBSZWZDb3VudGVkPEltYWdlQml0bWFwPiB7CitjbGFzcyBJbWFnZUJpdG1hcCBmaW5hbCA6IHB1
YmxpYyBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlciwgcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVi
bGljIFJlZkNvdW50ZWQ8SW1hZ2VCaXRtYXA+IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQml0bWFwKTsKIHB1YmxpYzoKICAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PApAQCAt
ODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgU291cmNlJiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBpbnQg
c3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIFByb21pc2UmJik7CiAKICAgICBzdGF0aWMgUmVm
PEltYWdlQml0bWFwPiBjcmVhdGUoSW50U2l6ZSk7Ci0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1h
cD4gY3JlYXRlKHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPiYmKTsKKyAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFw
PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmLCBPcHRpb25TZXQ8U2VyaWFs
aXphdGlvblN0YXRlPiA9IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwogCiAgICAg
fkltYWdlQml0bWFwKCk7CiAKQEAgLTkxLDMwICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgaGVpZ2h0KCkgY29uc3Q7CiAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAgYm9vbCBpc0RldGFj
aGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhY2hlZDsgfQotCi0gICAgSW1hZ2VCdWZmZXIqIGJ1
ZmZlcigpIHsgcmV0dXJuIG1fYml0bWFwRGF0YS5nZXQoKTsgfQotCi0gICAgYm9vbCBvcmlnaW5D
bGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47IH0KLQotICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAg
Ly8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21pbmcgZnJvbSBhbiBJbWFnZUJpdG1h
cCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3JzCi0gICAgLy8gdGhlIGFscGhhIG1v
ZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxwaGFJbmZvIGluIHRoZSBDb3JlIEdy
YXBoaWNzIGJhY2tlbmQuIEZvcgotICAgIC8vIEltYWdlQml0bWFwcyBjcmVhdGVkIGZyb20gSW1h
Z2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhY2N1cmF0ZSwgYW5kIGNhbGxlcnMg
bXVzdCBiZQotICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBhbHBoYSBtb2RlLCBhbmQgZm9yY2li
bHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgYm9vbCBmb3JjaWJseVByZW11
bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsg
fQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0cmFuc2Zlck93bmVyc2hpcEFu
ZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gZGV0YWNoQml0
bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CisgICAgc3RhdGljIFZlY3RvcjxT
ZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1h
Z2VPYnNlcnZlcjsKICAgICBmcmllbmQgY2xhc3MgUGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAg
c3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJik7Ci0gICAgSW1hZ2VCaXRtYXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsK
KyAgICBJbWFnZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYsIE9wdGlvblNl
dDxTZXJpYWxpemF0aW9uU3RhdGU+KTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxh
bmtJbWFnZUJ1ZmZlcihib29sIG9yaWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzIsMTIg
KzExNSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlRGF0YT4mLCBJbWFnZUJpdG1hcE9wdGlvbnMm
JiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRl
UHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPFR5cGVkT01DU1NJbWFnZVZh
bHVlPiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBPcHRpb25hbDxJbnRSZWN0PiwgUHJvbWlzZSYm
KTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVGcm9tQnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwg
U3RyaW5nIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBV
UkwmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBi
b29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUg
fTsKLSAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Zv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMTg5YWMxOTI1NDRkYzlkZWI2ZDUzNjYzYzgy
OTQwYTYwMTI3MzAwYy4uZTgzYzhmZTRmZTRmYWIxMGI5ZWVjZjViOGI2ZjAzMjRkZGQ2MmUyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMjUwLDEzICsyNTAs
MTMgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0
cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdl
Qml0bWFwPiB7IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVhdGVkSW1hZ2VC
dWZmZXIpCi0gICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCBJbWFn
ZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsgdHJ1ZSwgZmFsc2UsIGZhbHNlIH19KSB9Owor
ICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIH07CiAKICAgICAgICAg
YXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAK
LSAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwg
SW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IG9yaWdpbkNsZWFuKCksIGZhbHNlLCBm
YWxzZSB9fSkgfTsKKyAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZShXVEZNb3Zl
KGJ1ZmZlciksIG9yaWdpbkNsZWFuKCkgPyBJbWFnZUJpdG1hcDo6U2VyaWFsaXphdGlvblN0YXRl
OjpPcmlnaW5DbGVhbiA6IEltYWdlQml0bWFwOjpTZXJpYWxpemF0aW9uU3RhdGUoKSkgfTsKICAg
ICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2MTdiMDk3ODRjYzMxZGRlNDdhMTk5
YjYyNjVmMjFlZDI4MmMyNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
LmgiCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0
YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBtX2JpdG1hcERhdGEoV1RGTW92ZShidWZm
ZXIpKQorICAgICwgbV9zZXJpYWxpemF0aW9uU3RhdGUoc2VyaWFsaXphdGlvblN0YXRlKQorewor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFNlcmlhbGl6YWJsZUltYWdlQnVmZmVy
Ojp0YWtlSW1hZ2VCdWZmZXIoKQoreworICAgIHJldHVybiBXVEZNb3ZlKG1fYml0bWFwRGF0YSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2Vy
aWFsaXphYmxlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2MwODBhMDVkNDMxNzNhZmExODJl
MDUwYTQ4YjFhZTI2OTVmYjJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9TZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworY2xhc3MgU2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgU2VyaWFsaXphdGlvblN0YXRlIDog
dWludDhfdCB7CisgICAgICAgIE9yaWdpbkNsZWFuICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAg
ICAgICAgUHJlbXVsdGlwbHlBbHBoYSAgICAgICAgID0gMSA8PCAxLAorICAgICAgICBGb3JjaWJs
eVByZW11bHRpcGx5QWxwaGEgPSAxIDw8IDIKKyAgICB9OworCisgICAgU2VyaWFsaXphYmxlSW1h
Z2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmLCBPcHRpb25TZXQ8U2VyaWFs
aXphdGlvblN0YXRlPik7CisKKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAh
YnVmZmVyKCk7IH0KKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdCB7IHJldHVybiBt
X2JpdG1hcERhdGEuZ2V0KCk7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRh
a2VJbWFnZUJ1ZmZlcigpOworCisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2VyaWFsaXphdGlvblN0YXRlLmNvbnRhaW5zKFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2lu
Q2xlYW4pOyB9CisKKyAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRp
cGx5QWxwaGEpOyB9CisgICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21pbmcg
ZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3JzCisg
ICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxwaGFJ
bmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgorICAgIC8vIEltYWdlQml0bWFw
cyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhY2N1
cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQorICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBhbHBo
YSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCisgICAg
Ym9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6
YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6OkZvcmNpYmx5UHJlbXVsdGlw
bHlBbHBoYSk7IH0KKworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6
YXRpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VyaWFsaXphdGlvblN0YXRlOyB9CisKK3By
b3RlY3RlZDoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fYml0bWFwRGF0YTsK
KyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGI1
MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUuLmRlMWY3NzQ2ODYxN2M3OGQw
NzBmNDc1ZDJiMjRjNGQ4MjQ2ZDRlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTE3LDcg
KzExNyw3IEBAIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRt
YXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hCiAgICAgICAgIGNhbnZhcygpLT5zZXRP
cmlnaW5DbGVhbigpOwogICAgIGVsc2UKICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50
ZWQoKTsKLSAgICBjYW52YXMoKS0+c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoaW1hZ2VCaXRt
YXAtPnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKSk7CisgICAgY2FudmFzKCktPnNldEltYWdl
QnVmZmVyQW5kTWFya0RpcnR5KGltYWdlQml0bWFwLT50YWtlSW1hZ2VCdWZmZXIoKSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6dHJhbnNmZXJG
cm9tSW1hZ2VCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IGZjOWEwMzgy
MWVlYTE5OTc5NWU0MWE0ZGY3ZDExMDE0MjA5OTM3ZDUuLmQxNDY0OTJjNGE4ZGY5MzVjYWY5NGI5
ZmI5NTU5MDlhYWQxY2JhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaApAQCAtMzgsMTIgKzM4LDYgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQ7
CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgU2VyaWFsaXphdGlv
blN0YXRlIHsKLSAgICAgICAgYm9vbCBvcmlnaW5DbGVhbiB7IGZhbHNlIH07Ci0gICAgICAgIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgZm9yY2libHlQcmVt
dWx0aXBseUFscGhhIHsgZmFsc2UgfTsKLSAgICB9OwotCiAgICAgLy8gV2lsbCByZXR1cm4gYSBu
dWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
LCBTaG91bGRBY2NlbGVyYXRlLCBTaG91bGRVc2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9z
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNS
R0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBD
b2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwo=
</data>
<flag name="commit-queue"
          id="424537"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408975</attachid>
            <date>2020-09-16 18:23:06 -0700</date>
            <delta_ts>2020-09-20 12:49:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200916182305.patch</filename>
            <type>text/plain</type>
            <size>38118</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZmMzg2ZmY4ZWMxOWIz
MDQ5YjYxZGFlNjQ3YzBjZjQ4MTgzMDMxMy4uMDYwYTc4ODJiODFlYzI5ZmM2NmJjMDgzMDliN2E5
NGVlOGE4ZTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIwLTA5LTE2ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWZ0ZXIgbW92aW5nIFNl
cmlhbGl6YXRpb25TdGF0ZSB0byBJbWFnZUJpdG1hcCwgbWFraW5nIGl0IGFuIGVudW0gYW5kCisg
ICAgICAgIG1ha2luZyBJbWFnZUJ1ZmZlciBzdG9yZXMgYW4gT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4sIEkgcmVhbGl6ZWQKKyAgICAgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+PgorICAgICAgICBjYW4g
YmUgcmVwbGFjZWQgYnkgYSBuZXcgY2xhc3MgbmFtZWQgU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIu
IFRoaXMgY2xhc3MKKyAgICAgICAgd2lsbCBhbHNvIGJlIGEgc3VwZXJjbGFzcyBvZiBJbWFnZUJp
dG1hcC4gQWxsIHRoZSBvcGVyYXRpb25zIG9uIEltYWdlQnVmZmVyCisgICAgICAgIGFuZCBTZXJp
YWxpemF0aW9uU3RhdGUgd2lsbCBiZSBtb3ZlZCB0byBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci4g
SXQgd2lsbAorICAgICAgICBhbHNvIG93biB0aGUgZW51bSBTZXJpYWxpemF0aW9uU3RhdGUuCisK
KyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVT
ZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNl
cmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxp
emVyOjpDbG9uZURlc2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZFRyYW5zZmVycmVkSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVEZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNvbXB1dGVNZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1h
cHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnJlc29sdmVXaXRoQmxhbmtJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpoZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjp0cmFuc2Zlck93bmVyc2hpcEFuZENs
b3NlKTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmg6CisgICAgICAgICog
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2Fu
dmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwvU2VyaWFsaXphYmxl
SW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6YWJsZUlt
YWdlQnVmZmVyOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6dGFrZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXphYmxlSW1hZ2VCdWZmZXI6OmlzRGV0YWNoZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OmJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6b3JpZ2luQ2xlYW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OnByZW11bHRpcGx5QWxwaGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI6OmZvcmNpYmx5
UHJlbXVsdGlwbHlBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemFibGVJ
bWFnZUJ1ZmZlcjo6c2VyaWFsaXphdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXApOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICgpOiBEZWxldGVkLgor
CiAyMDIwLTA5LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
TWVyZ2UgUGVyaW9kaWNXYXZlIGltcHJvdmVtZW50cyBmcm9tIEJsaW5rCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCBhNTVhMThkMzIwNDhlNzZlNjUxZTAwNjA1ZjgwYjA1YTMyN2ExMWVlLi4yODYxNWIw
YzQ1ZGU0MTBhMzJhZDgwYWIwNjY1MTA4NmY0MTQ5ODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTY1Miw2ICs2NTIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgaHRtbC9NZWRpYUVsZW1lbnRTZXNzaW9uLmgKICAgICBodG1sL01lZGlhRXJyb3IuaAogICAg
IGh0bWwvUGx1Z2luRG9jdW1lbnQuaAorICAgIGh0bWwvU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIu
aAogICAgIGh0bWwvU3RlcFJhbmdlLmgKICAgICBodG1sL1RpbWVSYW5nZXMuaAogICAgIGh0bWwv
VHlwZUFoZWFkLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQy
ZmEyMTQ2Y2ZiYTlkOC4uM2I4MjViMmJkMGUyNGIyMjA4NGMwMDQzZGEzYzY1NjYxOTBlMWNiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTEyMTEsNiArMTIxMSw3IEBAIGh0bWwvUmVzZXRJbnB1dFR5cGUu
Y3BwCiBodG1sL1J1YnlFbGVtZW50LmNwcAogaHRtbC9SdWJ5VGV4dEVsZW1lbnQuY3BwCiBodG1s
L1NlYXJjaElucHV0VHlwZS5jcHAKK2h0bWwvU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuY3BwCiBo
dG1sL1N0ZXBSYW5nZS5jcHAKIGh0bWwvU3VibWl0SW5wdXRUeXBlLmNwcAogaHRtbC9UZWxlcGhv
bmVJbnB1dFR5cGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNGI1MDliZWY0MTAyMTU0NzM5ODNiMTcyMGI2NWQyMmQ4MzJk
ZTBkNy4uMzc1YjM2ZDRmNDUyOGE2YmM5ZGMyMzQ0YTRjZGZlMWRjOGVjZDA3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE2
MCw2ICsyMTYwLDcgQEAKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVm
ZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFF
RkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYx
MkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQy
MjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBT
VkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzIxQjQ5NzQyNTEyQkEzQjAwRkU5RDNCIC8qIFNlcmlhbGl6YWJsZUltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3
MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtOTg4Nyw2ICs5ODg4LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1
OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIFNlcmlhbGl6YWJs
ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlcmlhbGl6YWJsZUltYWdlQnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NzAyNTEyQUMwNDAw
RkU5RDNCIC8qIFNlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlcmlh
bGl6YWJsZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMkE4
MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1p
bk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMxMTMsNiArMjMxMTYsOCBAQAogCQkJ
CTU4MjRBQkE1MUFFODEzODQwMDkwNzRCNyAvKiBSdWJ5VGV4dEVsZW1lbnQuaCAqLywKIAkJCQlG
NTVCM0Q5RDEyNTFGMTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmNwcCAqLywKIAkJCQlG
NTVCM0Q5RTEyNTFGMTJEMDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggKi8sCisJCQkJNzIx
QjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIFNlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmNwcCAqLywK
KwkJCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIu
aCAqLywKIAkJCQlBNUFGQjM0RDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmNwcCAqLywK
IAkJCQlBNUFGQjM0RTExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggKi8sCiAJCQkJRjU1
QjNEOUYxMjUxRjEyRDAwM0VGMjY5IC8qIFN1Ym1pdElucHV0VHlwZS5jcHAgKi8sCkBAIC0zMzcx
Nyw2ICszMzcyMiw3IEBACiAJCQkJNDE1MDcxNTgxNjg1MDY3MzAwQzNDN0IzIC8qIFNlbGVjdG9y
RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzEwN0JFMjE4Q0MxOURFMDBDQzE4RTggLyog
U2VsZWN0b3JQc2V1ZG9UeXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDUzMjJBQzE0MENF
MjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxQjQ5
NzQyNTEyQkEzQjAwRkU5RDNCIC8qIFNlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGNEQ0M0Q2NjIxODgwMzhCMDBFQ0VDQUMgLyogU2VyaWFsaXplZEF0dGFjaG1l
bnREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMThERjMzNTE4QUFGMTJDMDA3NzNFNTkgLyog
U2VyaWFsaXplZENyeXB0b0tleVdyYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3N0FGMTQwMThG
NEFFNDAwMDAxRUQ2MSAvKiBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3NWRlYjZiY2M4ODg0ZjBlODEu
LjAwYzA4ZTgzZGQxY2M2ZWYwZjYxMWI5NDczYTliZGQxMGQ1ZWRmOTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAt
MTA0Myw5ICsxMDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIHdyaXRlKElt
YWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VC
aXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90
PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhhKCkpKTsKLSAgICAgICAgd3JpdGUoc3RhdGlj
X2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkpKTsK
KyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuc2VyaWFsaXph
dGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAgICB3cml0ZShzdGF0aWNfY2FzdDxpbnQzMl90
Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGludDMy
X3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGRv
dWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSkpOwpAQCAtMTkzMSw3ICsxOTI5LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAgIHN0YXRpYyBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGlt
YWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRz
LCBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXJzCiAjaWYgRU5B
QkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxE
ZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2Vu
ZGlmCkBAIC0xOTk2LDcgKzE5OTQsNyBAQCBwcml2YXRlOgogICAgICAgICBzaXplX3QgbV9pbmRl
eDsKICAgICB9OwogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+JiYgaW1h
Z2VCdWZmZXJzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcgorICAgIENsb25lRGVzZXJp
YWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3Nh
Z2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBW
ZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXJzLCBjb25zdCBWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlcgogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAg
ICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiYmIGRl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMgPSB7IH0KICNlbmRpZgpAQCAtMjAyOCw3ICsyMDI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDB4RkZGRkZGRkY7CiAgICAgfQog
Ci0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVz
c2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5
QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMs
IEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlv
blN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKKyAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVm
ZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9y
PFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRC
dWZmZXJzLCBWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+JiYgaW1hZ2VCdWZmZXJzCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNl
cwogI2VuZGlmCkBAIC0yODg5LDcgKzI4ODcsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCFtX2ltYWdlQml0bWFwc1tpbmRleF0pCi0gICAgICAgICAgICBtX2ltYWdlQml0
bWFwc1tpbmRleF0gPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUobV9pbWFnZUJ1ZmZlcnMu
YXQoaW5kZXgpKSk7CisgICAgICAgICAgICBtX2ltYWdlQml0bWFwc1tpbmRleF0gPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKG1faW1hZ2VCdWZmZXJzLmF0KGluZGV4KS50YWtlSW1hZ2VCdWZmZXIoKSwg
bV9pbWFnZUJ1ZmZlcnMuYXQoaW5kZXgpLnNlcmlhbGl6YXRpb25TdGF0ZSgpKTsKIAogICAgICAg
ICBhdXRvIGJpdG1hcCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0
dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjAsMTMgQEAgcHJpdmF0ZToK
IAogICAgIEpTVmFsdWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qg
b3JpZ2luQ2xlYW47Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAg
dWludDhfdCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFs
aXphdGlvblN0YXRlOwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50
MzJfdCBsb2dpY2FsSGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAg
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVh
ZChvcmlnaW5DbGVhbikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2li
bHlQcmVtdWx0aXBseUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2lj
YWxIZWlnaHQpIHx8ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihh
cnJheUJ1ZmZlcikpIHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwg
IXJlYWQobG9naWNhbFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNv
bHV0aW9uU2NhbGUpIHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAg
ICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBA
IC0yOTk5LDcgKzI5OTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsg
SW50UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAg
PSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2Vy
aWFsaXphdGlvblN0YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNf
Y2FzdDxib29sPihwcmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQ
cmVtdWx0aXBseUFscGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlciksIE9wdGlvblNldDxJbWFnZUJpdG1hcDo6U2VyaWFsaXph
dGlvblN0YXRlPjo6ZnJvbVJhdyhzZXJpYWxpemF0aW9uU3RhdGUpKTsKICAgICAgICAgcmV0dXJu
IGdldEpTVmFsdWUoYml0bWFwKTsKICAgICB9CiAKQEAgLTM0MzQsNyArMzQzMCw3IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9iVVJMczsKICAgICBWZWN0b3I8U3RyaW5nPiBt
X2Jsb2JGaWxlUGF0aHM7CiAgICAgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX3NoYXJlZEJ1
ZmZlcnM7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAg
VmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyczsKICAgICBWZWN0
b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gbV9pbWFnZUJpdG1hcHM7CiAjaWYgRU5BQkxFKE9GRlND
UkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVl
bkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlczsKQEAgLTM2NTgsNyArMzY1NCw3
IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1
aW50OF90PiYmIGJ1ZmZlciwgc3RkOjp1bmlxCiAgICAgbV9tZW1vcnlDb3N0ID0gY29tcHV0ZU1l
bW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0
VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxv
YlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVm
ZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBp
bWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxz
LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNv
bnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNo
YXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4m
JiBpbWFnZUJ1ZmZlcnMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hl
ZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2OTksOSArMzY5NSw5IEBAIHNpemVfdCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNvbXB1dGVNZW1vcnlDb3N0KCkgY29uc3QKICAgICAgICAg
ICAgIGNvc3QgKz0gY29udGVudC5zaXplSW5CeXRlcygpOwogICAgIH0KIAotICAgIGZvciAoYXV0
byYgcGFpciA6IG1faW1hZ2VCdWZmZXJzKSB7Ci0gICAgICAgIGlmIChwYWlyLmZpcnN0KQotICAg
ICAgICAgICAgY29zdCArPSBwYWlyLmZpcnN0LT5tZW1vcnlDb3N0KCk7CisgICAgZm9yIChhdXRv
JiBpbWFnZUJ1ZmZlciA6IG1faW1hZ2VCdWZmZXJzKSB7CisgICAgICAgIGlmIChpbWFnZUJ1ZmZl
ci5idWZmZXIoKSkKKyAgICAgICAgICAgIGNvc3QgKz0gaW1hZ2VCdWZmZXIuYnVmZmVyKCktPm1l
bW9yeUNvc3QoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5k
ZXggMjBhOTdiNmJlNTczZWMxNDU1NDIzODQwMzI5ODUyNmFjZTc1YWU3YS4uZTBhYjljMzNhOTc5
ZmRlMzlkM2IyZjkzZDJkZjQ1NGNmOWFhNmZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTUzLDYgKzUzLDcgQEAgY2xh
c3MgRGV0YWNoZWRPZmZzY3JlZW5DYW52YXM7CiBjbGFzcyBJREJWYWx1ZTsKIGNsYXNzIEltYWdl
Qml0bWFwOwogY2xhc3MgTWVzc2FnZVBvcnQ7CitjbGFzcyBTZXJpYWxpemFibGVJbWFnZUJ1ZmZl
cjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGVudW0gY2xhc3MgU2VyaWFsaXphdGlvblJldHVybkNv
ZGU7CiAKQEAgLTExNyw3ICsxMTgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFdFQkNPUkVf
RVhQT1JUIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5Pik7Ci0gICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRC
dWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIElt
YWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5
Piwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVy
cywgVmVjdG9yPFNlcmlhbGl6YWJsZUltYWdlQnVmZmVyPiYmIGltYWdlQnVmZmVycwogI2lmIEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+PiYmID0geyB9CiAjZW5kaWYKQEAgLTEzMSw3ICsxMzIs
NyBAQCBwcml2YXRlOgogICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtX2RhdGE7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gbV9hcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4g
bV9zaGFyZWRCdWZmZXJDb250ZW50c0FycmF5OwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+
IG1faW1hZ2VCdWZmZXJzOworICAgIFZlY3RvcjxTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcj4gbV9p
bWFnZUJ1ZmZlcnM7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXNlczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCBh
MDRkYzA5OTZiMDVmNDIyMGY3OTE4MGRlN2VmZTA4MTVjYTdlODAwLi44MjU2YzExY2E4N2M2YTQ2
ZWYxODAzZmUwZmVmOWQ0NDk1MWI3NTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNw
cApAQCAtNzIsMTggKzcyLDkgQEAgUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRl
KEludFNpemUgc2l6ZSkKICAgICByZXR1cm4gY3JlYXRlKEltYWdlQnVmZmVyOjpjcmVhdGUoRmxv
YXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUp
KTsKIH0KIAotUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKHN0ZDo6cGFpcjxz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlPiYmIGJ1ZmZlcikKK1JlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlv
blN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCiB7Ci0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNy
ZWF0ZShXVEZNb3ZlKGJ1ZmZlci5maXJzdCkpOwotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNs
ZWFuID0gYnVmZmVyLnNlY29uZC5vcmlnaW5DbGVhbjsKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVt
dWx0aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5wcmVtdWx0aXBseUFscGhhOwotICAgIGltYWdl
Qml0bWFwLT5tX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQuZm9yY2li
bHlQcmVtdWx0aXBseUFscGhhOwotICAgIHJldHVybiBpbWFnZUJpdG1hcDsKLX0KLQotUmVmPElt
YWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJiBidWZmZXIpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RG
TW92ZShidWZmZXIpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RG
TW92ZShidWZmZXIpLCBzZXJpYWxpemF0aW9uU3RhdGUpKTsKIH0KIAogdm9pZCBJbWFnZUJpdG1h
cDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMm
JiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCkBAIC05NSwxNSArODYs
MTQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICk7CiB9CiAKLVZlY3RvcjxzdGQ6OnBh
aXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRp
b25TdGF0ZT4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiYmIGJpdG1hcHMpCitWZWN0b3I8U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+IEltYWdl
Qml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1h
cHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gYnVmZmVyczsKKyAgICBWZWN0b3I8
U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXI+IGJ1ZmZlcnM7CiAgICAgZm9yIChhdXRvJiBiaXRtYXAg
OiBiaXRtYXBzKQotICAgICAgICBidWZmZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihiaXRtYXAt
PnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKSwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25T
dGF0ZSB7IGJpdG1hcC0+b3JpZ2luQ2xlYW4oKSwgYml0bWFwLT5wcmVtdWx0aXBseUFscGhhKCks
IGJpdG1hcC0+Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgfSkpOworICAgICAgICBidWZmZXJz
LmFwcGVuZCh7IGJpdG1hcC0+dGFrZUltYWdlQnVmZmVyKCksIGJpdG1hcC0+c2VyaWFsaXphdGlv
blN0YXRlKCkgfSk7CiAgICAgcmV0dXJuIGJ1ZmZlcnM7CiB9CiAKLQogdm9pZCBJbWFnZUJpdG1h
cDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMm
JiBvcHRpb25zLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQ
cm9taXNlJiYgcHJvbWlzZSkKIHsKICAgICAvLyAxLiBJZiBlaXRoZXIgdGhlIHN3IG9yIHNoIGFy
Z3VtZW50cyBhcmUgc3BlY2lmaWVkIGJ1dCB6ZXJvLCByZXR1cm4gYSBwcm9taXNlCkBAIC0yNDks
NyArMjM5LDcgQEAgdm9pZCBJbWFnZUJpdG1hcDo6cmVzb2x2ZVdpdGhCbGFua0ltYWdlQnVmZmVy
KGJvb2wgb3JpZ2luQ2xlYW4sIFByb21pc2UmJiBwcm9taXMKICAgICAvLyA5LiBJZiB0aGUgb3Jp
Z2luIG9mIGltYWdlJ3MgaW1hZ2UgaXMgbm90IHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgb3JpZ2lu
IHNwZWNpZmllZCBieSB0aGUKICAgICAvLyAgICBlbnRyeSBzZXR0aW5ncyBvYmplY3QsIHRoZW4g
c2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0J3MKICAg
ICAvLyAgICBiaXRtYXAgdG8gZmFsc2UuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4g
PSBvcmlnaW5DbGVhbjsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0
KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4sIG9yaWdpbkNsZWFuKTsKIAogICAgIC8v
IDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3Rl
cHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUg
bmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC0zODAsOSArMzcwLDkgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jiwg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQKICAgICAvLyAgICBlbnRyeSBzZXR0aW5ncyBvYmplY3Qs
IHRoZW4gc2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0
J3MKICAgICAvLyAgICBiaXRtYXAgdG8gZmFsc2UuCiAKLSAgICBpbWFnZUJpdG1hcC0+bV9vcmln
aW5DbGVhbiA9ICF0YWludHNPcmlnaW4oKmNhY2hlZEltYWdlKTsKKyAgICBpbWFnZUJpdG1hcC0+
bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4s
ICF0YWludHNPcmlnaW4oKmNhY2hlZEltYWdlKSk7CiAKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVt
dWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhh
KG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChT
ZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVsdGlwbGljYXRp
b25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyAxMC4gUmV0dXJuIGEg
bmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVs
LgogICAgIC8vIDExLiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5ldyBJbWFnZUJpdG1h
cCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNDQ1LDkgKzQzNSw5IEBAIHZvaWQgSW1hZ2VCaXRt
YXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIENhbnZhc0Jhc2UmIGNh
bnZhcywgSW1hCiAgICAgLy8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1h
Z2VCaXRtYXAgb2JqZWN0J3MgYml0bWFwIHRvIHRoZSBzYW1lIHZhbHVlIGFzCiAgICAgLy8gICAg
dGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBjYW52YXMgZWxlbWVudCdzIGJpdG1hcC4KIAot
ICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7Cisg
ICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0YXRlLnNldChTZXJpYWxpemF0aW9uU3Rh
dGU6Ok9yaWdpbkNsZWFuLCBjYW52YXMub3JpZ2luQ2xlYW4oKSk7CiAKLSAgICBpbWFnZUJpdG1h
cC0+bV9wcmVtdWx0aXBseUFscGhhID0gKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0
aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgaW1hZ2VCaXRtYXAtPm1fc2VyaWFsaXphdGlvblN0
YXRlLnNldChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEsIGFscGhhUHJlbXVs
dGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CiAKICAgICAvLyA2LiBS
ZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4g
cGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1h
Z2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTUyMCw5ICs1MTAsOSBAQCB2b2lkIElt
YWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsCiAgICAgLy8gNi4zLiBJZiB0aGUgb3JpZ2luIG9mIGltYWdlJ3Mgdmlk
ZW8gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggZW50cnkKICAgICAvLyAgICAgIHNldHRpbmdzIG9i
amVjdCdzIG9yaWdpbiwgdGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mCiAgICAgLy8g
ICAgICBpbWFnZSdzIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5D
bGVhbiA9ICF0YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdp
bigpLCAqdmlkZW8pOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiwgIXRhaW50c09yaWdpbihzY3JpcHRFeGVj
dXRpb25Db250ZXh0LnNlY3VyaXR5T3JpZ2luKCksICp2aWRlbykpOwogCi0gICAgaW1hZ2VCaXRt
YXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVs
dGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25T
dGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhLCBhbHBoYVByZW11
bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEp
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwogCiAgICAgLy8gNi40
LjEuIFJlc29sdmUgcCB3aXRoIGltYWdlQml0bWFwLgogICAgIHByb21pc2UucmVzb2x2ZShXVEZN
b3ZlKGltYWdlQml0bWFwKSk7CkBAIC01NzEsMTUgKzU2MSwxNSBAQCB2b2lkIEltYWdlQml0bWFw
OjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBSZWZQdHI8SW1hZ2VCaXRt
YXA+JiBleAogCiAgICAgLy8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1h
Z2VCaXRtYXAgb2JqZWN0J3MgYml0bWFwIHRvIHRoZSBzYW1lCiAgICAgLy8gICAgdmFsdWUgYXMg
dGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBiaXRtYXAgb2YgdGhlIGltYWdlIGFyZ3VtZW50
LgotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gZXhpc3RpbmdJbWFnZUJpdG1hcC0+
b3JpZ2luQ2xlYW4oKTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0
KFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4sIGV4aXN0aW5nSW1hZ2VCaXRtYXAtPm9y
aWdpbkNsZWFuKCkpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGltYWdlQml0bWFwLT5tX3NlcmlhbGl6YXRpb25TdGF0ZS5zZXQoU2VyaWFsaXphdGlvblN0YXRl
OjpQcmVtdWx0aXBseUFscGhhLCBhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlB
bHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOwogCiAgICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUgR3JhcGhpY3Mg
YmFja2VuZCwgd2hlbiBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCiAgICAgLy8gYW4gSW1h
Z2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlw
bGllZCBldmVuCiAgICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRlcm5hbCBz
dXJmYWNlIGNsYWltcyBpdCBpcy4gSW5zdHJ1Y3QKICAgICAvLyB1c2VycyBvZiB0aGlzIEltYWdl
Qml0bWFwIHRvIGlnbm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1vZGUuCi0gICAg
aW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VCaXRtYXAtPm1f
cHJlbXVsdGlwbHlBbHBoYTsKKyAgICBpbWFnZUJpdG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUu
c2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6Rm9yY2libHlQcmVtdWx0aXBseUFscGhhLCBpbWFnZUJp
dG1hcC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQ
cmVtdWx0aXBseUFscGhhKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0
IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVz
b2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2
YWx1ZS4KQEAgLTc1NCw3ICs3NDQsNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVGcm9tQnVm
ZmVyKAogCiAgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEp
KTsKIAotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpbWFnZUJpdG1h
cC0+bV9zZXJpYWxpemF0aW9uU3RhdGUuc2V0KFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlw
bHlBbHBoYSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9u
cy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkKTsKIAogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CkBA
IC04MTgsOCArODA4LDggQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlRGF0YT4mIGltYWcKICAgICBwcm9taXNlLnJl
c29sdmUoV1RGTW92ZShpbWFnZUJpdG1hcCkpOwogfQogCi1JbWFnZUJpdG1hcDo6SW1hZ2VCaXRt
YXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKLSAgICA6IG1fYml0bWFw
RGF0YShXVEZNb3ZlKGJ1ZmZlcikpCitJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXAoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlciwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0
ZT4gc2VyaWFsaXphdGlvblN0YXRlKQorICAgIDogU2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIoV1RG
TW92ZShidWZmZXIpLCBzZXJpYWxpemF0aW9uU3RhdGUpCiB7CiAgICAgQVNTRVJUKG1fYml0bWFw
RGF0YSk7CiB9CkBAIC04MjgsNyArODE4LDcgQEAgSW1hZ2VCaXRtYXA6On5JbWFnZUJpdG1hcCgp
ID0gZGVmYXVsdDsKIAogdW5zaWduZWQgSW1hZ2VCaXRtYXA6OndpZHRoKCkgY29uc3QKIHsKLSAg
ICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBEYXRhKQorICAgIGlmICghbV9iaXRtYXBEYXRh
KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCB3
aWR0aD8KQEAgLTgzNyw3ICs4MjcsNyBAQCB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6d2lkdGgoKSBj
b25zdAogCiB1bnNpZ25lZCBJbWFnZUJpdG1hcDo6aGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAo
bV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBEYXRhKQorICAgIGlmICghbV9iaXRtYXBEYXRhKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/
CkBAIC04NDYsMTQgKzgzNiw3IEBAIHVuc2lnbmVkIEltYWdlQml0bWFwOjpoZWlnaHQoKSBjb25z
dAogCiB2b2lkIEltYWdlQml0bWFwOjpjbG9zZSgpCiB7Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7
CiAgICAgbV9iaXRtYXBEYXRhID0gbnVsbHB0cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpCi17Ci0gICAg
bV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgcmV0dXJuIFdURk1vdmUobV9iaXRtYXBEYXRhKTsKLX0K
LQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCmluZGV4IGJmMGRkNWUxZDc0OTIxOTRlMjdj
NmMyN2Q3ODZhYTFiMzIyYTlkZDkuLjM0MTNlNDYzMTQ1OWI2ZGY4NzQ0MTk4OWM5ZmJjNTQyNjUw
YzUzZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKQEAgLTI2LDggKzI2LDggQEAKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgIlNlcmlhbGl6YWJs
ZUltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC01Nyw3ICs1Nyw3IEBAIHN0cnVjdCBJbWFnZUJpdG1hcE9wdGlvbnM7CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IGNsYXNzIERPTVByb21pc2VEZWZlcnJlZDsKIAotY2xh
c3MgSW1hZ2VCaXRtYXAgZmluYWwgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgUmVm
Q291bnRlZDxJbWFnZUJpdG1hcD4geworY2xhc3MgSW1hZ2VCaXRtYXAgZmluYWwgOiBwdWJsaWMg
U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIsIHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBS
ZWZDb3VudGVkPEltYWdlQml0bWFwPiB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFn
ZUJpdG1hcCk7CiBwdWJsaWM6CiAgICAgdXNpbmcgU291cmNlID0gVmFyaWFudDwKQEAgLTgzLDcg
KzgzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYsIFNvdXJjZSYmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgaW50IHN4LCBp
bnQgc3ksIGludCBzdywgaW50IHNoLCBQcm9taXNlJiYpOwogCiAgICAgc3RhdGljIFJlZjxJbWFn
ZUJpdG1hcD4gY3JlYXRlKEludFNpemUpOwotICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNy
ZWF0ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6
OlNlcmlhbGl6YXRpb25TdGF0ZT4mJik7CisgICAgc3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3Jl
YXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4gPSBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAogICAgIH5JbWFn
ZUJpdG1hcCgpOwogCkBAIC05MSwzMCArOTEsMTMgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhl
aWdodCgpIGNvbnN0OwogICAgIHZvaWQgY2xvc2UoKTsKIAotICAgIGJvb2wgaXNEZXRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGV0YWNoZWQ7IH0KLQotICAgIEltYWdlQnVmZmVyKiBidWZmZXIo
KSB7IHJldHVybiBtX2JpdG1hcERhdGEuZ2V0KCk7IH0KLQotICAgIGJvb2wgb3JpZ2luQ2xlYW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbkNsZWFuOyB9Ci0KLSAgICBib29sIHByZW11bHRpcGx5
QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KLQotICAgIC8vIFdo
ZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VCaXRtYXAncyBJ
bWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycwotICAgIC8vIHRoZSBhbHBoYSBtb2RlIG9m
IHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29yZSBHcmFwaGlj
cyBiYWNrZW5kLiBGb3IKLSAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9tIEltYWdlQml0
bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxsZXJzIG11c3Qg
YmUKLSAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZvcmNpYmx5IHBy
ZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgotICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9mb3JjaWJseVByZW11bHRpcGx5QWxwaGE7IH0KLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdHJhbnNmZXJPd25lcnNoaXBBbmRDbG9z
ZSgpOwotCi0gICAgc3RhdGljIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IGRldGFjaEJpdG1hcHMo
VmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYpOworICAgIHN0YXRpYyBWZWN0b3I8U2VyaWFs
aXphYmxlSW1hZ2VCdWZmZXI+IGRldGFjaEJpdG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1h
cD4+JiYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbWFnZUJpdG1hcEltYWdlT2Jz
ZXJ2ZXI7CiAgICAgZnJpZW5kIGNsYXNzIFBlbmRpbmdJbWFnZUJpdG1hcDsKIAotICAgIHN0YXRp
YyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYp
OwotICAgIEltYWdlQml0bWFwKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJik7CisgICAg
SW1hZ2VCaXRtYXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmLCBPcHRpb25TZXQ8U2Vy
aWFsaXphdGlvblN0YXRlPik7CiAKICAgICBzdGF0aWMgdm9pZCByZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIoYm9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmKTsKIApAQCAtMTMyLDEyICsxMTUs
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFJlZlB0cjxJbWFnZURhdGE+JiwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIE9w
dGlvbmFsPEludFJlY3Q+LCBQcm9taXNlJiYpOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21p
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFJlZlB0cjxUeXBlZE9NQ1NTSW1hZ2VWYWx1ZT4m
LCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAg
ICAgc3RhdGljIHZvaWQgY3JlYXRlRnJvbUJ1ZmZlcihSZWY8QXJyYXlCdWZmZXI+JiYsIFN0cmlu
ZyBtaW1lVHlwZSwgbG9uZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgVVJMJiwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYsIE9wdGlvbmFsPEludFJlY3Q+LCBQcm9taXNlJiYpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7Ci0gICAgYm9vbCBt
X2RldGFjaGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07Ci0g
ICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb3JjaWJs
eVByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDE4OWFjMTkyNTQ0ZGM5ZGViNmQ1MzY2M2M4Mjk0MGE2
MDEyNzMwMGMuLmU4M2M4ZmU0ZmU0ZmFiMTBiOWVlY2Y1YjhiNmYwMzI0ZGRkNjJlMjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTI1MCwxMyArMjUwLDEzIEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNm
ZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgSW1hZ2VCdWZm
ZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHRydWUsIGZhbHNlLCBmYWxzZSB9fSkgfTsKKyAgICAg
ICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB9OwogCiAgICAgICAgIGF1dG8g
YnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCi0gICAg
ICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIEltYWdl
QnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyBvcmlnaW5DbGVhbigpLCBmYWxzZSwgZmFsc2Ug
fX0pIH07CisgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShidWZm
ZXIpLCBvcmlnaW5DbGVhbigpID8gSW1hZ2VCaXRtYXA6OlNlcmlhbGl6YXRpb25TdGF0ZTo6T3Jp
Z2luQ2xlYW4gOiBJbWFnZUJpdG1hcDo6U2VyaWFsaXphdGlvblN0YXRlKCkpIH07CiAgICAgfQog
CiAjaWYgRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZXJp
YWxpemFibGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlcmlhbGl6YWJs
ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjE3YjA5Nzg0Y2MzMWRkZTQ3YTE5OWI2MjY1
ZjIxZWQyODJjMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZXJp
YWxpemFibGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTZXJpYWxpemFibGVJbWFnZUJ1ZmZlci5oIgor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTZXJp
YWxpemFibGVJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphYmxlSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlciwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4g
c2VyaWFsaXphdGlvblN0YXRlKQorICAgIDogbV9iaXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkK
KyAgICAsIG1fc2VyaWFsaXphdGlvblN0YXRlKHNlcmlhbGl6YXRpb25TdGF0ZSkKK3sKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBTZXJpYWxpemFibGVJbWFnZUJ1ZmZlcjo6dGFr
ZUltYWdlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gV1RGTW92ZShtX2JpdG1hcERhdGEpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L1NlcmlhbGl6YWJsZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlcmlhbGl6
YWJsZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGNjMDgwYTA1ZDQzMTczYWZhMTgyZTA1MGE0
OGIxYWUyNjk1ZmIyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2Vy
aWFsaXphYmxlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXI7CisKK2NsYXNzIFNlcmlhbGl6YWJsZUltYWdlQnVm
ZmVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFNlcmlhbGl6YXRpb25TdGF0ZSA6IHVpbnQ4
X3QgeworICAgICAgICBPcmlnaW5DbGVhbiAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAg
IFByZW11bHRpcGx5QWxwaGEgICAgICAgICA9IDEgPDwgMSwKKyAgICAgICAgRm9yY2libHlQcmVt
dWx0aXBseUFscGhhID0gMSA8PCAyCisgICAgfTsKKworICAgIFNlcmlhbGl6YWJsZUltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4pOworCisgICAgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIWJ1ZmZl
cigpOyB9CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9iaXRt
YXBEYXRhLmdldCgpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0YWtlSW1h
Z2VCdWZmZXIoKTsKKworICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3Nl
cmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFu
KTsgfQorCisgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJp
YWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFs
cGhhKTsgfQorICAgIC8vIFdoZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20g
YW4gSW1hZ2VCaXRtYXAncyBJbWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8v
IHRoZSBhbHBoYSBtb2RlIG9mIHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBp
biB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3Jl
YXRlZCBmcm9tIEltYWdlQml0bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUs
IGFuZCBjYWxsZXJzIG11c3QgYmUKKyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9k
ZSwgYW5kIGZvcmNpYmx5IHByZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wg
Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9u
U3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxw
aGEpOyB9CisKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9u
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7CisgICAg
T3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gbV9zZXJpYWxpemF0aW9uU3RhdGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBiNTFiNGRi
ZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1Li5kZTFmNzc0Njg2MTdjNzhkMDcwZjQ3
NWQyYjI0YzRkODI0NmQ0ZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTExNyw3ICsxMTcs
NyBAQCB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJl
ZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2lu
Q2xlYW4oKTsKICAgICBlbHNlCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7
Ci0gICAgY2FudmFzKCktPnNldEltYWdlQnVmZmVyQW5kTWFya0RpcnR5KGltYWdlQml0bWFwLT50
cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkpOworICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZl
ckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+dGFrZUltYWdlQnVmZmVyKCkpOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnRyYW5zZmVyRnJvbUlt
YWdlQml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBmYzlhMDM4MjFlZWEx
OTk3OTVlNDFhNGRmN2QxMTAxNDIwOTkzN2Q1Li5kMTQ2NDkyYzRhOGRmOTM1Y2FmOTRiOWZiOTU1
OTA5YWFkMWNiYWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgKQEAgLTM4LDEyICszOCw2IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0OwogCiBj
bGFzcyBJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IFNlcmlhbGl6YXRpb25TdGF0
ZSB7Ci0gICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4geyBmYWxzZSB9OwotICAgICAgICBib29sIHBy
ZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgICAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlw
bHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgfTsKLQogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBw
b2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgU2hv
dWxkQWNjZWxlcmF0ZSwgU2hvdWxkVXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2UsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBj
b25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JT
cGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409241</attachid>
            <date>2020-09-20 12:49:45 -0700</date>
            <delta_ts>2020-09-20 13:13:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200920124944.patch</filename>
            <type>text/plain</type>
            <size>47037</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRhNDdlOTZlZTBmYmUx
ZjUzNGIxZjA2YzI0ODVjN2ZjNDM4MjFiOS4uMTk1NjNjNTZlMTQyYjBmZGI0ZjVjYzIxOTg5MWI2
N2ZkNjI3ZWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIwLTA5LTIwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEltYWdl
Qml0bWFwU291cmNlIGFuZCBtYWtlIGl0IGEgbWVtYmVyIG9mIEltYWdlQml0bWFwLiBJdAorICAg
ICAgICByZXByZXNlbnRzIHRoZSBiYWNraW5nIHN0b3JlIG9mIGFuIEltYWdlQml0bWFwLiBDdXJy
ZW50bHkgaXQgZW5jYXBzdWxhdGVzCisgICAgICAgIGFuIEltYWdlQnVmZmVyIGFuZCB0aGUgbmV3
IGVudW0gU2VyaWFsaXphdGlvblN0YXRlLiBJbiB0aGUgZnV0dXJlLCBpdCBjYW4KKyAgICAgICAg
YmUgZXh0ZW5kZWQgdG8gZW5jYXBzdWxhdGUgZWl0aGVyIGEgdGV4dHVyZSBvciBhbiBJbWFnZUJ1
ZmZlci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OkNsb25lRGVzZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
RGVzZXJpYWxpemVyOjpyZWFkVHJhbnNmZXJyZWRJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6Cisg
ICAgICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRt
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRy
YW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDoKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwU291cmNlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6SW1hZ2VCaXRtYXBTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6dGFrZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQml0bWFwU291cmNlOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBodG1s
L0ltYWdlQml0bWFwU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRt
YXBTb3VyY2U6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwU291cmNlOjpwcmVtdWx0aXBseUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwU291cmNlOjpmb3JjaWJseVByZW11bHRpcGx5QWxwaGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OnNlcmlhbGl6YXRpb25TdGF0ZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisKIDIwMjAtMDktMTggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJRkNdIERvIG5vdCB1c2UgRGlzcGxheTo6TGluZSBnZW9tZXRyeSBpbiBsYXlvdXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDQ2YjY1ZDBlYTViNDU2N2E0YWM2NzU5NWY3Yzk5NGU1MTc2
MmQyYmYuLmFhNjM5M2MwYWVmNmUyY2FhOWIwY2ZhZWExM2Y0MWY3OWM5YjQ3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtNjQxLDYgKzY0MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBodG1sL0hUTUxVbmtub3duRWxlbWVudC5oCiAgICAgaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmgKICAgICBodG1sL0ltYWdlQml0bWFwLmgKKyAgICBodG1sL0ltYWdlQml0
bWFwU291cmNlLmgKICAgICBodG1sL0ltYWdlRGF0YS5oCiAgICAgaHRtbC9JbWFnZURvY3VtZW50
LmgKICAgICBodG1sL0lucHV0TW9kZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGMwZmU5NDAxYzAzZjA4
ZTFhMGMxM2ZhMTI0N2Y3MGMyZjg0MmI2ZjcuLmMyMzMzZmIyZjE3YjYzMDlmYmY2YzJmOWRiNmE4
YjcxMTlkYTRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMTgzLDYgKzExODMsNyBAQCBodG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCiBodG1sL0hUTUxXQlJFbGVtZW50LmNwcAogaHRtbC9IaWRkZW5J
bnB1dFR5cGUuY3BwCiBodG1sL0ltYWdlQml0bWFwLmNwcAoraHRtbC9JbWFnZUJpdG1hcFNvdXJj
ZS5jcHAKIGh0bWwvSW1hZ2VEYXRhLmNwcAogaHRtbC9JbWFnZURvY3VtZW50LmNwcAogaHRtbC9J
bWFnZUlucHV0VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkYTlhOWEyOTNlMjU0MThjYjJjZGZjYjk4MDAyMDdjYTg4
ODQzMzNiLi5iNGQzMWUxMWM3MjE2OWY3ZDRlOWIyM2I4Yjg4YzI1NDc5MjFmNjhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MTU2LDYgKzIxNTYsNyBAQAogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMz
MjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1By
b3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEw
MEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxQjQ5NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3
MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtOTg3NSw2ICs5ODc2LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1
OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFw
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIElt
YWdlQml0bWFwU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBB
bmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVE
MzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjMwMTYsNiArMjMwMTksOCBAQAogCQkJCTMxRDI2QkMxMUY4NkQxOEIwMDhGRjI1
NSAvKiBJbWFnZUJpdG1hcC5pZGwgKi8sCiAJCQkJMzFEMjZCQzAxRjg2RDE4QTAwOEZGMjU1IC8q
IEltYWdlQml0bWFwT3B0aW9ucy5oICovLAogCQkJCTMxRDI2QkJEMUY4NkQxODcwMDhGRjI1NSAv
KiBJbWFnZUJpdG1hcE9wdGlvbnMuaWRsICovLAorCQkJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQz
QiAvKiBJbWFnZUJpdG1hcFNvdXJjZS5jcHAgKi8sCisJCQkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5
RDNCIC8qIEltYWdlQml0bWFwU291cmNlLmggKi8sCiAJCQkJQTc3OTc5MTMwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MTQwRDZCOUQwQzAwMzg1MUI5IC8q
IEltYWdlRGF0YS5oICovLAogCQkJCUE3Nzk3OTE1MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURh
dGEuaWRsICovLApAQCAtMzE2NzIsNiArMzE2NzcsNyBAQAogCQkJCTMxODE1QTMxMUY5QTZDOEYw
MEZDQkY4OSAvKiBJbWFnZUJpdG1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3OTAzQjMxRjg2
Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFCNDk3NDI1MTJCQTNCMDBG
RTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3NWRl
YjZiY2M4ODg0ZjBlODEuLmY0YTA3MDUxOWZiYWIzMjQ1NDg4ODhkMzE0ZWQ3OTdlMWZhMDE2NGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtMTA0Myw5ICsxMDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIHdyaXRlKEltYWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8
dWludDhfdD4oaW1hZ2VCaXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhhKCkpKTsKLSAgICAg
ICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9yY2libHlQcmVtdWx0
aXBseUFscGhhKCkpKTsKKyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VC
aXRtYXAuc2VyaWFsaXphdGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDxpbnQzMl90Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAgICAgIHdyaXRlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHdyaXRl
KHN0YXRpY19jYXN0PGRvdWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSkpOwpAQCAtMTkz
MSw3ICsxOTI5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAg
IHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3VyY2U+JiYgaW1hZ2VTb3VyY2Vz
CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52
YXNlcwogI2VuZGlmCkBAIC0xOTQzLDcgKzE5NDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
anNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpVbnNwZWNpZmllZEVycm9yKTsKLSAg
ICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1
ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1h
Z2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocywgc2hhcmVkQnVmZmVy
cywgV1RGTW92ZShpbWFnZVNvdXJjZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICAgICAsIFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpA
QCAtMTk5Niw3ICsxOTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CiAg
ICAgfTsKIAotICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5
KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVm
ZmVycywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIKKyAgICBDbG9uZURlc2VyaWFsaXpl
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9y
dHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9y
PEltYWdlQml0bWFwU291cmNlPiYmIGltYWdlU291cmNlcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBidWZmZXIKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNj
cmVlbkNhbnZhc2VzID0geyB9CiAjZW5kaWYKQEAgLTIwMTQsOCArMjAxMiw4IEBAIHByaXZhdGU6
CiAgICAgICAgICwgbV9tZXNzYWdlUG9ydHMobWVzc2FnZVBvcnRzKQogICAgICAgICAsIG1fYXJy
YXlCdWZmZXJDb250ZW50cyhhcnJheUJ1ZmZlckNvbnRlbnRzKQogICAgICAgICAsIG1fYXJyYXlC
dWZmZXJzKGFycmF5QnVmZmVyQ29udGVudHMgPyBhcnJheUJ1ZmZlckNvbnRlbnRzLT5zaXplKCkg
OiAwKQotICAgICAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKLSAg
ICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlQnVmZmVycy5zaXplKCkpCisgICAgICAgICwg
bV9pbWFnZVNvdXJjZXMoV1RGTW92ZShpbWFnZVNvdXJjZXMpKQorICAgICAgICAsIG1faW1hZ2VC
aXRtYXBzKG1faW1hZ2VTb3VyY2VzLnNpemUoKSkKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZB
UykKICAgICAgICAgLCBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hl
ZE9mZnNjcmVlbkNhbnZhc2VzKSkKICAgICAgICAgLCBtX29mZnNjcmVlbkNhbnZhc2VzKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcy5zaXplKCkpCkBAIC0yMDI4LDcgKzIwMjYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAgICB9CiAKLSAgICBD
bG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJD
b250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+
PiYmIGltYWdlQnVmZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250
ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1
ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMs
IFZlY3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZG
U0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVk
T2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAg
LTIwNDksOCArMjA0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9ibG9iVVJMcyhibG9iVVJM
cykKICAgICAgICAgLCBtX2Jsb2JGaWxlUGF0aHMoYmxvYkZpbGVQYXRocykKICAgICAgICAgLCBt
X3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVmZmVycykKLSAgICAgICAgLCBtX2ltYWdlQnVmZmVycyhX
VEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1hcHMobV9pbWFnZUJ1
ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1faW1hZ2VTb3VyY2VzKFdURk1vdmUoaW1hZ2VTb3Vy
Y2VzKSkKKyAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlU291cmNlcy5zaXplKCkpCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9kZXRhY2hlZE9mZnNjcmVl
bkNhbnZhc2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykpCiAgICAgICAgICwg
bV9vZmZzY3JlZW5DYW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMuc2l6ZSgpKQpA
QCAtMjg4MywxMyArMjg4MSwxMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgdWludDMyX3Qg
aW5kZXg7CiAgICAgICAgIGJvb2wgaW5kZXhTdWNjZXNzZnVsbHlSZWFkID0gcmVhZChpbmRleCk7
Ci0gICAgICAgIGlmICghaW5kZXhTdWNjZXNzZnVsbHlSZWFkIHx8IGluZGV4ID49IG1faW1hZ2VC
dWZmZXJzLnNpemUoKSkgeworICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBp
bmRleCA+PSBtX2ltYWdlU291cmNlcy5zaXplKCkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1f
aW1hZ2VCaXRtYXBzW2luZGV4XSkKLSAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9
IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVmZmVycy5hdChpbmRleCkpKTsK
KyAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFwOjpjcmVhdGUo
V1RGTW92ZShtX2ltYWdlU291cmNlcy5hdChpbmRleCkpKTsKIAogICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjAsMTMgQEAgcHJpdmF0ZToKIAogICAgIEpTVmFs
dWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qgb3JpZ2luQ2xlYW47
Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAgdWludDhfdCBmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFsaXphdGlvblN0YXRl
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50MzJfdCBsb2dpY2Fs
SGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVhZChvcmlnaW5DbGVh
bikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8
ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikp
IHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwgIXJlYWQobG9naWNh
bFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUp
IHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0yOTk5LDcgKzI5
OTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsgSW50UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNfY2FzdDxib29sPihw
cmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdU
Rk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2Vy
aWFsaXphdGlvblN0YXRlKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsK
ICAgICB9CiAKQEAgLTM0MzQsNyArMzQzMCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9ibG9iVVJMczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JGaWxlUGF0aHM7CiAgICAg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX3NoYXJlZEJ1ZmZlcnM7Ci0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPEltYWdlQml0bWFwU291
cmNlPiBtX2ltYWdlU291cmNlczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gbV9p
bWFnZUJpdG1hcHM7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXNlczsKQEAgLTM2NTgsNyArMzY1NCw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgc3RkOjp1bmlx
CiAgICAgbV9tZW1vcnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVm
ZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlx
dWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJh
eSwgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0
cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZl
Y3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2
NjksNyArMzY2NSw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjCiAgICAgOiBtX2RhdGEoV1RG
TW92ZShidWZmZXIpKQogICAgICwgbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShh
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpKQogICAgICwgbV9zaGFyZWRCdWZmZXJDb250ZW50c0Fy
cmF5KFdURk1vdmUoc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSkpCi0gICAgLCBtX2ltYWdlQnVm
ZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCisgICAgLCBtX2ltYWdlU291cmNlcyhXVEZNb3Zl
KGltYWdlU291cmNlcykpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgLCBtX2Rl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
KSkKICNlbmRpZgpAQCAtMzY5OSw5ICszNjk1LDkgQEAgc2l6ZV90IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QoKSBjb25zdAogICAgICAgICAgICAgY29zdCArPSBjb250
ZW50LnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbWFn
ZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3QpCi0gICAgICAgICAgICBjb3N0ICs9
IHBhaXIuZmlyc3QtPm1lbW9yeUNvc3QoKTsKKyAgICBmb3IgKGF1dG8mIGltYWdlU291cmNlIDog
bV9pbWFnZVNvdXJjZXMpIHsKKyAgICAgICAgaWYgKGltYWdlU291cmNlLmJ1ZmZlcigpKQorICAg
ICAgICAgICAgY29zdCArPSBpbWFnZVNvdXJjZS5idWZmZXIoKS0+bWVtb3J5Q29zdCgpOwogICAg
IH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQpAQCAtMzkyNSw3ICszOTIxLDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2IKICAgICBpZiAoYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
LnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXJzID0gSW1hZ2VCaXRt
YXA6OmRldGFjaEJpdG1hcHMoV1RGTW92ZShpbWFnZUJpdG1hcHMpKTsKKyAgICBhdXRvIGltYWdl
U291cmNlcyA9IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRtYXBz
KSk7CiAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gZGV0YWNoZWRDYW52YXNlczsKQEAgLTM5
MzMsNyArMzkyOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iCiAgICAgICAgIGRldGFjaGVk
Q2FudmFzZXMuYXBwZW5kKG9mZnNjcmVlbkNhbnZhcy0+ZGV0YWNoKCkpOwogI2VuZGlmCiAKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZm
ZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSA/
IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlQnVmZmVycykK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShi
dWZmZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2Fn
ZSA/IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAgICAgICAsIFdURk1v
dmUoZGV0YWNoZWRDYW52YXNlcykKICNlbmRpZgpAQCAtMzk4OSw3ICszOTg1LDcgQEAgSlNWYWx1
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LAogCiBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2Fn
ZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9u
cykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VQb3J0cywgV1RGTW92ZShtX2ltYWdlQnVmZmVycykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2ltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBXVEZNb3ZlKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAyMGE5N2I2YmU1NzNlYzE0
NTU0MjM4NDAzMjk4NTI2YWNlNzVhZTdhLi4yZGEzYzY1ZTYxMDllM2QxNjEwMDE1ZjNkN2YyYmUz
YTdhYjM2OWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaApAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBEZXRhY2hlZE9mZnNjcmVl
bkNhbnZhczsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3MgSW1hZ2VCaXRtYXA7CiBjbGFzcyBNZXNz
YWdlUG9ydDsKK2NsYXNzIEltYWdlQml0bWFwU291cmNlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
ZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTsKIApAQCAtMTE3LDcgKzExOCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3Rk
Ojp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25T
dGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5p
cXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3Vy
Y2U+JiYgaW1hZ2VTb3VyY2VzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAg
ICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7
IH0KICNlbmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IG1fZGF0YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPElt
YWdlQml0bWFwU291cmNlPiBtX2ltYWdlU291cmNlczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NB
TlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFz
Pj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VCaXRtYXAuY3BwCmluZGV4IGEwNGRjMDk5NmIwNWY0MjIwZjc5MTgwZGU3ZWZlMDgxNWNhN2U4
MDAuLjdhNDlhYmMzNWI0MzFlYTE5NGE2ODk1NDM0Y2JkZmI0NWRmMDgxMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02OSwyMSArNjksMTIgQEAgc3RhdGljIFJlbmRlcmlu
Z01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpLCBidWZmZXJSZW5kZXJpbmdNb2RlKSk7CisgICAgcmV0dXJu
IGNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUpIH0pOwogfQogCi1SZWY8SW1hZ2VCaXRt
YXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+JiYgYnVmZmVyKQorUmVmPElt
YWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwU291cmNlJiYgaW1hZ2VT
b3VyY2UpCiB7Ci0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJ1ZmZlci5m
aXJzdCkpOwotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gYnVmZmVyLnNlY29uZC5v
cmlnaW5DbGVhbjsKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gYnVmZmVy
LnNlY29uZC5wcmVtdWx0aXBseUFscGhhOwotICAgIGltYWdlQml0bWFwLT5tX2ZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQuZm9yY2libHlQcmVtdWx0aXBseUFscGhhOwot
ICAgIHJldHVybiBpbWFnZUJpdG1hcDsKLX0KLQotUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShidWZmZXIpKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShpbWFnZVNvdXJjZSkpKTsK
IH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNl
LCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHBy
b21pc2UpCkBAIC05NSwxNSArODYsMTQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICk7
CiB9CiAKLVZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1h
Z2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBz
KFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCitWZWN0b3I8SW1hZ2VCaXRt
YXBTb3VyY2U+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiYmIGJpdG1hcHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gYnVmZmVy
czsKKyAgICBWZWN0b3I8SW1hZ2VCaXRtYXBTb3VyY2U+IGJ1ZmZlcnM7CiAgICAgZm9yIChhdXRv
JiBiaXRtYXAgOiBiaXRtYXBzKQotICAgICAgICBidWZmZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihiaXRtYXAtPnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKSwgSW1hZ2VCdWZmZXI6OlNlcmlh
bGl6YXRpb25TdGF0ZSB7IGJpdG1hcC0+b3JpZ2luQ2xlYW4oKSwgYml0bWFwLT5wcmVtdWx0aXBs
eUFscGhhKCksIGJpdG1hcC0+Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgfSkpOworICAgICAg
ICBidWZmZXJzLmFwcGVuZCgqYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBTb3VyY2UoKSk7CiAgICAg
cmV0dXJuIGJ1ZmZlcnM7CiB9CiAKLQogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1h
cDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBpbnQgc3gs
IGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkK
IHsKICAgICAvLyAxLiBJZiBlaXRoZXIgdGhlIHN3IG9yIHNoIGFyZ3VtZW50cyBhcmUgc3BlY2lm
aWVkIGJ1dCB6ZXJvLCByZXR1cm4gYSBwcm9taXNlCkBAIC0yNDMsMTMgKzIzMywxNSBAQCB2b2lk
IEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIoYm9vbCBvcmlnaW5DbGVh
biwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIFJlc29sdmUgUHJvbWlzZSB3aXRoIGEgYmxhbmsg
MXgxIEltYWdlQml0bWFwLgogICAgIGF1dG8gYml0bWFwRGF0YSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKDEsIDEpLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsKIAotICAgIC8vIDcuIENy
ZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNy
ZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDkuIElmIHRoZSBvcmlnaW4gb2Yg
aW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBvcmlnaW4gc3BlY2lm
aWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwgdGhlbiBzZXQgdGhl
IG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncwogICAgIC8vICAg
IGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5DbGVhbiA9IG9yaWdp
bkNsZWFuOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25T
dGF0ZTsKKyAgICBpZiAob3JpZ2luQ2xlYW4pCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5h
ZGQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisgICAgCisgICAgLy8gNy4gQ3Jl
YXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3Jl
YXRlKHsgV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXphdGlvblN0YXRlIH0pOwogCiAgICAg
Ly8gMTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBz
dGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRo
ZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTM3MywxNiArMzY1LDE4
IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0
UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFn
ZSgqaW1hZ2VGb3JSZW5kZXIsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVy
blZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMu
cmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmlt
YWdlT3JpZW50YXRpb24pIH0pOwogCi0gICAgLy8gNy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFw
IG9iamVjdC4KLSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0
YSkpOwotCiAgICAgLy8gOS4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdzIGltYWdlIGlzIG5vdCB0
aGUgc2FtZSBvcmlnaW4gYXMgdGhlIG9yaWdpbiBzcGVjaWZpZWQgYnkgdGhlCiAgICAgLy8gICAg
ZW50cnkgc2V0dGluZ3Mgb2JqZWN0LCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2Yg
dGhlIEltYWdlQml0bWFwIG9iamVjdCdzCiAgICAgLy8gICAgYml0bWFwIHRvIGZhbHNlLgorICAg
IE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBp
ZiAoIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKQorICAgICAgICBzZXJpYWxpemF0aW9uU3Rh
dGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRt
YXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRzT3JpZ2luKCpjYWNoZWRJbWFnZSk7CisgICAgaWYg
KGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVs
dGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAg
ICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRp
cGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBo
YVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5
QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8v
IDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1h
cCA9IGNyZWF0ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsK
IAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcg
dGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ug
d2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC00MzksMTUg
KzQzMywxNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBDYW52YXNCYXNlJiBjYW52YXMsIEltYQogICAgIEZsb2F0UmVjdCBkZXN0UmVj
dChGbG9hdFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5k
cmF3SW1hZ2UoKmltYWdlRm9yUmVuZGVyLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIAotICAgIC8vIDMuIENyZWF0ZSBhIG5ldyBJbWFn
ZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJp
dG1hcERhdGEpKTsKLQogICAgIC8vIDUuIFNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhl
IEltYWdlQml0bWFwIG9iamVjdCdzIGJpdG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhcwogICAgIC8v
ICAgIHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgY2FudmFzIGVsZW1lbnQncyBiaXRtYXAu
CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlOwor
ICAgIGlmIChjYW52YXMub3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRl
LmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAotICAgIGltYWdlQml0bWFw
LT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7CisgICAgaWYgKGFscGhhUHJl
bXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBo
YSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEp
OwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRp
cGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDMuIENyZWF0
ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0
ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsKIAogICAgIC8v
IDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVw
cyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTE0LDE1ICs1MTAsMTggQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoYywgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkpOwogICAgIH0KIAotICAg
IC8vIDUuIExldCBpbWFnZUJpdG1hcCBiZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAg
YXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8v
IDYuMy4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdzIHZpZGVvIGlzIG5vdCBzYW1lIG9yaWdpbiB3
aXRoIGVudHJ5CiAgICAgLy8gICAgICBzZXR0aW5ncyBvYmplY3QncyBvcmlnaW4sIHRoZW4gc2V0
IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZgogICAgIC8vICAgICAgaW1hZ2UncyBiaXRtYXAgdG8g
ZmFsc2UuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRzT3JpZ2luKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKTsKKyAgICBPcHRp
b25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGU7CisgICAgaWYgKCF0
YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdpbigpLCAqdmlk
ZW8pKQorICAgICAgICBzZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmIChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnBy
ZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
CisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVt
dWx0aXBseUFscGhhKTsKKworICAgIC8vIDUuIExldCBpbWFnZUJpdG1hcCBiZSBhIG5ldyBJbWFn
ZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZSh7IFdURk1vdmUo
Yml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsKIAogICAgIC8vIDYuNC4xLiBSZXNv
bHZlIHAgd2l0aCBpbWFnZUJpdG1hcC4KICAgICBwcm9taXNlLnJlc29sdmUoV1RGTW92ZShpbWFn
ZUJpdG1hcCkpOwpAQCAtNTY2LDIwICs1NjUsMjQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRl
UHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlQml0bWFwPiYgZXgK
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRTaXplKTsKICAgICBi
aXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZUZvclJlbmRlciwgZGVzdFJlY3Qs
IHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVh
bGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRh
dGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAKLSAgICAv
LyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgotICAgIGF1dG8gaW1hZ2VCaXRt
YXAgPSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7Ci0KICAgICAvLyA1LiBTZXQgdGhlIG9y
aWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhl
IHNhbWUKICAgICAvLyAgICB2YWx1ZSBhcyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGJp
dG1hcCBvZiB0aGUgaW1hZ2UgYXJndW1lbnQuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xl
YW4gPSBleGlzdGluZ0ltYWdlQml0bWFwLT5vcmlnaW5DbGVhbigpOworICAgIE9wdGlvblNldDxT
ZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBpZiAoZXhpc3RpbmdJ
bWFnZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFk
ZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKKworICAgIGlmIChhbHBoYVByZW11
bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEp
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEp
OwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRp
cGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICAvLyBBdCBs
ZWFzdCBpbiB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLCB3aGVuIGNyZWF0aW5nIGFuIEltYWdl
Qml0bWFwIGZyb20KKyAgICAgICAgLy8gYW4gSW1hZ2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVs
IG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVuCisgICAgICAgIC8vIHRob3Vn
aCB0aGUgYWxwaGEgbW9kZSBvZiB0aGUgaW50ZXJuYWwgc3VyZmFjZSBjbGFpbXMgaXQgaXMuIElu
c3RydWN0CisgICAgICAgIC8vIHVzZXJzIG9mIHRoaXMgSW1hZ2VCaXRtYXAgdG8gaWdub3JlIHRo
ZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4KKyAgICAgICAgc2VyaWFsaXphdGlvblN0
YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OkZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSk7Cisg
ICAgfQogCi0gICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUgR3JhcGhpY3MgYmFja2VuZCwgd2hl
biBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCi0gICAgLy8gYW4gSW1hZ2VCaXRtYXAsIHRo
ZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVuCi0g
ICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRlcm5hbCBzdXJmYWNlIGNsYWlt
cyBpdCBpcy4gSW5zdHJ1Y3QKLSAgICAvLyB1c2VycyBvZiB0aGlzIEltYWdlQml0bWFwIHRvIGln
bm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1vZGUuCi0gICAgaW1hZ2VCaXRtYXAt
Pm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlB
bHBoYTsKKyAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgorICAgIGF1
dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJpdG1hcERhdGEpLCBzZXJpYWxpemF0
aW9uU3RhdGUgfSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRp
bnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0
aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4K
QEAgLTc1Miw5ICs3NTUsMTEgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcigK
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRTaXplKTsKICAgICBi
aXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgZGVzdFJlY3QsIHNvdXJjZVJl
Y3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclJl
c2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9y
aWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAKLSAgICBhdXRvIGltYWdl
Qml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOworICAgIE9wdGlvblNldDxTZXJp
YWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSA9IFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW47CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBs
eUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxp
emF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJl
bXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBo
YShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJp
dG1hcERhdGEpLCBzZXJpYWxpemF0aW9uU3RhdGUgfSk7CiAKICAgICBwcm9taXNlLnJlc29sdmUo
V1RGTW92ZShpbWFnZUJpdG1hcCkpOwogfQpAQCAtODEzLDQ3ICs4MTgsMjkgQEAgdm9pZCBJbWFn
ZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPElt
YWdlRGF0YT4mIGltYWcKICAgICBiaXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCp0ZW1wQml0bWFwRGF0YSwgZGVzdFJlY3QsIHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5y
ZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1h
Z2VPcmllbnRhdGlvbikgfSk7CiAKICAgICAvLyA2LjQuMS4gUmVzb2x2ZSBwIHdpdGggSW1hZ2VC
aXRtYXAuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEp
KTsKKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKHsgV1RGTW92ZShiaXRtYXBEYXRhKSB9
KTsKICAgICAvLyBUaGUgcmVzdWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxw
aGEgcHJlbXVsdGlwbGljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgIHByb21p
c2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUltYWdlQml0bWFwOjpJbWFn
ZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQotICAgIDogbV9i
aXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkKK0ltYWdlQml0bWFwOjpJbWFnZUJpdG1hcChJbWFn
ZUJpdG1hcFNvdXJjZSYmIGltYWdlU291cmNlKQorICAgIDogbV9pbWFnZVNvdXJjZShXVEZNb3Zl
KGltYWdlU291cmNlKSkKIHsKLSAgICBBU1NFUlQobV9iaXRtYXBEYXRhKTsKKyAgICBBU1NFUlQo
bV9pbWFnZVNvdXJjZSk7CiB9CiAKIEltYWdlQml0bWFwOjp+SW1hZ2VCaXRtYXAoKSA9IGRlZmF1
bHQ7CiAKLXVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0CitPcHRpb25hbDxJbWFn
ZUJpdG1hcFNvdXJjZT4gSW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJpdG1hcFNvdXJjZSgpCiB7Ci0g
ICAgaWYgKG1fZGV0YWNoZWQgfHwgIW1fYml0bWFwRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/Ci0gICAgcmV0dXJuIG1fYml0
bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0aCgpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1faW1hZ2VTb3VyY2UsIFdURjo6bnVsbG9wdCk7CiB9CiAKLXVuc2lnbmVkIEltYWdlQml0bWFw
OjpoZWlnaHQoKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1h
cDo6dGFrZUltYWdlQnVmZmVyKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBE
YXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdo
dCBoZWlnaHQ/Ci0gICAgcmV0dXJuIG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQo
KTsKKyAgICBpZiAoYXV0byBpbWFnZVNvdXJjZSA9IHRha2VJbWFnZUJpdG1hcFNvdXJjZSgpKQor
ICAgICAgICByZXR1cm4gaW1hZ2VTb3VyY2UtPnRha2VJbWFnZUJ1ZmZlcigpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIEltYWdlQml0bWFwOjpjbG9zZSgpCi17Ci0gICAgbV9kZXRh
Y2hlZCA9IHRydWU7Ci0gICAgbV9iaXRtYXBEYXRhID0gbnVsbHB0cjsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9z
ZSgpCi17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgcmV0dXJuIFdURk1vdmUobV9iaXRt
YXBEYXRhKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5oCmluZGV4IGJmMGRkNWUxZDc0OTIxOTRlMjdjNmMyN2Q3ODZhYTFiMzIyYTlkZDku
Ljk0OTViMDc2NmEyZGZlYWE3MmRjNGVkYzMzYzMzN2Y4YzcxZjczNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdl
Qml0bWFwU291cmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtODMsMzggKzgzLDMyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBTb3VyY2UmJiwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgUHJv
bWlzZSYmKTsKIAogICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShJbnRTaXplKTsK
LSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+JiYpOwor
ICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShJbWFnZUJpdG1hcFNvdXJjZSYmKTsK
IAogICAgIH5JbWFnZUJpdG1hcCgpOwogCi0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdDsKLSAg
ICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgSW1hZ2VC
dWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgPyBtX2ltYWdlU291
cmNlLT5idWZmZXIoKSA6IG51bGxwdHI7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+
IHNlcmlhbGl6YXRpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgPyBtX2lt
YWdlU291cmNlLT5zZXJpYWxpemF0aW9uU3RhdGUoKSA6IFNlcmlhbGl6YXRpb25TdGF0ZSgpOyB9
CiAKLSAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2RldGFjaGVkOyB9Cisg
ICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU291cmNlID8gbV9pbWFn
ZVNvdXJjZS0+d2lkdGgoKSA6IDA7IH0KKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlU291cmNlID8gbV9pbWFnZVNvdXJjZS0+aGVpZ2h0KCkgOiAwOyB9CiAKLSAg
ICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9iaXRtYXBEYXRhLmdldCgpOyB9Cisg
ICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgJiYgbV9p
bWFnZVNvdXJjZS0+b3JpZ2luQ2xlYW4oKTsgfQorICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgJiYgbV9pbWFnZVNvdXJjZS0+cHJlbXVsdGlw
bHlBbHBoYSgpOyB9CisgICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlU291cmNlICYmIG1faW1hZ2VTb3VyY2UtPmZvcmNpYmx5UHJlbXVsdGlw
bHlBbHBoYSgpOyB9CiAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQorICAgIE9wdGlvbmFsPEltYWdlQml0bWFwU291cmNlPiB0YWtlSW1hZ2VC
aXRtYXBTb3VyY2UoKTsKKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9p
bWFnZVNvdXJjZS5oYXNWYWx1ZSgpOyB9CisgICAgdm9pZCBjbG9zZSgpIHsgdGFrZUltYWdlQml0
bWFwU291cmNlKCk7IH0KIAotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBh
biBJbWFnZSBjb21pbmcgZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBp
Y2FsbHkgaG9ub3JzCi0gICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2Ug
LSBDR0ltYWdlQWxwaGFJbmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgotICAg
IC8vIEltYWdlQml0bWFwcyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0
aW9uIGlzIG5vdCBhY2N1cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQotICAgIC8vIHRvbGQgdG8g
aWdub3JlIHRoZSBhbHBoYSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhh
IGNoYW5uZWwuCi0gICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMg
VmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZl
cjo6U2VyaWFsaXphdGlvblN0YXRlPj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJik7CisgICAgc3RhdGljIFZlY3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4gZGV0YWNo
Qml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1hZ2VPYnNlcnZlcjsKICAgICBmcmllbmQgY2xhc3Mg
UGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJik7Ci0gICAgSW1hZ2VCaXRtYXAoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBJbWFnZUJpdG1hcChJbWFnZUJpdG1hcFNv
dXJjZSYmKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxhbmtJbWFnZUJ1ZmZlcihi
b29sIG9yaWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzMsMTEgKzEyNyw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgUmVmUHRyPFR5cGVkT01DU1NJbWFnZVZhbHVlPiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBP
cHRpb25hbDxJbnRSZWN0PiwgUHJvbWlzZSYmKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVGcm9t
QnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwgU3RyaW5nIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBVUkwmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgT3B0
aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBib29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUgfTsKLSAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBo
YSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNl
IH07CisgICAgT3B0aW9uYWw8SW1hZ2VCaXRtYXBTb3VyY2U+IG1faW1hZ2VTb3VyY2U7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBTb3VyY2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5Mjk5NGMwYTA1NDU3YjA5ZTM3NGJlZTBkOGNlZTI2MmVhNWQ2ZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNlLmNwcApAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
Qml0bWFwU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCaXRtYXBTb3Vy
Y2U6OkltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBiaXRt
YXBEYXRhLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUp
CisgICAgOiBtX2JpdG1hcERhdGEoV1RGTW92ZShiaXRtYXBEYXRhKSkKKyAgICAsIG1fc2VyaWFs
aXphdGlvblN0YXRlKHNlcmlhbGl6YXRpb25TdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9iaXRtYXBE
YXRhKTsKK30KKworSW1hZ2VCdWZmZXIqIEltYWdlQml0bWFwU291cmNlOjpidWZmZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2JpdG1hcERhdGEuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCaXRtYXBTb3VyY2U6OnRha2VJbWFnZUJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIFdURk1vdmUobV9iaXRtYXBEYXRhKTsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRt
YXBTb3VyY2U6OndpZHRoKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmln
aHQgd2lkdGg/CisgICAgcmV0dXJuIG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNh
bFNpemUoKS53aWR0aCgpIDogMDsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRtYXBTb3VyY2U6Omhl
aWdodCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IGhlaWdodD8K
KyAgICByZXR1cm4gbV9iaXRtYXBEYXRhID8gbV9iaXRtYXBEYXRhLT5sb2dpY2FsU2l6ZSgpLmhl
aWdodCgpIDogMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcFNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlOGJkY2NkZjYzNDA4ZDYxNDM3MGVl
MDQzZGI2ZjU4YzU1MmJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwU291cmNlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBTZXJpYWxpemF0aW9u
U3RhdGUgOiB1aW50OF90IHsKKyAgICBPcmlnaW5DbGVhbiAgICAgICAgICAgICAgPSAxIDw8IDAs
CisgICAgUHJlbXVsdGlwbHlBbHBoYSAgICAgICAgID0gMSA8PCAxLAorICAgIEZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSA9IDEgPDwgMgorfTsKKworY2xhc3MgSW1hZ2VCaXRtYXBTb3VyY2Ugewor
cHVibGljOgorICAgIEltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gPSBTZXJpYWxpemF0aW9uU3RhdGU6
Ok9yaWdpbkNsZWFuKTsKKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworCisgICAgdW5z
aWduZWQgd2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKKworICAg
IGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZS5j
b250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsgfQorCisgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29u
dGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsgfQorICAgIC8vIFdo
ZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VCaXRtYXAncyBJ
bWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8vIHRoZSBhbHBoYSBtb2RlIG9m
IHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29yZSBHcmFwaGlj
cyBiYWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9tIEltYWdlQml0
bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxsZXJzIG11c3Qg
YmUKKyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZvcmNpYmx5IHBy
ZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2Vy
aWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEpOyB9CisKKyAgICBPcHRp
b25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gbV9iaXRtYXBEYXRhOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0
aW9uU3RhdGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDE4OWFjMTky
NTQ0ZGM5ZGViNmQ1MzY2M2M4Mjk0MGE2MDEyNzMwMGMuLjYwZWQwN2QwNWU1MzJjNDM0ZjgyMGIx
OTRhOWM4YzA1NTE1YTA0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKQEAgLTI1MCwxMyArMjUwLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+
IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJl
dHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAo
IW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHRydWUsIGZh
bHNlLCBmYWxzZSB9fSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwog
ICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJp
dG1hcD4geyBudWxscHRyIH0gfTsKIAotICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3Jl
YXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsg
b3JpZ2luQ2xlYW4oKSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAgICAgICByZXR1cm4geyBJbWFn
ZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBvcmlnaW5DbGVhbigpID8gSW1hZ2VC
aXRtYXA6OlNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBJbWFnZUJpdG1hcDo6U2Vy
aWFsaXphdGlvblN0YXRlKCkgfSkgfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcAppbmRleCBiNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNl
MGE1Li5kZTFmNzc0Njg2MTdjNzhkMDcwZjQ3NWQyYjI0YzRkODI0NmQ0ZWE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dC5jcHAKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYQog
ICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luQ2xlYW4oKTsKICAgICBlbHNlCiAgICAgICAgIGNh
bnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgY2FudmFzKCktPnNldEltYWdlQnVmZmVy
QW5kTWFya0RpcnR5KGltYWdlQml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCkpOwor
ICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+dGFr
ZUltYWdlQnVmZmVyKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ6OnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4g
aW1hZ2VCaXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAppbmRleCBmYzlhMDM4MjFlZWExOTk3OTVlNDFhNGRmN2QxMTAxNDIwOTkzN2Q1Li5k
MTQ2NDkyYzRhOGRmOTM1Y2FmOTRiOWZiOTU1OTA5YWFkMWNiYWYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTM4LDEyICszOCw2IEBA
IGNsYXNzIERyYXdpbmdDb250ZXh0OwogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7CiBwdWJsaWM6Ci0g
ICAgc3RydWN0IFNlcmlhbGl6YXRpb25TdGF0ZSB7Ci0gICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4g
eyBmYWxzZSB9OwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAg
ICAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgfTsKLQog
ICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4K
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgU2hvdWxkQWNjZWxlcmF0ZSwgU2hvdWxkVXNlRGlzcGxh
eUxpc3QsIFJlbmRlcmluZ1B1cnBvc2UsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyog
PSBudWxscHRyKTsK
</data>
<flag name="commit-queue"
          id="424857"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409245</attachid>
            <date>2020-09-20 13:12:59 -0700</date>
            <delta_ts>2020-09-20 21:14:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200920131258.patch</filename>
            <type>text/plain</type>
            <size>47011</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRhNDdlOTZlZTBmYmUx
ZjUzNGIxZjA2YzI0ODVjN2ZjNDM4MjFiOS4uMTk1NjNjNTZlMTQyYjBmZGI0ZjVjYzIxOTg5MWI2
N2ZkNjI3ZWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIwLTA5LTIwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEltYWdl
Qml0bWFwU291cmNlIGFuZCBtYWtlIGl0IGEgbWVtYmVyIG9mIEltYWdlQml0bWFwLiBJdAorICAg
ICAgICByZXByZXNlbnRzIHRoZSBiYWNraW5nIHN0b3JlIG9mIGFuIEltYWdlQml0bWFwLiBDdXJy
ZW50bHkgaXQgZW5jYXBzdWxhdGVzCisgICAgICAgIGFuIEltYWdlQnVmZmVyIGFuZCB0aGUgbmV3
IGVudW0gU2VyaWFsaXphdGlvblN0YXRlLiBJbiB0aGUgZnV0dXJlLCBpdCBjYW4KKyAgICAgICAg
YmUgZXh0ZW5kZWQgdG8gZW5jYXBzdWxhdGUgZWl0aGVyIGEgdGV4dHVyZSBvciBhbiBJbWFnZUJ1
ZmZlci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OkNsb25lRGVzZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
RGVzZXJpYWxpemVyOjpyZWFkVHJhbnNmZXJyZWRJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6Cisg
ICAgICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRt
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRy
YW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDoKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwU291cmNlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6SW1hZ2VCaXRtYXBTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6dGFrZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQml0bWFwU291cmNlOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBodG1s
L0ltYWdlQml0bWFwU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRt
YXBTb3VyY2U6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwU291cmNlOjpwcmVtdWx0aXBseUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwU291cmNlOjpmb3JjaWJseVByZW11bHRpcGx5QWxwaGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OnNlcmlhbGl6YXRpb25TdGF0ZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisKIDIwMjAtMDktMTggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJRkNdIERvIG5vdCB1c2UgRGlzcGxheTo6TGluZSBnZW9tZXRyeSBpbiBsYXlvdXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDQ2YjY1ZDBlYTViNDU2N2E0YWM2NzU5NWY3Yzk5NGU1MTc2
MmQyYmYuLmFhNjM5M2MwYWVmNmUyY2FhOWIwY2ZhZWExM2Y0MWY3OWM5YjQ3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtNjQxLDYgKzY0MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBodG1sL0hUTUxVbmtub3duRWxlbWVudC5oCiAgICAgaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmgKICAgICBodG1sL0ltYWdlQml0bWFwLmgKKyAgICBodG1sL0ltYWdlQml0
bWFwU291cmNlLmgKICAgICBodG1sL0ltYWdlRGF0YS5oCiAgICAgaHRtbC9JbWFnZURvY3VtZW50
LmgKICAgICBodG1sL0lucHV0TW9kZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGMwZmU5NDAxYzAzZjA4
ZTFhMGMxM2ZhMTI0N2Y3MGMyZjg0MmI2ZjcuLmMyMzMzZmIyZjE3YjYzMDlmYmY2YzJmOWRiNmE4
YjcxMTlkYTRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMTgzLDYgKzExODMsNyBAQCBodG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCiBodG1sL0hUTUxXQlJFbGVtZW50LmNwcAogaHRtbC9IaWRkZW5J
bnB1dFR5cGUuY3BwCiBodG1sL0ltYWdlQml0bWFwLmNwcAoraHRtbC9JbWFnZUJpdG1hcFNvdXJj
ZS5jcHAKIGh0bWwvSW1hZ2VEYXRhLmNwcAogaHRtbC9JbWFnZURvY3VtZW50LmNwcAogaHRtbC9J
bWFnZUlucHV0VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkYTlhOWEyOTNlMjU0MThjYjJjZGZjYjk4MDAyMDdjYTg4
ODQzMzNiLi5iNGQzMWUxMWM3MjE2OWY3ZDRlOWIyM2I4Yjg4YzI1NDc5MjFmNjhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MTU2LDYgKzIxNTYsNyBAQAogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMz
MjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1By
b3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEw
MEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxQjQ5NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3
MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtOTg3NSw2ICs5ODc2LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1
OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFw
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIElt
YWdlQml0bWFwU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBB
bmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVE
MzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjMwMTYsNiArMjMwMTksOCBAQAogCQkJCTMxRDI2QkMxMUY4NkQxOEIwMDhGRjI1
NSAvKiBJbWFnZUJpdG1hcC5pZGwgKi8sCiAJCQkJMzFEMjZCQzAxRjg2RDE4QTAwOEZGMjU1IC8q
IEltYWdlQml0bWFwT3B0aW9ucy5oICovLAogCQkJCTMxRDI2QkJEMUY4NkQxODcwMDhGRjI1NSAv
KiBJbWFnZUJpdG1hcE9wdGlvbnMuaWRsICovLAorCQkJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQz
QiAvKiBJbWFnZUJpdG1hcFNvdXJjZS5jcHAgKi8sCisJCQkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5
RDNCIC8qIEltYWdlQml0bWFwU291cmNlLmggKi8sCiAJCQkJQTc3OTc5MTMwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MTQwRDZCOUQwQzAwMzg1MUI5IC8q
IEltYWdlRGF0YS5oICovLAogCQkJCUE3Nzk3OTE1MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURh
dGEuaWRsICovLApAQCAtMzE2NzIsNiArMzE2NzcsNyBAQAogCQkJCTMxODE1QTMxMUY5QTZDOEYw
MEZDQkY4OSAvKiBJbWFnZUJpdG1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3OTAzQjMxRjg2
Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFCNDk3NDI1MTJCQTNCMDBG
RTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3NWRl
YjZiY2M4ODg0ZjBlODEuLmY0YTA3MDUxOWZiYWIzMjQ1NDg4ODhkMzE0ZWQ3OTdlMWZhMDE2NGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtMTA0Myw5ICsxMDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIHdyaXRlKEltYWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8
dWludDhfdD4oaW1hZ2VCaXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhhKCkpKTsKLSAgICAg
ICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9yY2libHlQcmVtdWx0
aXBseUFscGhhKCkpKTsKKyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VC
aXRtYXAuc2VyaWFsaXphdGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDxpbnQzMl90Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAgICAgIHdyaXRlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHdyaXRl
KHN0YXRpY19jYXN0PGRvdWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSkpOwpAQCAtMTkz
MSw3ICsxOTI5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAg
IHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3VyY2U+JiYgaW1hZ2VTb3VyY2Vz
CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52
YXNlcwogI2VuZGlmCkBAIC0xOTQzLDcgKzE5NDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
anNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpVbnNwZWNpZmllZEVycm9yKTsKLSAg
ICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1
ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1h
Z2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocywgc2hhcmVkQnVmZmVy
cywgV1RGTW92ZShpbWFnZVNvdXJjZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICAgICAsIFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpA
QCAtMTk5Niw3ICsxOTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CiAg
ICAgfTsKIAotICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5
KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVm
ZmVycywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIKKyAgICBDbG9uZURlc2VyaWFsaXpl
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9y
dHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9y
PEltYWdlQml0bWFwU291cmNlPiYmIGltYWdlU291cmNlcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBidWZmZXIKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNj
cmVlbkNhbnZhc2VzID0geyB9CiAjZW5kaWYKQEAgLTIwMTQsOCArMjAxMiw4IEBAIHByaXZhdGU6
CiAgICAgICAgICwgbV9tZXNzYWdlUG9ydHMobWVzc2FnZVBvcnRzKQogICAgICAgICAsIG1fYXJy
YXlCdWZmZXJDb250ZW50cyhhcnJheUJ1ZmZlckNvbnRlbnRzKQogICAgICAgICAsIG1fYXJyYXlC
dWZmZXJzKGFycmF5QnVmZmVyQ29udGVudHMgPyBhcnJheUJ1ZmZlckNvbnRlbnRzLT5zaXplKCkg
OiAwKQotICAgICAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKLSAg
ICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlQnVmZmVycy5zaXplKCkpCisgICAgICAgICwg
bV9pbWFnZVNvdXJjZXMoV1RGTW92ZShpbWFnZVNvdXJjZXMpKQorICAgICAgICAsIG1faW1hZ2VC
aXRtYXBzKG1faW1hZ2VTb3VyY2VzLnNpemUoKSkKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZB
UykKICAgICAgICAgLCBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hl
ZE9mZnNjcmVlbkNhbnZhc2VzKSkKICAgICAgICAgLCBtX29mZnNjcmVlbkNhbnZhc2VzKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcy5zaXplKCkpCkBAIC0yMDI4LDcgKzIwMjYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAgICB9CiAKLSAgICBD
bG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJD
b250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+
PiYmIGltYWdlQnVmZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250
ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1
ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMs
IFZlY3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZG
U0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVk
T2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAg
LTIwNDksOCArMjA0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9ibG9iVVJMcyhibG9iVVJM
cykKICAgICAgICAgLCBtX2Jsb2JGaWxlUGF0aHMoYmxvYkZpbGVQYXRocykKICAgICAgICAgLCBt
X3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVmZmVycykKLSAgICAgICAgLCBtX2ltYWdlQnVmZmVycyhX
VEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1hcHMobV9pbWFnZUJ1
ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1faW1hZ2VTb3VyY2VzKFdURk1vdmUoaW1hZ2VTb3Vy
Y2VzKSkKKyAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlU291cmNlcy5zaXplKCkpCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9kZXRhY2hlZE9mZnNjcmVl
bkNhbnZhc2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykpCiAgICAgICAgICwg
bV9vZmZzY3JlZW5DYW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMuc2l6ZSgpKQpA
QCAtMjg4MywxMyArMjg4MSwxMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgdWludDMyX3Qg
aW5kZXg7CiAgICAgICAgIGJvb2wgaW5kZXhTdWNjZXNzZnVsbHlSZWFkID0gcmVhZChpbmRleCk7
Ci0gICAgICAgIGlmICghaW5kZXhTdWNjZXNzZnVsbHlSZWFkIHx8IGluZGV4ID49IG1faW1hZ2VC
dWZmZXJzLnNpemUoKSkgeworICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBp
bmRleCA+PSBtX2ltYWdlU291cmNlcy5zaXplKCkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1f
aW1hZ2VCaXRtYXBzW2luZGV4XSkKLSAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9
IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVmZmVycy5hdChpbmRleCkpKTsK
KyAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFwOjpjcmVhdGUo
V1RGTW92ZShtX2ltYWdlU291cmNlcy5hdChpbmRleCkpKTsKIAogICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjAsMTMgQEAgcHJpdmF0ZToKIAogICAgIEpTVmFs
dWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qgb3JpZ2luQ2xlYW47
Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAgdWludDhfdCBmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFsaXphdGlvblN0YXRl
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50MzJfdCBsb2dpY2Fs
SGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVhZChvcmlnaW5DbGVh
bikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8
ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikp
IHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwgIXJlYWQobG9naWNh
bFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUp
IHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0yOTk5LDcgKzI5
OTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsgSW50UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNfY2FzdDxib29sPihw
cmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdU
Rk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2Vy
aWFsaXphdGlvblN0YXRlKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsK
ICAgICB9CiAKQEAgLTM0MzQsNyArMzQzMCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9ibG9iVVJMczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JGaWxlUGF0aHM7CiAgICAg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX3NoYXJlZEJ1ZmZlcnM7Ci0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPEltYWdlQml0bWFwU291
cmNlPiBtX2ltYWdlU291cmNlczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gbV9p
bWFnZUJpdG1hcHM7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXNlczsKQEAgLTM2NTgsNyArMzY1NCw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgc3RkOjp1bmlx
CiAgICAgbV9tZW1vcnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVm
ZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlx
dWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJh
eSwgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0
cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZl
Y3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2
NjksNyArMzY2NSw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjCiAgICAgOiBtX2RhdGEoV1RG
TW92ZShidWZmZXIpKQogICAgICwgbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShh
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpKQogICAgICwgbV9zaGFyZWRCdWZmZXJDb250ZW50c0Fy
cmF5KFdURk1vdmUoc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSkpCi0gICAgLCBtX2ltYWdlQnVm
ZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCisgICAgLCBtX2ltYWdlU291cmNlcyhXVEZNb3Zl
KGltYWdlU291cmNlcykpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgLCBtX2Rl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
KSkKICNlbmRpZgpAQCAtMzY5OSw5ICszNjk1LDkgQEAgc2l6ZV90IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QoKSBjb25zdAogICAgICAgICAgICAgY29zdCArPSBjb250
ZW50LnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbWFn
ZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3QpCi0gICAgICAgICAgICBjb3N0ICs9
IHBhaXIuZmlyc3QtPm1lbW9yeUNvc3QoKTsKKyAgICBmb3IgKGF1dG8mIGltYWdlU291cmNlIDog
bV9pbWFnZVNvdXJjZXMpIHsKKyAgICAgICAgaWYgKGltYWdlU291cmNlLmJ1ZmZlcigpKQorICAg
ICAgICAgICAgY29zdCArPSBpbWFnZVNvdXJjZS5idWZmZXIoKS0+bWVtb3J5Q29zdCgpOwogICAg
IH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQpAQCAtMzkyNSw3ICszOTIxLDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2IKICAgICBpZiAoYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
LnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXJzID0gSW1hZ2VCaXRt
YXA6OmRldGFjaEJpdG1hcHMoV1RGTW92ZShpbWFnZUJpdG1hcHMpKTsKKyAgICBhdXRvIGltYWdl
U291cmNlcyA9IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRtYXBz
KSk7CiAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gZGV0YWNoZWRDYW52YXNlczsKQEAgLTM5
MzMsNyArMzkyOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iCiAgICAgICAgIGRldGFjaGVk
Q2FudmFzZXMuYXBwZW5kKG9mZnNjcmVlbkNhbnZhcy0+ZGV0YWNoKCkpOwogI2VuZGlmCiAKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZm
ZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSA/
IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlQnVmZmVycykK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShi
dWZmZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2Fn
ZSA/IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAgICAgICAsIFdURk1v
dmUoZGV0YWNoZWRDYW52YXNlcykKICNlbmRpZgpAQCAtMzk4OSw3ICszOTg1LDcgQEAgSlNWYWx1
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LAogCiBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2Fn
ZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9u
cykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VQb3J0cywgV1RGTW92ZShtX2ltYWdlQnVmZmVycykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2ltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBXVEZNb3ZlKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAyMGE5N2I2YmU1NzNlYzE0
NTU0MjM4NDAzMjk4NTI2YWNlNzVhZTdhLi4yZGEzYzY1ZTYxMDllM2QxNjEwMDE1ZjNkN2YyYmUz
YTdhYjM2OWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaApAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBEZXRhY2hlZE9mZnNjcmVl
bkNhbnZhczsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3MgSW1hZ2VCaXRtYXA7CiBjbGFzcyBNZXNz
YWdlUG9ydDsKK2NsYXNzIEltYWdlQml0bWFwU291cmNlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
ZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTsKIApAQCAtMTE3LDcgKzExOCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3Rk
Ojp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25T
dGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5p
cXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3Vy
Y2U+JiYgaW1hZ2VTb3VyY2VzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAg
ICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7
IH0KICNlbmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IG1fZGF0YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPElt
YWdlQml0bWFwU291cmNlPiBtX2ltYWdlU291cmNlczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NB
TlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFz
Pj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VCaXRtYXAuY3BwCmluZGV4IGEwNGRjMDk5NmIwNWY0MjIwZjc5MTgwZGU3ZWZlMDgxNWNhN2U4
MDAuLjdhNDlhYmMzNWI0MzFlYTE5NGE2ODk1NDM0Y2JkZmI0NWRmMDgxMzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02OSwyMSArNjksMTIgQEAgc3RhdGljIFJlbmRlcmlu
Z01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpLCBidWZmZXJSZW5kZXJpbmdNb2RlKSk7CisgICAgcmV0dXJu
IGNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUpIH0pOwogfQogCi1SZWY8SW1hZ2VCaXRt
YXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+JiYgYnVmZmVyKQorUmVmPElt
YWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwU291cmNlJiYgaW1hZ2VT
b3VyY2UpCiB7Ci0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJ1ZmZlci5m
aXJzdCkpOwotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gYnVmZmVyLnNlY29uZC5v
cmlnaW5DbGVhbjsKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gYnVmZmVy
LnNlY29uZC5wcmVtdWx0aXBseUFscGhhOwotICAgIGltYWdlQml0bWFwLT5tX2ZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQuZm9yY2libHlQcmVtdWx0aXBseUFscGhhOwot
ICAgIHJldHVybiBpbWFnZUJpdG1hcDsKLX0KLQotUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShidWZmZXIpKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShpbWFnZVNvdXJjZSkpKTsK
IH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNl
LCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHBy
b21pc2UpCkBAIC05NSwxNSArODYsMTQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICk7
CiB9CiAKLVZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1h
Z2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBz
KFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCitWZWN0b3I8SW1hZ2VCaXRt
YXBTb3VyY2U+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiYmIGJpdG1hcHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gYnVmZmVy
czsKKyAgICBWZWN0b3I8SW1hZ2VCaXRtYXBTb3VyY2U+IGJ1ZmZlcnM7CiAgICAgZm9yIChhdXRv
JiBiaXRtYXAgOiBiaXRtYXBzKQotICAgICAgICBidWZmZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFp
cihiaXRtYXAtPnRyYW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UoKSwgSW1hZ2VCdWZmZXI6OlNlcmlh
bGl6YXRpb25TdGF0ZSB7IGJpdG1hcC0+b3JpZ2luQ2xlYW4oKSwgYml0bWFwLT5wcmVtdWx0aXBs
eUFscGhhKCksIGJpdG1hcC0+Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgfSkpOworICAgICAg
ICBidWZmZXJzLmFwcGVuZCgqYml0bWFwLT50YWtlSW1hZ2VCaXRtYXBTb3VyY2UoKSk7CiAgICAg
cmV0dXJuIGJ1ZmZlcnM7CiB9CiAKLQogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1h
cDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBpbnQgc3gs
IGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9taXNlJiYgcHJvbWlzZSkK
IHsKICAgICAvLyAxLiBJZiBlaXRoZXIgdGhlIHN3IG9yIHNoIGFyZ3VtZW50cyBhcmUgc3BlY2lm
aWVkIGJ1dCB6ZXJvLCByZXR1cm4gYSBwcm9taXNlCkBAIC0yNDMsMTMgKzIzMywxNSBAQCB2b2lk
IEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIoYm9vbCBvcmlnaW5DbGVh
biwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIFJlc29sdmUgUHJvbWlzZSB3aXRoIGEgYmxhbmsg
MXgxIEltYWdlQml0bWFwLgogICAgIGF1dG8gYml0bWFwRGF0YSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKDEsIDEpLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsKIAotICAgIC8vIDcuIENy
ZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNy
ZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDkuIElmIHRoZSBvcmlnaW4gb2Yg
aW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBvcmlnaW4gc3BlY2lm
aWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwgdGhlbiBzZXQgdGhl
IG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncwogICAgIC8vICAg
IGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5DbGVhbiA9IG9yaWdp
bkNsZWFuOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25T
dGF0ZTsKKyAgICBpZiAob3JpZ2luQ2xlYW4pCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5h
ZGQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisgICAgCisgICAgLy8gNy4gQ3Jl
YXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3Jl
YXRlKHsgV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXphdGlvblN0YXRlIH0pOwogCiAgICAg
Ly8gMTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBz
dGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRo
ZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAgLTM3MywxNiArMzY1LDE4
IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYsIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0
UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFn
ZSgqaW1hZ2VGb3JSZW5kZXIsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVy
blZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMu
cmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmlt
YWdlT3JpZW50YXRpb24pIH0pOwogCi0gICAgLy8gNy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFw
IG9iamVjdC4KLSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0
YSkpOwotCiAgICAgLy8gOS4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdzIGltYWdlIGlzIG5vdCB0
aGUgc2FtZSBvcmlnaW4gYXMgdGhlIG9yaWdpbiBzcGVjaWZpZWQgYnkgdGhlCiAgICAgLy8gICAg
ZW50cnkgc2V0dGluZ3Mgb2JqZWN0LCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2Yg
dGhlIEltYWdlQml0bWFwIG9iamVjdCdzCiAgICAgLy8gICAgYml0bWFwIHRvIGZhbHNlLgorICAg
IE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBp
ZiAoIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKQorICAgICAgICBzZXJpYWxpemF0aW9uU3Rh
dGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRt
YXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRzT3JpZ2luKCpjYWNoZWRJbWFnZSk7CisgICAgaWYg
KGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVs
dGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAg
ICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRp
cGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBo
YVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5
QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8v
IDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1h
cCA9IGNyZWF0ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsK
IAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcg
dGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHByb21pc2Ug
d2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC00MzksMTUg
KzQzMywxNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBDYW52YXNCYXNlJiBjYW52YXMsIEltYQogICAgIEZsb2F0UmVjdCBkZXN0UmVj
dChGbG9hdFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5k
cmF3SW1hZ2UoKmltYWdlRm9yUmVuZGVyLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShv
cHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0
aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIAotICAgIC8vIDMuIENyZWF0ZSBhIG5ldyBJbWFn
ZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJp
dG1hcERhdGEpKTsKLQogICAgIC8vIDUuIFNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhl
IEltYWdlQml0bWFwIG9iamVjdCdzIGJpdG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhcwogICAgIC8v
ICAgIHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgY2FudmFzIGVsZW1lbnQncyBiaXRtYXAu
CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlOwor
ICAgIGlmIChjYW52YXMub3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRl
LmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAotICAgIGltYWdlQml0bWFw
LT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7CisgICAgaWYgKGFscGhhUHJl
bXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBo
YSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEp
OwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRp
cGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDMuIENyZWF0
ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0
ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsKIAogICAgIC8v
IDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVubmluZyB0aGVzZSBzdGVw
cyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTE0LDE1ICs1MTAsMTggQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJ
bkNvbnRleHQoYywgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkpOwogICAgIH0KIAotICAg
IC8vIDUuIExldCBpbWFnZUJpdG1hcCBiZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAg
YXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8v
IDYuMy4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdzIHZpZGVvIGlzIG5vdCBzYW1lIG9yaWdpbiB3
aXRoIGVudHJ5CiAgICAgLy8gICAgICBzZXR0aW5ncyBvYmplY3QncyBvcmlnaW4sIHRoZW4gc2V0
IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZgogICAgIC8vICAgICAgaW1hZ2UncyBiaXRtYXAgdG8g
ZmFsc2UuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRzT3JpZ2luKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKTsKKyAgICBPcHRp
b25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGU7CisgICAgaWYgKCF0
YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdpbigpLCAqdmlk
ZW8pKQorICAgICAgICBzZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAg
IGlmIChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnBy
ZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
CisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVt
dWx0aXBseUFscGhhKTsKKworICAgIC8vIDUuIExldCBpbWFnZUJpdG1hcCBiZSBhIG5ldyBJbWFn
ZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZSh7IFdURk1vdmUo
Yml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsKIAogICAgIC8vIDYuNC4xLiBSZXNv
bHZlIHAgd2l0aCBpbWFnZUJpdG1hcC4KICAgICBwcm9taXNlLnJlc29sdmUoV1RGTW92ZShpbWFn
ZUJpdG1hcCkpOwpAQCAtNTY2LDIwICs1NjUsMjQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRl
UHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPEltYWdlQml0bWFwPiYgZXgK
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRTaXplKTsKICAgICBi
aXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZUZvclJlbmRlciwgZGVzdFJlY3Qs
IHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVh
bGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRh
dGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAKLSAgICAv
LyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgotICAgIGF1dG8gaW1hZ2VCaXRt
YXAgPSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7Ci0KICAgICAvLyA1LiBTZXQgdGhlIG9y
aWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncyBiaXRtYXAgdG8gdGhl
IHNhbWUKICAgICAvLyAgICB2YWx1ZSBhcyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIGJp
dG1hcCBvZiB0aGUgaW1hZ2UgYXJndW1lbnQuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xl
YW4gPSBleGlzdGluZ0ltYWdlQml0bWFwLT5vcmlnaW5DbGVhbigpOworICAgIE9wdGlvblNldDxT
ZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBpZiAoZXhpc3RpbmdJ
bWFnZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFk
ZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKKworICAgIGlmIChhbHBoYVByZW11
bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEp
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEp
OwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRp
cGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICAvLyBBdCBs
ZWFzdCBpbiB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLCB3aGVuIGNyZWF0aW5nIGFuIEltYWdl
Qml0bWFwIGZyb20KKyAgICAgICAgLy8gYW4gSW1hZ2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVs
IG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVuCisgICAgICAgIC8vIHRob3Vn
aCB0aGUgYWxwaGEgbW9kZSBvZiB0aGUgaW50ZXJuYWwgc3VyZmFjZSBjbGFpbXMgaXQgaXMuIElu
c3RydWN0CisgICAgICAgIC8vIHVzZXJzIG9mIHRoaXMgSW1hZ2VCaXRtYXAgdG8gaWdub3JlIHRo
ZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4KKyAgICAgICAgc2VyaWFsaXphdGlvblN0
YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OkZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSk7Cisg
ICAgfQogCi0gICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUgR3JhcGhpY3MgYmFja2VuZCwgd2hl
biBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCi0gICAgLy8gYW4gSW1hZ2VCaXRtYXAsIHRo
ZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVuCi0g
ICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRlcm5hbCBzdXJmYWNlIGNsYWlt
cyBpdCBpcy4gSW5zdHJ1Y3QKLSAgICAvLyB1c2VycyBvZiB0aGlzIEltYWdlQml0bWFwIHRvIGln
bm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1vZGUuCi0gICAgaW1hZ2VCaXRtYXAt
Pm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlB
bHBoYTsKKyAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgorICAgIGF1
dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJpdG1hcERhdGEpLCBzZXJpYWxpemF0
aW9uU3RhdGUgfSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRp
bnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0
aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4K
QEAgLTc1Miw5ICs3NTUsMTEgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcigK
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRwdXRTaXplKTsKICAgICBi
aXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgZGVzdFJlY3QsIHNvdXJjZVJl
Y3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclJl
c2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9y
aWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAKLSAgICBhdXRvIGltYWdl
Qml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOworICAgIE9wdGlvblNldDxTZXJp
YWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSA9IFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW47CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBs
eUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxp
emF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJl
bXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBo
YShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJp
dG1hcERhdGEpLCBzZXJpYWxpemF0aW9uU3RhdGUgfSk7CiAKICAgICBwcm9taXNlLnJlc29sdmUo
V1RGTW92ZShpbWFnZUJpdG1hcCkpOwogfQpAQCAtODEzLDQ3ICs4MTgsMjkgQEAgdm9pZCBJbWFn
ZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPElt
YWdlRGF0YT4mIGltYWcKICAgICBiaXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCp0ZW1wQml0bWFwRGF0YSwgZGVzdFJlY3QsIHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5y
ZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1h
Z2VPcmllbnRhdGlvbikgfSk7CiAKICAgICAvLyA2LjQuMS4gUmVzb2x2ZSBwIHdpdGggSW1hZ2VC
aXRtYXAuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEp
KTsKKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKHsgV1RGTW92ZShiaXRtYXBEYXRhKSB9
KTsKICAgICAvLyBUaGUgcmVzdWx0IGlzIGltcGxpY2l0bHkgb3JpZ2luLWNsZWFuLCBhbmQgYWxw
aGEgcHJlbXVsdGlwbGljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLgogICAgIHByb21p
c2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUltYWdlQml0bWFwOjpJbWFn
ZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQotICAgIDogbV9i
aXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkKK0ltYWdlQml0bWFwOjpJbWFnZUJpdG1hcChJbWFn
ZUJpdG1hcFNvdXJjZSYmIGltYWdlU291cmNlKQorICAgIDogbV9pbWFnZVNvdXJjZShXVEZNb3Zl
KGltYWdlU291cmNlKSkKIHsKLSAgICBBU1NFUlQobV9iaXRtYXBEYXRhKTsKKyAgICBBU1NFUlQo
bV9pbWFnZVNvdXJjZSk7CiB9CiAKIEltYWdlQml0bWFwOjp+SW1hZ2VCaXRtYXAoKSA9IGRlZmF1
bHQ7CiAKLXVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0CitPcHRpb25hbDxJbWFn
ZUJpdG1hcFNvdXJjZT4gSW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJpdG1hcFNvdXJjZSgpCiB7Ci0g
ICAgaWYgKG1fZGV0YWNoZWQgfHwgIW1fYml0bWFwRGF0YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/Ci0gICAgcmV0dXJuIG1fYml0
bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0aCgpOworICAgIHJldHVybiBzdGQ6OmV4Y2hhbmdl
KG1faW1hZ2VTb3VyY2UsIFdURjo6bnVsbG9wdCk7CiB9CiAKLXVuc2lnbmVkIEltYWdlQml0bWFw
OjpoZWlnaHQoKSBjb25zdAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1h
cDo6dGFrZUltYWdlQnVmZmVyKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBE
YXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdo
dCBoZWlnaHQ/Ci0gICAgcmV0dXJuIG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQo
KTsKKyAgICBpZiAoYXV0byBpbWFnZVNvdXJjZSA9IHRha2VJbWFnZUJpdG1hcFNvdXJjZSgpKQor
ICAgICAgICByZXR1cm4gaW1hZ2VTb3VyY2UtPnRha2VJbWFnZUJ1ZmZlcigpOworICAgIHJldHVy
biBudWxscHRyOwogfQogCi12b2lkIEltYWdlQml0bWFwOjpjbG9zZSgpCi17Ci0gICAgbV9kZXRh
Y2hlZCA9IHRydWU7Ci0gICAgbV9iaXRtYXBEYXRhID0gbnVsbHB0cjsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9z
ZSgpCi17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgcmV0dXJuIFdURk1vdmUobV9iaXRt
YXBEYXRhKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5oCmluZGV4IGJmMGRkNWUxZDc0OTIxOTRlMjdjNmMyN2Q3ODZhYTFiMzIyYTlkZDku
Ljk0OTViMDc2NmEyZGZlYWE3MmRjNGVkYzMzYzMzN2Y4YzcxZjczNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdl
Qml0bWFwU291cmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtODMsMzggKzgzLDMyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBTb3VyY2UmJiwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYsIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgUHJv
bWlzZSYmKTsKIAogICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShJbnRTaXplKTsK
LSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+JiYpOwor
ICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShJbWFnZUJpdG1hcFNvdXJjZSYmKTsK
IAogICAgIH5JbWFnZUJpdG1hcCgpOwogCi0gICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdDsKLSAg
ICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgSW1hZ2VC
dWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgPyBtX2ltYWdlU291
cmNlLT5idWZmZXIoKSA6IG51bGxwdHI7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+
IHNlcmlhbGl6YXRpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgPyBtX2lt
YWdlU291cmNlLT5zZXJpYWxpemF0aW9uU3RhdGUoKSA6IFNlcmlhbGl6YXRpb25TdGF0ZSgpOyB9
CiAKLSAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2RldGFjaGVkOyB9Cisg
ICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU291cmNlID8gbV9pbWFn
ZVNvdXJjZS0+d2lkdGgoKSA6IDA7IH0KKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlU291cmNlID8gbV9pbWFnZVNvdXJjZS0+aGVpZ2h0KCkgOiAwOyB9CiAKLSAg
ICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9iaXRtYXBEYXRhLmdldCgpOyB9Cisg
ICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgJiYgbV9p
bWFnZVNvdXJjZS0+b3JpZ2luQ2xlYW4oKTsgfQorICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgJiYgbV9pbWFnZVNvdXJjZS0+cHJlbXVsdGlw
bHlBbHBoYSgpOyB9CisgICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlU291cmNlICYmIG1faW1hZ2VTb3VyY2UtPmZvcmNpYmx5UHJlbXVsdGlw
bHlBbHBoYSgpOyB9CiAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQorICAgIE9wdGlvbmFsPEltYWdlQml0bWFwU291cmNlPiB0YWtlSW1hZ2VC
aXRtYXBTb3VyY2UoKTsKKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9p
bWFnZVNvdXJjZS5oYXNWYWx1ZSgpOyB9CisgICAgdm9pZCBjbG9zZSgpIHsgdGFrZUltYWdlQml0
bWFwU291cmNlKCk7IH0KIAotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBh
biBJbWFnZSBjb21pbmcgZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBp
Y2FsbHkgaG9ub3JzCi0gICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2Ug
LSBDR0ltYWdlQWxwaGFJbmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgotICAg
IC8vIEltYWdlQml0bWFwcyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0
aW9uIGlzIG5vdCBhY2N1cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQotICAgIC8vIHRvbGQgdG8g
aWdub3JlIHRoZSBhbHBoYSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhh
IGNoYW5uZWwuCi0gICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMg
VmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZl
cjo6U2VyaWFsaXphdGlvblN0YXRlPj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdl
Qml0bWFwPj4mJik7CisgICAgc3RhdGljIFZlY3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4gZGV0YWNo
Qml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1hZ2VPYnNlcnZlcjsKICAgICBmcmllbmQgY2xhc3Mg
UGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAgc3RhdGljIFJlZjxJbWFnZUJpdG1hcD4gY3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJik7Ci0gICAgSW1hZ2VCaXRtYXAoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBJbWFnZUJpdG1hcChJbWFnZUJpdG1hcFNv
dXJjZSYmKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxhbmtJbWFnZUJ1ZmZlcihi
b29sIG9yaWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzMsMTEgKzEyNyw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiwgUmVmUHRyPFR5cGVkT01DU1NJbWFnZVZhbHVlPiYsIEltYWdlQml0bWFwT3B0aW9ucyYmLCBP
cHRpb25hbDxJbnRSZWN0PiwgUHJvbWlzZSYmKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVGcm9t
QnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwgU3RyaW5nIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBVUkwmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgT3B0
aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBib29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUgfTsKLSAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBo
YSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNl
IH07CisgICAgT3B0aW9uYWw8SW1hZ2VCaXRtYXBTb3VyY2U+IG1faW1hZ2VTb3VyY2U7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBTb3VyY2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU5Mjk5NGMwYTA1NDU3YjA5ZTM3NGJlZTBkOGNlZTI2MmVhNWQ2ZDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNlLmNwcApAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
Qml0bWFwU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCaXRtYXBTb3Vy
Y2U6OkltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBiaXRt
YXBEYXRhLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUp
CisgICAgOiBtX2JpdG1hcERhdGEoV1RGTW92ZShiaXRtYXBEYXRhKSkKKyAgICAsIG1fc2VyaWFs
aXphdGlvblN0YXRlKHNlcmlhbGl6YXRpb25TdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9iaXRtYXBE
YXRhKTsKK30KKworSW1hZ2VCdWZmZXIqIEltYWdlQml0bWFwU291cmNlOjpidWZmZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2JpdG1hcERhdGEuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCaXRtYXBTb3VyY2U6OnRha2VJbWFnZUJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIFdURk1vdmUobV9iaXRtYXBEYXRhKTsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRt
YXBTb3VyY2U6OndpZHRoKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmln
aHQgd2lkdGg/CisgICAgcmV0dXJuIG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNh
bFNpemUoKS53aWR0aCgpIDogMDsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRtYXBTb3VyY2U6Omhl
aWdodCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IGhlaWdodD8K
KyAgICByZXR1cm4gbV9iaXRtYXBEYXRhID8gbV9iaXRtYXBEYXRhLT5sb2dpY2FsU2l6ZSgpLmhl
aWdodCgpIDogMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcFNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcFNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlOGJkY2NkZjYzNDA4ZDYxNDM3MGVl
MDQzZGI2ZjU4YzU1MmJiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwU291cmNlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBTZXJpYWxpemF0aW9u
U3RhdGUgOiB1aW50OF90IHsKKyAgICBPcmlnaW5DbGVhbiAgICAgICAgICAgICAgPSAxIDw8IDAs
CisgICAgUHJlbXVsdGlwbHlBbHBoYSAgICAgICAgID0gMSA8PCAxLAorICAgIEZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSA9IDEgPDwgMgorfTsKKworY2xhc3MgSW1hZ2VCaXRtYXBTb3VyY2Ugewor
cHVibGljOgorICAgIEltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gPSBTZXJpYWxpemF0aW9uU3RhdGU6
Ok9yaWdpbkNsZWFuKTsKKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworCisgICAgdW5z
aWduZWQgd2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKKworICAg
IGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZS5j
b250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsgfQorCisgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29u
dGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsgfQorICAgIC8vIFdo
ZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VCaXRtYXAncyBJ
bWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8vIHRoZSBhbHBoYSBtb2RlIG9m
IHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29yZSBHcmFwaGlj
cyBiYWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9tIEltYWdlQml0
bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxsZXJzIG11c3Qg
YmUKKyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZvcmNpYmx5IHBy
ZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2Vy
aWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEpOyB9CisKKyAgICBPcHRp
b25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gbV9iaXRtYXBEYXRhOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0
aW9uU3RhdGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDE4OWFjMTky
NTQ0ZGM5ZGViNmQ1MzY2M2M4Mjk0MGE2MDEyNzMwMGMuLjI0MjUwNTE1Mzk1NDQ5NmNhZTNiMzgz
NjUxNzJjYmY5ODQxMzkyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKQEAgLTI1MCwxMyArMjUwLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+
IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJl
dHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAo
IW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHRydWUsIGZh
bHNlLCBmYWxzZSB9fSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwog
ICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJp
dG1hcD4geyBudWxscHRyIH0gfTsKIAotICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3Jl
YXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsg
b3JpZ2luQ2xlYW4oKSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAgICAgICByZXR1cm4geyBJbWFn
ZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBvcmlnaW5DbGVhbigpID8gU2VyaWFs
aXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiA6IFNlcmlhbGl6YXRpb25TdGF0ZSgpIH0pIH07CiAg
ICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggYjUxYjRk
YmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNS4uZGUxZjc3NDY4NjE3Yzc4ZDA3MGY0
NzVkMmIyNGM0ZDgyNDZkNGVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTcsNyArMTE3
LDcgQEAgdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChS
ZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWEKICAgICAgICAgY2FudmFzKCktPnNldE9yaWdp
bkNsZWFuKCk7CiAgICAgZWxzZQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgp
OwotICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+
dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpKTsKKyAgICBjYW52YXMoKS0+c2V0SW1hZ2VCdWZm
ZXJBbmRNYXJrRGlydHkoaW1hZ2VCaXRtYXAtPnRha2VJbWFnZUJ1ZmZlcigpKTsKIH0KIAogRXhj
ZXB0aW9uT3I8dm9pZD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojp0cmFuc2ZlckZyb21J
bWFnZUJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggZmM5YTAzODIxZWVh
MTk5Nzk1ZTQxYTRkZjdkMTEwMTQyMDk5MzdkNS4uZDE0NjQ5MmM0YThkZjkzNWNhZjk0YjlmYjk1
NTkwOWFhZDFjYmFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCkBAIC0zOCwxMiArMzgsNiBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dDsKIAog
Y2xhc3MgSW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0cnVjdCBTZXJpYWxpemF0aW9uU3Rh
dGUgewotICAgICAgICBib29sIG9yaWdpbkNsZWFuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBmb3JjaWJseVByZW11bHRp
cGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIH07Ci0KICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwg
cG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFNo
b3VsZEFjY2VsZXJhdGUsIFNob3VsZFVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwg
Y29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9y
U3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409258</attachid>
            <date>2020-09-20 21:14:47 -0700</date>
            <delta_ts>2020-09-25 15:08:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200920211446.patch</filename>
            <type>text/plain</type>
            <size>47176</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmRhNDdlOTZlZTBmYmUx
ZjUzNGIxZjA2YzI0ODVjN2ZjNDM4MjFiOS4uMTk1NjNjNTZlMTQyYjBmZGI0ZjVjYzIxOTg5MWI2
N2ZkNjI3ZWUzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDIwLTA5LTIwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBT
ZXJpYWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEltYWdl
Qml0bWFwU291cmNlIGFuZCBtYWtlIGl0IGEgbWVtYmVyIG9mIEltYWdlQml0bWFwLiBJdAorICAg
ICAgICByZXByZXNlbnRzIHRoZSBiYWNraW5nIHN0b3JlIG9mIGFuIEltYWdlQml0bWFwLiBDdXJy
ZW50bHkgaXQgZW5jYXBzdWxhdGVzCisgICAgICAgIGFuIEltYWdlQnVmZmVyIGFuZCB0aGUgbmV3
IGVudW0gU2VyaWFsaXphdGlvblN0YXRlLiBJbiB0aGUgZnV0dXJlLCBpdCBjYW4KKyAgICAgICAg
YmUgZXh0ZW5kZWQgdG8gZW5jYXBzdWxhdGUgZWl0aGVyIGEgdGV4dHVyZSBvciBhbiBJbWFnZUJ1
ZmZlci4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpD
bG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OkNsb25lRGVzZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25l
RGVzZXJpYWxpemVyOjpyZWFkVHJhbnNmZXJyZWRJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6Cisg
ICAgICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpkZXRhY2hCaXRt
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRy
YW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDoKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwU291cmNlLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6SW1hZ2VCaXRtYXBTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OmJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6dGFrZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQml0bWFwU291cmNlOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJpdG1hcFNvdXJjZTo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBodG1s
L0ltYWdlQml0bWFwU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRt
YXBTb3VyY2U6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwU291cmNlOjpwcmVtdWx0aXBseUFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQml0bWFwU291cmNlOjpmb3JjaWJseVByZW11bHRpcGx5QWxwaGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBTb3VyY2U6OnNlcmlhbGl6YXRpb25TdGF0ZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisKIDIwMjAtMDktMTggIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDXVtJRkNdIERvIG5vdCB1c2UgRGlzcGxheTo6TGluZSBnZW9tZXRyeSBpbiBsYXlvdXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IDQ2YjY1ZDBlYTViNDU2N2E0YWM2NzU5NWY3Yzk5NGU1MTc2
MmQyYmYuLmFhNjM5M2MwYWVmNmUyY2FhOWIwY2ZhZWExM2Y0MWY3OWM5YjQ3MmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtNjQxLDYgKzY0MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBodG1sL0hUTUxVbmtub3duRWxlbWVudC5oCiAgICAgaHRtbC9IVE1M
VmlkZW9FbGVtZW50LmgKICAgICBodG1sL0ltYWdlQml0bWFwLmgKKyAgICBodG1sL0ltYWdlQml0
bWFwU291cmNlLmgKICAgICBodG1sL0ltYWdlRGF0YS5oCiAgICAgaHRtbC9JbWFnZURvY3VtZW50
LmgKICAgICBodG1sL0lucHV0TW9kZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGMwZmU5NDAxYzAzZjA4
ZTFhMGMxM2ZhMTI0N2Y3MGMyZjg0MmI2ZjcuLmMyMzMzZmIyZjE3YjYzMDlmYmY2YzJmOWRiNmE4
YjcxMTlkYTRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMTgzLDYgKzExODMsNyBAQCBodG1sL0hU
TUxWaWRlb0VsZW1lbnQuY3BwCiBodG1sL0hUTUxXQlJFbGVtZW50LmNwcAogaHRtbC9IaWRkZW5J
bnB1dFR5cGUuY3BwCiBodG1sL0ltYWdlQml0bWFwLmNwcAoraHRtbC9JbWFnZUJpdG1hcFNvdXJj
ZS5jcHAKIGh0bWwvSW1hZ2VEYXRhLmNwcAogaHRtbC9JbWFnZURvY3VtZW50LmNwcAogaHRtbC9J
bWFnZUlucHV0VHlwZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkYTlhOWEyOTNlMjU0MThjYjJjZGZjYjk4MDAyMDdjYTg4
ODQzMzNiLi5iNGQzMWUxMWM3MjE2OWY3ZDRlOWIyM2I4Yjg4YzI1NDc5MjFmNjhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0y
MTU2LDYgKzIxNTYsNyBAQAogCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMz
MjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1By
b3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEw
MEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxQjQ5NzQyNTEyQkEzQjAwRkU5RDNCIC8qIEltYWdl
Qml0bWFwU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3
MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtOTg3NSw2ICs5ODc2LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1
OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFw
U291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIElt
YWdlQml0bWFwU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwU291cmNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBB
bmltYXRpb25GcmFtZVJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uRnJhbWVSYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVE
MzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMjMwMTYsNiArMjMwMTksOCBAQAogCQkJCTMxRDI2QkMxMUY4NkQxOEIwMDhGRjI1
NSAvKiBJbWFnZUJpdG1hcC5pZGwgKi8sCiAJCQkJMzFEMjZCQzAxRjg2RDE4QTAwOEZGMjU1IC8q
IEltYWdlQml0bWFwT3B0aW9ucy5oICovLAogCQkJCTMxRDI2QkJEMUY4NkQxODcwMDhGRjI1NSAv
KiBJbWFnZUJpdG1hcE9wdGlvbnMuaWRsICovLAorCQkJCTcyMUI0OTZGMjUxMkFDMDQwMEZFOUQz
QiAvKiBJbWFnZUJpdG1hcFNvdXJjZS5jcHAgKi8sCisJCQkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5
RDNCIC8qIEltYWdlQml0bWFwU291cmNlLmggKi8sCiAJCQkJQTc3OTc5MTMwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5jcHAgKi8sCiAJCQkJQTc3OTc5MTQwRDZCOUQwQzAwMzg1MUI5IC8q
IEltYWdlRGF0YS5oICovLAogCQkJCUE3Nzk3OTE1MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURh
dGEuaWRsICovLApAQCAtMzE2NzIsNiArMzE2NzcsNyBAQAogCQkJCTMxODE1QTMxMUY5QTZDOEYw
MEZDQkY4OSAvKiBJbWFnZUJpdG1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M3OTAzQjMxRjg2
Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFCNDk3NDI1MTJCQTNCMDBG
RTlEM0IgLyogSW1hZ2VCaXRtYXBTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzJC
QUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTUwNjQwQjAyNDA3NTg3RTAwQUFFMDQ1IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDZlZjVhMTMwZmNlNWE4ZDYzMzk4M2U3NWRl
YjZiY2M4ODg0ZjBlODEuLmY0YTA3MDUxOWZiYWIzMjQ1NDg4ODhkMzE0ZWQ3OTdlMWZhMDE2NGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtMTA0Myw5ICsxMDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAg
ICAgICAgIHdyaXRlKEltYWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8
dWludDhfdD4oaW1hZ2VCaXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhhKCkpKTsKLSAgICAg
ICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9yY2libHlQcmVtdWx0
aXBseUFscGhhKCkpKTsKKyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VC
aXRtYXAuc2VyaWFsaXphdGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAgICB3cml0ZShzdGF0
aWNfY2FzdDxpbnQzMl90Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAgICAgIHdyaXRlKHN0
YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIHdyaXRl
KHN0YXRpY19jYXN0PGRvdWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUoKSkpOwpAQCAtMTkz
MSw3ICsxOTI5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0KIAotICAg
IHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8c3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3VyY2U+JiYgaW1hZ2VTb3VyY2Vz
CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52
YXNlcwogI2VuZGlmCkBAIC0xOTQzLDcgKzE5NDEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
anNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpVbnNwZWNpZmllZEVycm9yKTsKLSAg
ICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1
ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1h
Z2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIobGV4aWNh
bEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocywgc2hhcmVkQnVmZmVy
cywgV1RGTW92ZShpbWFnZVNvdXJjZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICAgICAsIFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpA
QCAtMTk5Niw3ICsxOTk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2l6ZV90IG1faW5kZXg7CiAg
ICAgfTsKIAotICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5
KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVm
ZmVycywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIKKyAgICBDbG9uZURlc2VyaWFsaXpl
cihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9y
dHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9y
PEltYWdlQml0bWFwU291cmNlPiYmIGltYWdlU291cmNlcywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBidWZmZXIKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNj
cmVlbkNhbnZhc2VzID0geyB9CiAjZW5kaWYKQEAgLTIwMTQsOCArMjAxMiw4IEBAIHByaXZhdGU6
CiAgICAgICAgICwgbV9tZXNzYWdlUG9ydHMobWVzc2FnZVBvcnRzKQogICAgICAgICAsIG1fYXJy
YXlCdWZmZXJDb250ZW50cyhhcnJheUJ1ZmZlckNvbnRlbnRzKQogICAgICAgICAsIG1fYXJyYXlC
dWZmZXJzKGFycmF5QnVmZmVyQ29udGVudHMgPyBhcnJheUJ1ZmZlckNvbnRlbnRzLT5zaXplKCkg
OiAwKQotICAgICAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKLSAg
ICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlQnVmZmVycy5zaXplKCkpCisgICAgICAgICwg
bV9pbWFnZVNvdXJjZXMoV1RGTW92ZShpbWFnZVNvdXJjZXMpKQorICAgICAgICAsIG1faW1hZ2VC
aXRtYXBzKG1faW1hZ2VTb3VyY2VzLnNpemUoKSkKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZB
UykKICAgICAgICAgLCBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hl
ZE9mZnNjcmVlbkNhbnZhc2VzKSkKICAgICAgICAgLCBtX29mZnNjcmVlbkNhbnZhc2VzKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcy5zaXplKCkpCkBAIC0yMDI4LDcgKzIwMjYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKICAgICB9CiAKLSAgICBD
bG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJD
b250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+
PiYmIGltYWdlQnVmZmVycworICAgIENsb25lRGVzZXJpYWxpemVyKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250
ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1
ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMs
IFZlY3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZG
U0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVk
T2Zmc2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAg
LTIwNDksOCArMjA0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9ibG9iVVJMcyhibG9iVVJM
cykKICAgICAgICAgLCBtX2Jsb2JGaWxlUGF0aHMoYmxvYkZpbGVQYXRocykKICAgICAgICAgLCBt
X3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVmZmVycykKLSAgICAgICAgLCBtX2ltYWdlQnVmZmVycyhX
VEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1hcHMobV9pbWFnZUJ1
ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1faW1hZ2VTb3VyY2VzKFdURk1vdmUoaW1hZ2VTb3Vy
Y2VzKSkKKyAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2ltYWdlU291cmNlcy5zaXplKCkpCiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9kZXRhY2hlZE9mZnNjcmVl
bkNhbnZhc2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcykpCiAgICAgICAgICwg
bV9vZmZzY3JlZW5DYW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMuc2l6ZSgpKQpA
QCAtMjg4MywxMyArMjg4MSwxMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgdWludDMyX3Qg
aW5kZXg7CiAgICAgICAgIGJvb2wgaW5kZXhTdWNjZXNzZnVsbHlSZWFkID0gcmVhZChpbmRleCk7
Ci0gICAgICAgIGlmICghaW5kZXhTdWNjZXNzZnVsbHlSZWFkIHx8IGluZGV4ID49IG1faW1hZ2VC
dWZmZXJzLnNpemUoKSkgeworICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBp
bmRleCA+PSBtX2ltYWdlU291cmNlcy5zaXplKCkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIW1f
aW1hZ2VCaXRtYXBzW2luZGV4XSkKLSAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9
IEltYWdlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShtX2ltYWdlQnVmZmVycy5hdChpbmRleCkpKTsK
KyAgICAgICAgICAgIG1faW1hZ2VCaXRtYXBzW2luZGV4XSA9IEltYWdlQml0bWFwOjpjcmVhdGUo
V1RGTW92ZShtX2ltYWdlU291cmNlcy5hdChpbmRleCkpKTsKIAogICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjAsMTMgQEAgcHJpdmF0ZToKIAogICAgIEpTVmFs
dWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qgb3JpZ2luQ2xlYW47
Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAgdWludDhfdCBmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFsaXphdGlvblN0YXRl
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50MzJfdCBsb2dpY2Fs
SGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVhZChvcmlnaW5DbGVh
bikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8
ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikp
IHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwgIXJlYWQobG9naWNh
bFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUp
IHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0yOTk5LDcgKzI5
OTUsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsgSW50UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNfY2FzdDxib29sPihw
cmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdU
Rk1vdmUoYnVmZmVyKSwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT46OmZyb21SYXcoc2Vy
aWFsaXphdGlvblN0YXRlKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsK
ICAgICB9CiAKQEAgLTM0MzQsNyArMzQzMCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFN0cmlu
Zz4gbV9ibG9iVVJMczsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Jsb2JGaWxlUGF0aHM7CiAgICAg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBtX3NoYXJlZEJ1ZmZlcnM7Ci0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPEltYWdlQml0bWFwU291
cmNlPiBtX2ltYWdlU291cmNlczsKICAgICBWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4gbV9p
bWFnZUJpdG1hcHM7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+IG1fZGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXNlczsKQEAgLTM2NTgsNyArMzY1NCw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgc3RkOjp1bmlx
CiAgICAgbV9tZW1vcnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVm
ZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlx
dWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJh
eSwgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0
cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZl
Y3RvcjxJbWFnZUJpdG1hcFNvdXJjZT4mJiBpbWFnZVNvdXJjZXMKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2
NjksNyArMzY2NSw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjCiAgICAgOiBtX2RhdGEoV1RG
TW92ZShidWZmZXIpKQogICAgICwgbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShh
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpKQogICAgICwgbV9zaGFyZWRCdWZmZXJDb250ZW50c0Fy
cmF5KFdURk1vdmUoc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSkpCi0gICAgLCBtX2ltYWdlQnVm
ZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCisgICAgLCBtX2ltYWdlU291cmNlcyhXVEZNb3Zl
KGltYWdlU291cmNlcykpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgLCBtX2Rl
dGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMoV1RGTW92ZShkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2Vz
KSkKICNlbmRpZgpAQCAtMzY5OSw5ICszNjk1LDkgQEAgc2l6ZV90IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y29tcHV0ZU1lbW9yeUNvc3QoKSBjb25zdAogICAgICAgICAgICAgY29zdCArPSBjb250
ZW50LnNpemVJbkJ5dGVzKCk7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBwYWlyIDogbV9pbWFn
ZUJ1ZmZlcnMpIHsKLSAgICAgICAgaWYgKHBhaXIuZmlyc3QpCi0gICAgICAgICAgICBjb3N0ICs9
IHBhaXIuZmlyc3QtPm1lbW9yeUNvc3QoKTsKKyAgICBmb3IgKGF1dG8mIGltYWdlU291cmNlIDog
bV9pbWFnZVNvdXJjZXMpIHsKKyAgICAgICAgaWYgKGltYWdlU291cmNlLmJ1ZmZlcigpKQorICAg
ICAgICAgICAgY29zdCArPSBpbWFnZVNvdXJjZS5idWZmZXIoKS0+bWVtb3J5Q29zdCgpOwogICAg
IH0KIAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQpAQCAtMzkyNSw3ICszOTIxLDcgQEAg
RXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKEpTR2xvYmFsT2IKICAgICBpZiAoYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
LnJlbGVhc2VFeGNlcHRpb24oKTsKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXJzID0gSW1hZ2VCaXRt
YXA6OmRldGFjaEJpdG1hcHMoV1RGTW92ZShpbWFnZUJpdG1hcHMpKTsKKyAgICBhdXRvIGltYWdl
U291cmNlcyA9IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRtYXBz
KSk7CiAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gZGV0YWNoZWRDYW52YXNlczsKQEAgLTM5
MzMsNyArMzkyOSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0dsb2JhbE9iCiAgICAgICAgIGRldGFjaGVk
Q2FudmFzZXMuYXBwZW5kKG9mZnNjcmVlbkNhbnZhcy0+ZGV0YWNoKCkpOwogI2VuZGlmCiAKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZm
ZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSA/
IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlQnVmZmVycykK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShi
dWZmZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpLCBjb250ZXh0ID09IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2Fn
ZSA/IFdURk1vdmUoc2hhcmVkQnVmZmVycykgOiBudWxscHRyLCBXVEZNb3ZlKGltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAgICAgICAsIFdURk1v
dmUoZGV0YWNoZWRDYW52YXNlcykKICNlbmRpZgpAQCAtMzk4OSw3ICszOTg1LDcgQEAgSlNWYWx1
ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LAogCiBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJp
YWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2Fn
ZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9u
cykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VQb3J0cywgV1RGTW92ZShtX2ltYWdlQnVmZmVycykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1
bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2ltYWdlU291cmNl
cykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBXVEZNb3ZlKG1fZGV0
YWNoZWRPZmZzY3JlZW5DYW52YXNlcykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCAyMGE5N2I2YmU1NzNlYzE0
NTU0MjM4NDAzMjk4NTI2YWNlNzVhZTdhLi4yZGEzYzY1ZTYxMDllM2QxNjEwMDE1ZjNkN2YyYmUz
YTdhYjM2OWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaApAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBEZXRhY2hlZE9mZnNjcmVl
bkNhbnZhczsKIGNsYXNzIElEQlZhbHVlOwogY2xhc3MgSW1hZ2VCaXRtYXA7CiBjbGFzcyBNZXNz
YWdlUG9ydDsKK2NsYXNzIEltYWdlQml0bWFwU291cmNlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
ZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTsKIApAQCAtMTE3LDcgKzExOCw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZh
bHVlKFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+KTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3Rk
Ojp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxB
cnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMsIFZlY3RvcjxzdGQ6OnBhaXI8
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25T
dGF0ZT4+JiYgaW1hZ2VCdWZmZXJzCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5p
cXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8SW1hZ2VCaXRtYXBTb3Vy
Y2U+JiYgaW1hZ2VTb3VyY2VzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAg
ICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgPSB7
IH0KICNlbmRpZgpAQCAtMTMxLDcgKzEzMiw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IG1fZGF0YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7Ci0g
ICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1
ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gbV9pbWFnZUJ1ZmZlcnM7CisgICAgVmVjdG9yPElt
YWdlQml0bWFwU291cmNlPiBtX2ltYWdlU291cmNlczsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NB
TlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFz
Pj4gbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VCaXRtYXAuY3BwCmluZGV4IGEwNGRjMDk5NmIwNWY0MjIwZjc5MTgwZGU3ZWZlMDgxNWNhN2U4
MDAuLjA1MTY4NDRlYjg1YzUwZjAyMDhkMzMzMTRkY2E1YTY3ODJiOThlMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02OSwyMSArNjksMTIgQEAgc3RhdGljIFJlbmRlcmlu
Z01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpLCBidWZmZXJSZW5kZXJpbmdNb2RlKSk7CisgICAgcmV0dXJu
IGNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUpIH0pOwogfQogCi1SZWY8SW1hZ2VCaXRt
YXA+IEltYWdlQml0bWFwOjpjcmVhdGUoc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGU+JiYgYnVmZmVyKQorUmVmPElt
YWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEltYWdlQml0bWFwU291cmNlJiYgaW1hZ2VT
b3VyY2UpCiB7Ci0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJ1ZmZlci5m
aXJzdCkpOwotICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gYnVmZmVyLnNlY29uZC5v
cmlnaW5DbGVhbjsKLSAgICBpbWFnZUJpdG1hcC0+bV9wcmVtdWx0aXBseUFscGhhID0gYnVmZmVy
LnNlY29uZC5wcmVtdWx0aXBseUFscGhhOwotICAgIGltYWdlQml0bWFwLT5tX2ZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSA9IGJ1ZmZlci5zZWNvbmQuZm9yY2libHlQcmVtdWx0aXBseUFscGhhOwot
ICAgIHJldHVybiBpbWFnZUJpdG1hcDsKLX0KLQotUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCi17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShidWZmZXIpKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1hZ2VCaXRtYXAoV1RGTW92ZShpbWFnZVNvdXJjZSkpKTsK
IH0KIAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNl
LCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHBy
b21pc2UpCkBAIC05NSwxNSArODYsMTYgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlz
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICk7
CiB9CiAKLVZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1h
Z2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBz
KFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCitWZWN0b3I8SW1hZ2VCaXRt
YXBTb3VyY2U+IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiYmIGJpdG1hcHMpCiB7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gYnVmZmVy
czsKLSAgICBmb3IgKGF1dG8mIGJpdG1hcCA6IGJpdG1hcHMpCi0gICAgICAgIGJ1ZmZlcnMuYXBw
ZW5kKHN0ZDo6bWFrZV9wYWlyKGJpdG1hcC0+dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpLCBJ
bWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsgYml0bWFwLT5vcmlnaW5DbGVhbigpLCBi
aXRtYXAtPnByZW11bHRpcGx5QWxwaGEoKSwgYml0bWFwLT5mb3JjaWJseVByZW11bHRpcGx5QWxw
aGEoKSB9KSk7CisgICAgVmVjdG9yPEltYWdlQml0bWFwU291cmNlPiBidWZmZXJzOworICAgIGZv
ciAoYXV0byYgYml0bWFwIDogYml0bWFwcykgeworICAgICAgICBhdXRvIGltYWdlU291cmNlID0g
Yml0bWFwLT50YWtlSW1hZ2VCaXRtYXBTb3VyY2UoKTsKKyAgICAgICAgYnVmZmVycy5hcHBlbmQo
aW1hZ2VTb3VyY2UgPyBXVEZNb3ZlKCppbWFnZVNvdXJjZSkgOiBJbWFnZUJpdG1hcFNvdXJjZSgp
KTsKKyAgICB9CiAgICAgcmV0dXJuIGJ1ZmZlcnM7CiB9CiAKLQogdm9pZCBJbWFnZUJpdG1hcDo6
Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiBv
cHRpb25zLCBpbnQgc3gsIGludCBzeSwgaW50IHN3LCBpbnQgc2gsIEltYWdlQml0bWFwOjpQcm9t
aXNlJiYgcHJvbWlzZSkKIHsKICAgICAvLyAxLiBJZiBlaXRoZXIgdGhlIHN3IG9yIHNoIGFyZ3Vt
ZW50cyBhcmUgc3BlY2lmaWVkIGJ1dCB6ZXJvLCByZXR1cm4gYSBwcm9taXNlCkBAIC0yNDMsMTMg
KzIzNSwxNSBAQCB2b2lkIEltYWdlQml0bWFwOjpyZXNvbHZlV2l0aEJsYW5rSW1hZ2VCdWZmZXIo
Ym9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmIHByb21pcwogICAgIC8vIFJlc29sdmUgUHJvbWlz
ZSB3aXRoIGEgYmxhbmsgMXgxIEltYWdlQml0bWFwLgogICAgIGF1dG8gYml0bWFwRGF0YSA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKDEsIDEpLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsK
IAotICAgIC8vIDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBp
bWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDkuIElm
IHRoZSBvcmlnaW4gb2YgaW1hZ2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRo
ZSBvcmlnaW4gc3BlY2lmaWVkIGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVj
dCwgdGhlbiBzZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmpl
Y3QncwogICAgIC8vICAgIGJpdG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmln
aW5DbGVhbiA9IG9yaWdpbkNsZWFuOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+
IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBpZiAob3JpZ2luQ2xlYW4pCisgICAgICAgIHNlcmlh
bGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisgICAg
CisgICAgLy8gNy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KKyAgICBhdXRvIGlt
YWdlQml0bWFwID0gY3JlYXRlKHsgV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXphdGlvblN0
YXRlIH0pOwogCiAgICAgLy8gMTAuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUg
cnVubmluZyB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyAxMS4gUmVzb2x2ZSB0aGUg
cHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4KQEAg
LTM3MywxNiArMzY3LDE4IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYsIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50CiAgICAgRmxvYXRSZWN0
IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29u
dGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2VGb3JSZW5kZXIsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5n
bGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVR
dWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRh
dGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCi0gICAgLy8gNy4gQ3JlYXRlIGEg
bmV3IEltYWdlQml0bWFwIG9iamVjdC4KLSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdU
Rk1vdmUoYml0bWFwRGF0YSkpOwotCiAgICAgLy8gOS4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdz
IGltYWdlIGlzIG5vdCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIG9yaWdpbiBzcGVjaWZpZWQgYnkg
dGhlCiAgICAgLy8gICAgZW50cnkgc2V0dGluZ3Mgb2JqZWN0LCB0aGVuIHNldCB0aGUgb3JpZ2lu
LWNsZWFuIGZsYWcgb2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzCiAgICAgLy8gICAgYml0bWFw
IHRvIGZhbHNlLgorICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRp
b25TdGF0ZTsKKyAgICBpZiAoIXRhaW50c09yaWdpbigqY2FjaGVkSW1hZ2UpKQorICAgICAgICBz
ZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwog
Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRzT3JpZ2luKCpjYWNoZWRJ
bWFnZSk7CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhh
KG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9u
U3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlw
bHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRp
b25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworICAgIC8vIDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAg
YXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6
YXRpb25TdGF0ZSB9KTsKIAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNv
bnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29s
dmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFs
dWUuCkBAIC00MzksMTUgKzQzNSwxNyBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBDYW52YXNCYXNlJiBjYW52YXMsIEltYQogICAgIEZs
b2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERh
dGEtPmNvbnRleHQoKS5kcmF3SW1hZ2UoKmltYWdlRm9yUmVuZGVyLCBkZXN0UmVjdCwgc291cmNl
UmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9y
UmVzaXplUXVhbGl0eShvcHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9y
T3JpZW50YXRpb24ob3B0aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIAotICAgIC8vIDMuIENy
ZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNy
ZWF0ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDUuIFNldCB0aGUgb3JpZ2luLWNs
ZWFuIGZsYWcgb2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzIGJpdG1hcCB0byB0aGUgc2FtZSB2
YWx1ZSBhcwogICAgIC8vICAgIHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgY2FudmFzIGVs
ZW1lbnQncyBiaXRtYXAuCisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFs
aXphdGlvblN0YXRlOworICAgIGlmIChjYW52YXMub3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAot
ICAgIGltYWdlQml0bWFwLT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7Cisg
ICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMu
cHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlBy
ZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9
IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11
bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwor
ICAgIC8vIDMuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFn
ZUJpdG1hcCA9IGNyZWF0ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0
ZSB9KTsKIAogICAgIC8vIDYuIFJldHVybiBhIG5ldyBwcm9taXNlLCBidXQgY29udGludWUgcnVu
bmluZyB0aGVzZSBzdGVwcyBpbiBwYXJhbGxlbC4KICAgICAvLyA3LiBSZXNvbHZlIHRoZSBwcm9t
aXNlIHdpdGggdGhlIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNTE0
LDE1ICs1MTIsMTggQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICAgICB2aWRlby0+cGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYywgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwogICAgIH0KIAotICAgIC8vIDUuIExldCBpbWFnZUJpdG1hcCBiZSBhIG5ldyBJbWFnZUJpdG1h
cCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3ZlKGJpdG1hcERh
dGEpKTsKLQogICAgIC8vIDYuMy4gSWYgdGhlIG9yaWdpbiBvZiBpbWFnZSdzIHZpZGVvIGlzIG5v
dCBzYW1lIG9yaWdpbiB3aXRoIGVudHJ5CiAgICAgLy8gICAgICBzZXR0aW5ncyBvYmplY3QncyBv
cmlnaW4sIHRoZW4gc2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZgogICAgIC8vICAgICAgaW1h
Z2UncyBiaXRtYXAgdG8gZmFsc2UuCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAh
dGFpbnRzT3JpZ2luKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZp
ZGVvKTsKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3Rh
dGU7CisgICAgaWYgKCF0YWludHNPcmlnaW4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0
eU9yaWdpbigpLCAqdmlkZW8pKQorICAgICAgICBzZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlh
bGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVs
dGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShv
cHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworICAgIGlmIChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlB
bHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXph
dGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsKKworICAgIC8vIDUuIExldCBpbWFnZUJpdG1h
cCBiZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNy
ZWF0ZSh7IFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSB9KTsKIAogICAg
IC8vIDYuNC4xLiBSZXNvbHZlIHAgd2l0aCBpbWFnZUJpdG1hcC4KICAgICBwcm9taXNlLnJlc29s
dmUoV1RGTW92ZShpbWFnZUJpdG1hcCkpOwpAQCAtNTY2LDIwICs1NjcsMjQgQEAgdm9pZCBJbWFn
ZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPElt
YWdlQml0bWFwPiYgZXgKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRw
dXRTaXplKTsKICAgICBiaXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZUZvclJl
bmRlciwgZGVzdFJlY3QsIHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5
KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlv
bikgfSk7CiAKLSAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgotICAg
IGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7Ci0KICAgICAv
LyA1LiBTZXQgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3Qn
cyBiaXRtYXAgdG8gdGhlIHNhbWUKICAgICAvLyAgICB2YWx1ZSBhcyB0aGUgb3JpZ2luLWNsZWFu
IGZsYWcgb2YgdGhlIGJpdG1hcCBvZiB0aGUgaW1hZ2UgYXJndW1lbnQuCi0gICAgaW1hZ2VCaXRt
YXAtPm1fb3JpZ2luQ2xlYW4gPSBleGlzdGluZ0ltYWdlQml0bWFwLT5vcmlnaW5DbGVhbigpOwor
ICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAg
ICBpZiAoZXhpc3RpbmdJbWFnZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFs
aXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAotICAg
IGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNhdGlv
bkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoYWxwaGFQcmVtdWx0aXBs
aWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIHNlcmlhbGl6
YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsKIAot
ICAgIC8vIEF0IGxlYXN0IGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQsIHdoZW4gY3JlYXRp
bmcgYW4gSW1hZ2VCaXRtYXAgZnJvbQotICAgIC8vIGFuIEltYWdlQml0bWFwLCB0aGUgYWxwaGEg
Y2hhbm5lbCBvZiBiaXRtYXBEYXRhIGlzbid0IHByZW11bHRpcGxpZWQgZXZlbgotICAgIC8vIHRo
b3VnaCB0aGUgYWxwaGEgbW9kZSBvZiB0aGUgaW50ZXJuYWwgc3VyZmFjZSBjbGFpbXMgaXQgaXMu
IEluc3RydWN0Ci0gICAgLy8gdXNlcnMgb2YgdGhpcyBJbWFnZUJpdG1hcCB0byBpZ25vcmUgdGhl
IGludGVybmFsIHN1cmZhY2UncyBhbHBoYSBtb2RlLgotICAgIGltYWdlQml0bWFwLT5tX2ZvcmNp
Ymx5UHJlbXVsdGlwbHlBbHBoYSA9IGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGE7Cisg
ICAgICAgIC8vIEF0IGxlYXN0IGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQsIHdoZW4gY3Jl
YXRpbmcgYW4gSW1hZ2VCaXRtYXAgZnJvbQorICAgICAgICAvLyBhbiBJbWFnZUJpdG1hcCwgdGhl
IGFscGhhIGNoYW5uZWwgb2YgYml0bWFwRGF0YSBpc24ndCBwcmVtdWx0aXBsaWVkIGV2ZW4KKyAg
ICAgICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRlcm5hbCBzdXJmYWNlIGNs
YWltcyBpdCBpcy4gSW5zdHJ1Y3QKKyAgICAgICAgLy8gdXNlcnMgb2YgdGhpcyBJbWFnZUJpdG1h
cCB0byBpZ25vcmUgdGhlIGludGVybmFsIHN1cmZhY2UncyBhbHBoYSBtb2RlLgorICAgICAgICBz
ZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6Rm9yY2libHlQcmVtdWx0
aXBseUFscGhhKTsKKyAgICB9CisKKyAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRtYXAg
b2JqZWN0LgorICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJpdG1hcERh
dGEpLCBzZXJpYWxpemF0aW9uU3RhdGUgfSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJv
bWlzZSwgYnV0IGNvbnRpbnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAg
Ly8gNy4gUmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0
IGFzIHRoZSB2YWx1ZS4KQEAgLTc1Miw5ICs3NTcsMTEgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3Jl
YXRlRnJvbUJ1ZmZlcigKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBvdXRw
dXRTaXplKTsKICAgICBiaXRtYXBEYXRhLT5jb250ZXh0KCkuZHJhd0ltYWdlKCppbWFnZSwgZGVz
dFJlY3QsIHNvdXJjZVJlY3RhbmdsZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclJlc2l6ZVF1YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VP
cmllbnRhdGlvbkZvck9yaWVudGF0aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAK
LSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOworICAg
IE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSA9IFNlcmlh
bGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW47CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRp
b25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0
YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1h
Z2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9y
UHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVh
dGUoeyBXVEZNb3ZlKGJpdG1hcERhdGEpLCBzZXJpYWxpemF0aW9uU3RhdGUgfSk7CiAKICAgICBw
cm9taXNlLnJlc29sdmUoV1RGTW92ZShpbWFnZUJpdG1hcCkpOwogfQpAQCAtODEzLDQ3ICs4MjAs
MjkgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgUmVmUHRyPEltYWdlRGF0YT4mIGltYWcKICAgICBiaXRtYXBEYXRhLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCp0ZW1wQml0bWFwRGF0YSwgZGVzdFJlY3QsIHNvdXJjZVJlY3Rhbmds
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgeyBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclJlc2l6ZVF1
YWxpdHkob3B0aW9ucy5yZXNpemVRdWFsaXR5KSwgaW1hZ2VPcmllbnRhdGlvbkZvck9yaWVudGF0
aW9uKG9wdGlvbnMuaW1hZ2VPcmllbnRhdGlvbikgfSk7CiAKICAgICAvLyA2LjQuMS4gUmVzb2x2
ZSBwIHdpdGggSW1hZ2VCaXRtYXAuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZN
b3ZlKGJpdG1hcERhdGEpKTsKKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKHsgV1RGTW92
ZShiaXRtYXBEYXRhKSB9KTsKICAgICAvLyBUaGUgcmVzdWx0IGlzIGltcGxpY2l0bHkgb3JpZ2lu
LWNsZWFuLCBhbmQgYWxwaGEgcHJlbXVsdGlwbGljYXRpb24gaGFzIGFscmVhZHkgYmVlbiBoYW5k
bGVkLgogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3ZlKGltYWdlQml0bWFwKSk7CiB9CiAKLUlt
YWdlQml0bWFwOjpJbWFnZUJpdG1hcChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYgYnVm
ZmVyKQotICAgIDogbV9iaXRtYXBEYXRhKFdURk1vdmUoYnVmZmVyKSkKK0ltYWdlQml0bWFwOjpJ
bWFnZUJpdG1hcChJbWFnZUJpdG1hcFNvdXJjZSYmIGltYWdlU291cmNlKQorICAgIDogbV9pbWFn
ZVNvdXJjZShXVEZNb3ZlKGltYWdlU291cmNlKSkKIHsKLSAgICBBU1NFUlQobV9iaXRtYXBEYXRh
KTsKKyAgICBBU1NFUlQobV9pbWFnZVNvdXJjZSk7CiB9CiAKIEltYWdlQml0bWFwOjp+SW1hZ2VC
aXRtYXAoKSA9IGRlZmF1bHQ7CiAKLXVuc2lnbmVkIEltYWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fZGV0YWNoZWQgfHwgIW1fYml0bWFwRGF0YSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/Ci0gICAgcmV0dXJu
IG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0aCgpOwotfQotCi11bnNpZ25lZCBJbWFn
ZUJpdG1hcDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRt
YXBEYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSBy
aWdodCBoZWlnaHQ/Ci0gICAgcmV0dXJuIG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWln
aHQoKTsKLX0KLQotdm9pZCBJbWFnZUJpdG1hcDo6Y2xvc2UoKQorT3B0aW9uYWw8SW1hZ2VCaXRt
YXBTb3VyY2U+IEltYWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBTb3VyY2UoKQogewotICAgIG1f
ZGV0YWNoZWQgPSB0cnVlOwotICAgIG1fYml0bWFwRGF0YSA9IG51bGxwdHI7CisgICAgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZVNvdXJjZSwgV1RGOjpudWxsb3B0KTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJPd25lcnNoaXBBbmRD
bG9zZSgpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQml0bWFwOjp0YWtlSW1h
Z2VCdWZmZXIoKQogewotICAgIG1fZGV0YWNoZWQgPSB0cnVlOwotICAgIHJldHVybiBXVEZNb3Zl
KG1fYml0bWFwRGF0YSk7CisgICAgaWYgKGF1dG8gaW1hZ2VTb3VyY2UgPSB0YWtlSW1hZ2VCaXRt
YXBTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGltYWdlU291cmNlLT50YWtlSW1hZ2VCdWZmZXIo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCmluZGV4IGJmMGRkNWUxZDc0OTIxOTRlMjdjNmMyN2Q3
ODZhYTFiMzIyYTlkZDkuLjk0OTViMDc2NmEyZGZlYWE3MmRjNGVkYzMzYzMzN2Y4YzcxZjczNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkltYWdlQml0bWFwU291cmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtODMsMzggKzgzLDMyIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVQcm9taXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmLCBTb3VyY2UmJiwgSW1hZ2VCaXRtYXBPcHRpb25zJiYsIGludCBzeCwgaW50IHN5LCBpbnQg
c3csIGludCBzaCwgUHJvbWlzZSYmKTsKIAogICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNy
ZWF0ZShJbnRTaXplKTsKLSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUoc3RkOjpw
YWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGU+JiYpOworICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRtYXA+IGNyZWF0ZShJbWFnZUJp
dG1hcFNvdXJjZSYmKTsKIAogICAgIH5JbWFnZUJpdG1hcCgpOwogCi0gICAgdW5zaWduZWQgd2lk
dGgoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKLSAgICB2b2lkIGNsb3Nl
KCk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3Vy
Y2UgPyBtX2ltYWdlU291cmNlLT5idWZmZXIoKSA6IG51bGxwdHI7IH0KKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworICAgIE9wdGlvblNldDxTZXJp
YWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VTb3VyY2UgPyBtX2ltYWdlU291cmNlLT5zZXJpYWxpemF0aW9uU3RhdGUoKSA6IFNlcmlhbGl6
YXRpb25TdGF0ZSgpOyB9CiAKLSAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiBt
X2RldGFjaGVkOyB9CisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
U291cmNlID8gbV9pbWFnZVNvdXJjZS0+d2lkdGgoKSA6IDA7IH0KKyAgICB1bnNpZ25lZCBoZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU291cmNlID8gbV9pbWFnZVNvdXJjZS0+aGVpZ2h0
KCkgOiAwOyB9CiAKLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgeyByZXR1cm4gbV9iaXRtYXBE
YXRhLmdldCgpOyB9CisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1faW1h
Z2VTb3VyY2UgJiYgbV9pbWFnZVNvdXJjZS0+b3JpZ2luQ2xlYW4oKTsgfQorICAgIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTb3VyY2UgJiYgbV9pbWFnZVNv
dXJjZS0+cHJlbXVsdGlwbHlBbHBoYSgpOyB9CisgICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5
QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU291cmNlICYmIG1faW1hZ2VTb3VyY2UtPmZv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpOyB9CiAKLSAgICBib29sIG9yaWdpbkNsZWFuKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW5DbGVhbjsgfQorICAgIE9wdGlvbmFsPEltYWdlQml0bWFwU291
cmNlPiB0YWtlSW1hZ2VCaXRtYXBTb3VyY2UoKTsKKyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25z
dCB7IHJldHVybiAhbV9pbWFnZVNvdXJjZS5oYXNWYWx1ZSgpOyB9CisgICAgdm9pZCBjbG9zZSgp
IHsgdGFrZUltYWdlQml0bWFwU291cmNlKCk7IH0KIAotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgLy8gV2hlbiBX
ZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21pbmcgZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdl
QnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3JzCi0gICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhh
dCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxwaGFJbmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJh
Y2tlbmQuIEZvcgotICAgIC8vIEltYWdlQml0bWFwcyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBz
LCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBhY2N1cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQot
ICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBhbHBoYSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVs
dGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxw
aGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7
Ci0KLSAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4gZGV0YWNoQml0bWFwcyhWZWN0
b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CisgICAgc3RhdGljIFZlY3RvcjxJbWFnZUJpdG1h
cFNvdXJjZT4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEltYWdlQml0bWFwSW1hZ2VPYnNlcnZlcjsKICAg
ICBmcmllbmQgY2xhc3MgUGVuZGluZ0ltYWdlQml0bWFwOwogCi0gICAgc3RhdGljIFJlZjxJbWFn
ZUJpdG1hcD4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJik7Ci0gICAgSW1h
Z2VCaXRtYXAoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICBJbWFnZUJpdG1h
cChJbWFnZUJpdG1hcFNvdXJjZSYmKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlc29sdmVXaXRoQmxh
bmtJbWFnZUJ1ZmZlcihib29sIG9yaWdpbkNsZWFuLCBQcm9taXNlJiYpOwogCkBAIC0xMzMsMTEg
KzEyNyw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlUHJvbWlzZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgUmVmUHRyPFR5cGVkT01DU1NJbWFnZVZhbHVlPiYsIEltYWdlQml0
bWFwT3B0aW9ucyYmLCBPcHRpb25hbDxJbnRSZWN0PiwgUHJvbWlzZSYmKTsKICAgICBzdGF0aWMg
dm9pZCBjcmVhdGVGcm9tQnVmZmVyKFJlZjxBcnJheUJ1ZmZlcj4mJiwgU3RyaW5nIG1pbWVUeXBl
LCBsb25nIGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoLCBjb25zdCBVUkwmLCBJbWFnZUJpdG1h
cE9wdGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fYml0bWFwRGF0YTsKLSAgICBib29sIG1fZGV0YWNoZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9vcmlnaW5DbGVhbiB7IHRydWUgfTsKLSAgICBib29sIG1f
cHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZvcmNpYmx5UHJlbXVsdGlw
bHlBbHBoYSB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8SW1hZ2VCaXRtYXBTb3VyY2U+IG1faW1h
Z2VTb3VyY2U7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBTb3VyY2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU5Mjk5NGMwYTA1NDU3YjA5ZTM3NGJlZTBkOGNlZTI2MmVhNWQ2ZDkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNl
LmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQml0bWFwU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW1hZ2VCaXRtYXBTb3VyY2U6OkltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4mJiBiaXRtYXBEYXRhLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJp
YWxpemF0aW9uU3RhdGUpCisgICAgOiBtX2JpdG1hcERhdGEoV1RGTW92ZShiaXRtYXBEYXRhKSkK
KyAgICAsIG1fc2VyaWFsaXphdGlvblN0YXRlKHNlcmlhbGl6YXRpb25TdGF0ZSkKK3sKKyAgICBB
U1NFUlQobV9iaXRtYXBEYXRhKTsKK30KKworSW1hZ2VCdWZmZXIqIEltYWdlQml0bWFwU291cmNl
OjpidWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpdG1hcERhdGEuZ2V0KCk7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCaXRtYXBTb3VyY2U6OnRha2VJbWFn
ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIFdURk1vdmUobV9iaXRtYXBEYXRhKTsKK30KKwordW5z
aWduZWQgSW1hZ2VCaXRtYXBTb3VyY2U6OndpZHRoKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
SXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/CisgICAgcmV0dXJuIG1fYml0bWFwRGF0YSA/IG1fYml0
bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0aCgpIDogMDsKK30KKwordW5zaWduZWQgSW1hZ2VC
aXRtYXBTb3VyY2U6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IElzIHRoaXMgdGhl
IHJpZ2h0IGhlaWdodD8KKyAgICByZXR1cm4gbV9iaXRtYXBEYXRhID8gbV9iaXRtYXBEYXRhLT5s
b2dpY2FsU2l6ZSgpLmhlaWdodCgpIDogMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcFNvdXJjZS5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcFNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNzMzYjdi
NDQxODI4OTljYmFjNmQ4MmVmMDYxY2M4NDYwOTNmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwU291cmNlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFz
cyBTZXJpYWxpemF0aW9uU3RhdGUgOiB1aW50OF90IHsKKyAgICBPcmlnaW5DbGVhbiAgICAgICAg
ICAgICAgPSAxIDw8IDAsCisgICAgUHJlbXVsdGlwbHlBbHBoYSAgICAgICAgID0gMSA8PCAxLAor
ICAgIEZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSA9IDEgPDwgMgorfTsKKworY2xhc3MgSW1hZ2VC
aXRtYXBTb3VyY2UgeworcHVibGljOgorICAgIEltYWdlQml0bWFwU291cmNlKCkgPSBkZWZhdWx0
OworICAgIEltYWdlQml0bWFwU291cmNlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwg
T3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gPSBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdp
bkNsZWFuKTsKKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOworCisgICAgdW5zaWduZWQg
d2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdDsKKworICAgIGJvb2wg
b3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZS5jb250YWlu
cyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsgfQorCisgICAgYm9vbCBwcmVtdWx0
aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMo
U2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsgfQorICAgIC8vIFdoZW4gV2Vi
R0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20gYW4gSW1hZ2VCaXRtYXAncyBJbWFnZUJ1
ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8vIHRoZSBhbHBoYSBtb2RlIG9mIHRoYXQg
bmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBpbiB0aGUgQ29yZSBHcmFwaGljcyBiYWNr
ZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3JlYXRlZCBmcm9tIEltYWdlQml0bWFwcywg
dGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUsIGFuZCBjYWxsZXJzIG11c3QgYmUKKyAg
ICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9kZSwgYW5kIGZvcmNpYmx5IHByZW11bHRp
cGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wgZm9yY2libHlQcmVtdWx0aXBseUFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXph
dGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxwaGEpOyB9CisKKyAgICBPcHRpb25TZXQ8
U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gbV9iaXRtYXBEYXRhOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3Rh
dGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4IDE4OWFjMTkyNTQ0ZGM5
ZGViNmQ1MzY2M2M4Mjk0MGE2MDEyNzMwMGMuLjI0MjUwNTE1Mzk1NDQ5NmNhZTNiMzgzNjUxNzJj
YmY5ODQxMzkyZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAg
LTI1MCwxMyArMjUwLDEzIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNj
cmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7
IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IHRydWUsIGZhbHNlLCBm
YWxzZSB9fSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkg
fSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwogICAgICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4g
eyBudWxscHRyIH0gfTsKIAotICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsg
V1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlIHsgb3JpZ2lu
Q2xlYW4oKSwgZmFsc2UsIGZhbHNlIH19KSB9OworICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBvcmlnaW5DbGVhbigpID8gU2VyaWFsaXphdGlv
blN0YXRlOjpPcmlnaW5DbGVhbiA6IFNlcmlhbGl6YXRpb25TdGF0ZSgpIH0pIH07CiAgICAgfQog
CiAjaWYgRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggYjUxYjRkYmYxM2Vl
NTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNS4uZGUxZjc3NDY4NjE3Yzc4ZDA3MGY0NzVkMmIy
NGM0ZDgyNDZkNGVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAg
dm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChSZWZQdHI8
SW1hZ2VCaXRtYXA+IGltYWdlQml0bWEKICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpbkNsZWFu
KCk7CiAgICAgZWxzZQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOwotICAg
IGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1hcC0+dHJhbnNm
ZXJPd25lcnNoaXBBbmRDbG9zZSgpKTsKKyAgICBjYW52YXMoKS0+c2V0SW1hZ2VCdWZmZXJBbmRN
YXJrRGlydHkoaW1hZ2VCaXRtYXAtPnRha2VJbWFnZUJ1ZmZlcigpKTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojp0cmFuc2ZlckZyb21JbWFnZUJp
dG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggZmM5YTAzODIxZWVhMTk5Nzk1
ZTQxYTRkZjdkMTEwMTQyMDk5MzdkNS4uZDE0NjQ5MmM0YThkZjkzNWNhZjk0YjlmYjk1NTkwOWFh
ZDFjYmFmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oCkBAIC0zOCwxMiArMzgsNiBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dDsKIAogY2xhc3Mg
SW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0cnVjdCBTZXJpYWxpemF0aW9uU3RhdGUgewot
ICAgICAgICBib29sIG9yaWdpbkNsZWFuIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBwcmVtdWx0
aXBseUFscGhhIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxw
aGEgeyBmYWxzZSB9OwotICAgIH07Ci0KICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRl
ciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFNob3VsZEFj
Y2VsZXJhdGUsIFNob3VsZFVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3Qg
SG9zdFdpbmRvdyogPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409745</attachid>
            <date>2020-09-25 15:06:51 -0700</date>
            <delta_ts>2020-09-25 16:05:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200925150650.patch</filename>
            <type>text/plain</type>
            <size>47473</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDIwLTA5LTI1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTZXJp
YWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgorCisgICAgICAgIEludHJvZHVjZSBJbWFnZUJp
dG1hcEJhY2tpbmcgYW5kIG1ha2UgaXQgYSBtZW1iZXIgb2YgSW1hZ2VCaXRtYXAuIEl0CisgICAg
ICAgIHJlcHJlc2VudHMgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYW4gSW1hZ2VCaXRtYXAuIEN1cnJl
bnRseSBpdCBlbmNhcHN1bGF0ZXMKKyAgICAgICAgYW4gSW1hZ2VCdWZmZXIgYW5kIHRoZSBuZXcg
ZW51bSBTZXJpYWxpemF0aW9uU3RhdGUuIEluIHRoZSBmdXR1cmUsIGl0IGNhbgorICAgICAgICBi
ZSBleHRlbmRlZCB0byBlbmNhcHN1bGF0ZSBlaXRoZXIgYSB0ZXh0dXJlIG9yIGFuIEltYWdlQnVm
ZmVyLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21wdXRlTWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1h
cHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnJlc29sdmVXaXRoQmxhbmtJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJpdG1hcEJhY2tpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRy
YW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDoKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjpJbWFnZUJpdG1hcEJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjp0YWtlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OmhlaWdodCBjb25zdCk6CisgICAgICAg
ICogaHRtbC9JbWFnZUJpdG1hcEJhY2tpbmcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJpdG1hcEJhY2tpbmc6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQml0bWFwQmFja2luZzo6cHJlbXVsdGlwbHlBbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OnNlcmlhbGl6YXRpb25T
dGF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisKIDIwMjAtMDktMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBHZXQgcmlkIG9mIEF1ZGlvTm9kZTo6UmVmVHlwZQpJbmRleDogU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC02NTMsNiArNjUzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIGh0bWwvSFRNTFVua25vd25FbGVtZW50LmgKICAgICBo
dG1sL0hUTUxWaWRlb0VsZW1lbnQuaAogICAgIGh0bWwvSW1hZ2VCaXRtYXAuaAorICAgIGh0bWwv
SW1hZ2VCaXRtYXBCYWNraW5nLmgKICAgICBodG1sL0ltYWdlRGF0YS5oCiAgICAgaHRtbC9JbWFn
ZURvY3VtZW50LmgKICAgICBodG1sL0lucHV0TW9kZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjY3NTczKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTExOTMsNiArMTE5Myw3IEBAIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKIGh0bWwv
SFRNTFdCUkVsZW1lbnQuY3BwCiBodG1sL0hpZGRlbklucHV0VHlwZS5jcHAKIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwCitodG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHAKIGh0bWwvSW1hZ2VEYXRhLmNw
cAogaHRtbC9JbWFnZURvY3VtZW50LmNwcAogaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI2NzU3MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjE1Niw2ICsyMTU2LDcgQEAKIAkJNzFG
MDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3
MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZH
UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYx
MkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMUI0OTc0MjUxMkJBM0IwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQw
MEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1h
Z2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
NEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYx
M0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTg4NCw2
ICs5ODg1LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRv
dWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEw
MEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIx
QjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYx
M0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMDY4LDYg
KzIzMDcxLDggQEAKIAkJCQkzMUQyNkJDMjFGODZEMThDMDA4RkYyNTUgLyogSW1hZ2VCaXRtYXAu
Y3BwICovLAogCQkJCTMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICov
LAogCQkJCTMxRDI2QkMxMUY4NkQxOEIwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5pZGwgKi8sCisJ
CQkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8s
CisJCQkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICov
LAogCQkJCTMxRDI2QkMwMUY4NkQxOEEwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcE9wdGlvbnMuaCAq
LywKIAkJCQkzMUQyNkJCRDFGODZEMTg3MDA4RkYyNTUgLyogSW1hZ2VCaXRtYXBPcHRpb25zLmlk
bCAqLywKIAkJCQlBNzc5NzkxMzBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCAqLywK
QEAgLTMxNzE3LDYgKzMxNzIyLDcgQEAKIAkJCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyog
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QTMzNkY5MUQ4MjFFM0MwMDIyQzRDNyAvKiBJ
bWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4MTVBMzExRjlBNkM4RjAw
RkNCRjg5IC8qIEltYWdlQml0bWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFCNDk3NDI1MTJC
QTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAJKHJldmlzaW9uIDI2NzU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5
UmF3LmgiCiAjaW5jbHVkZSAiSURCVmFsdWUuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcEJhY2tp
bmcuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0NyeXB0b0tleS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMTA0Myw5ICsxMDQ0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIHdyaXRlKEltYWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUo
c3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAg
ICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhh
KCkpKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9y
Y2libHlQcmVtdWx0aXBseUFscGhhKCkpKTsKKyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oaW1hZ2VCaXRtYXAuc2VyaWFsaXphdGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAg
ICB3cml0ZShzdGF0aWNfY2FzdDxpbnQzMl90Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAg
ICAgIHdyaXRlKHN0YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAg
ICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGRvdWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUo
KSkpOwpAQCAtMTkzMSw3ICsxOTMwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwog
ICAgIH0KIAotICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBW
ZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVy
OjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8T3B0aW9uYWw8SW1hZ2VCaXRtYXBC
YWNraW5nPj4mJiBiYWNraW5nU3RvcmVzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+
JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0xOTQzLDcgKzE5NDIsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoanNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpVbnNwZWNpZmllZEVycm9yKTsKLSAgICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxp
emVyKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNo
YXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1hZ2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFs
aXplciBkZXNlcmlhbGl6ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlUG9ydHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxv
YkZpbGVQYXRocywgc2hhcmVkQnVmZmVycywgV1RGTW92ZShiYWNraW5nU3RvcmVzKQogI2lmIEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAgICAgLCBXVEZNb3ZlKGRldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzZXMpCiAjZW5kaWYKQEAgLTE5OTYsNyArMTk5NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgIH07CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMs
IEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVm
ZmVyCisgICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFy
cmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYm
IGJhY2tpbmdTdG9yZXMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRh
Y2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsgfQog
I2VuZGlmCkBAIC0yMDE0LDggKzIwMTMsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fbWVzc2Fn
ZVBvcnRzKG1lc3NhZ2VQb3J0cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVudHMoYXJy
YXlCdWZmZXJDb250ZW50cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJheUJ1ZmZlckNv
bnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKLSAgICAgICAgLCBtX2lt
YWdlQnVmZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1h
cHMobV9pbWFnZUJ1ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlcyhXVEZN
b3ZlKGJhY2tpbmdTdG9yZXMpKQorICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKG1fYmFja2luZ1N0
b3Jlcy5zaXplKCkpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9k
ZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNl
cykpCiAgICAgICAgICwgbV9vZmZzY3JlZW5DYW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2Fu
dmFzZXMuc2l6ZSgpKQpAQCAtMjAyOCw3ICsyMDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fdmVyc2lvbiA9IDB4RkZGRkZGRkY7CiAgICAgfQogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRz
LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eSogc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMK
KyAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlC
dWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8T3B0aW9uYWw8
SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5nU3RvcmVzCiAjaWYgRU5BQkxFKE9GRlNDUkVF
Tl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNj
cmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0yMDQ5
LDggKzIwNDgsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fYmxvYlVSTHMoYmxvYlVSTHMpCiAg
ICAgICAgICwgbV9ibG9iRmlsZVBhdGhzKGJsb2JGaWxlUGF0aHMpCiAgICAgICAgICwgbV9zaGFy
ZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCi0gICAgICAgICwgbV9pbWFnZUJ1ZmZlcnMoV1RGTW92
ZShpbWFnZUJ1ZmZlcnMpKQotICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKG1faW1hZ2VCdWZmZXJz
LnNpemUoKSkKKyAgICAgICAgLCBtX2JhY2tpbmdTdG9yZXMoV1RGTW92ZShiYWNraW5nU3RvcmVz
KSkKKyAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2JhY2tpbmdTdG9yZXMuc2l6ZSgpKQogI2lm
IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAsIG1fZGV0YWNoZWRPZmZzY3JlZW5D
YW52YXNlcyhXVEZNb3ZlKGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpKQogICAgICAgICAsIG1f
b2Zmc2NyZWVuQ2FudmFzZXMobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzLnNpemUoKSkKQEAg
LTI4ODMsMTMgKzI4ODIsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGlu
ZGV4OwogICAgICAgICBib29sIGluZGV4U3VjY2Vzc2Z1bGx5UmVhZCA9IHJlYWQoaW5kZXgpOwot
ICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBpbmRleCA+PSBtX2ltYWdlQnVm
ZmVycy5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFpbmRleFN1Y2Nlc3NmdWxseVJlYWQgfHwgaW5k
ZXggPj0gbV9iYWNraW5nU3RvcmVzLnNpemUoKSkgewogICAgICAgICAgICAgZmFpbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9p
bWFnZUJpdG1hcHNbaW5kZXhdKQotICAgICAgICAgICAgbV9pbWFnZUJpdG1hcHNbaW5kZXhdID0g
SW1hZ2VCaXRtYXA6OmNyZWF0ZShXVEZNb3ZlKG1faW1hZ2VCdWZmZXJzLmF0KGluZGV4KSkpOwor
ICAgICAgICAgICAgbV9pbWFnZUJpdG1hcHNbaW5kZXhdID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZShX
VEZNb3ZlKG1fYmFja2luZ1N0b3Jlcy5hdChpbmRleCkpKTsKIAogICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjEsMTMgQEAgcHJpdmF0ZToKIAogICAgIEpTVmFs
dWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qgb3JpZ2luQ2xlYW47
Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAgdWludDhfdCBmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFsaXphdGlvblN0YXRl
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50MzJfdCBsb2dpY2Fs
SGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVhZChvcmlnaW5DbGVh
bikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8
ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikp
IHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwgIXJlYWQobG9naWNh
bFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUp
IHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0yOTk5LDcgKzI5
OTYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsgSW50UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNfY2FzdDxib29sPihw
cmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXIpLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0
YXRlPjo6ZnJvbVJhdyhzZXJpYWxpemF0aW9uU3RhdGUpKSk7CiAgICAgICAgIHJldHVybiBnZXRK
U1ZhbHVlKGJpdG1hcCk7CiAgICAgfQogCkBAIC0zNDM0LDcgKzM0MzEsNyBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9i
RmlsZVBhdGhzOwogICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9zaGFyZWRCdWZmZXJz
OwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1h
Z2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IG1faW1hZ2VCdWZmZXJzOworICAgIFZlY3Rv
cjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBtX2JhY2tpbmdTdG9yZXM7CiAgICAgVmVj
dG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IG1faW1hZ2VCaXRtYXBzOwogI2lmIEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXM+PiBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXM7CkBAIC0zNjU4LDcgKzM2NTUs
NyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWCiAgICAgbV9tZW1v
cnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5
QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZlY3RvcjxPcHRpb25h
bDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tpbmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2
NjksNyArMzY2Niw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYK
ICAgICA6IG1fZGF0YShXVEZNb3ZlKGJ1ZmZlcikpCiAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVu
dHNBcnJheShXVEZNb3ZlKGFycmF5QnVmZmVyQ29udGVudHNBcnJheSkpCiAgICAgLCBtX3NoYXJl
ZEJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5KSkK
LSAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKKyAgICAsIG1fYmFj
a2luZ1N0b3JlcyhXVEZNb3ZlKGJhY2tpbmdTdG9yZXMpKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5f
Q0FOVkFTKQogICAgICwgbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKFdURk1vdmUoZGV0YWNo
ZWRPZmZzY3JlZW5DYW52YXNlcykpCiAjZW5kaWYKQEAgLTM2OTksOSArMzY5Niw5IEBAIHNpemVf
dCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNvbXB1dGVNZW0KICAgICAgICAgICAgIGNvc3QgKz0g
Y29udGVudC5zaXplSW5CeXRlcygpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGFpciA6IG1f
aW1hZ2VCdWZmZXJzKSB7Ci0gICAgICAgIGlmIChwYWlyLmZpcnN0KQotICAgICAgICAgICAgY29z
dCArPSBwYWlyLmZpcnN0LT5tZW1vcnlDb3N0KCk7CisgICAgZm9yIChhdXRvJiBiYWNraW5nU3Rv
cmUgOiBtX2JhY2tpbmdTdG9yZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gYmFja2lu
Z1N0b3JlID8gYmFja2luZ1N0b3JlLT5idWZmZXIoKSA6IG51bGxwdHIpCisgICAgICAgICAgICBj
b3N0ICs9IGJ1ZmZlci0+bWVtb3J5Q29zdCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShPRkZTQ1JF
RU5fQ0FOVkFTKQpAQCAtMzkyNSw3ICszOTIyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4+IAogICAgIGlmIChhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkuaGFzRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFz
ZUV4Y2VwdGlvbigpOwogCi0gICAgYXV0byBpbWFnZUJ1ZmZlcnMgPSBJbWFnZUJpdG1hcDo6ZGV0
YWNoQml0bWFwcyhXVEZNb3ZlKGltYWdlQml0bWFwcykpOworICAgIGF1dG8gYmFja2luZ1N0b3Jl
cyA9IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRtYXBzKSk7CiAK
ICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gZGV0YWNoZWRDYW52YXNlczsKQEAgLTM5MzMsNyAr
MzkzMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiAKICAgICAg
ICAgZGV0YWNoZWRDYW52YXNlcy5hcHBlbmQob2Zmc2NyZWVuQ2FudmFzLT5kZXRhY2goKSk7CiAj
ZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShX
VEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFz
ZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6OldvcmtlclBv
c3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxwdHIsIFdURk1vdmUoaW1h
Z2VCdWZmZXJzKQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVs
ZWFzZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6Oldvcmtl
clBvc3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxwdHIsIFdURk1vdmUo
YmFja2luZ1N0b3JlcykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAg
ICAgICAsIFdURk1vdmUoZGV0YWNoZWRDYW52YXNlcykKICNlbmRpZgpAQCAtMzk4OSw3ICszOTg2
LDcgQEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogCiBKU1ZhbHVl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxp
emF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25S
ZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2ltYWdlQnVm
ZmVycykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VQb3J0cywgV1RGTW92ZShtX2JhY2tpbmdTdG9yZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9D
QU5WQVMpCiAgICAgICAgICwgV1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Ryb25nLmg+CkBAIC01MSw4ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzOwogI2VuZGlmCiBjbGFzcyBJREJWYWx1
ZTsKLWNsYXNzIEltYWdlQml0bWFwOwogY2xhc3MgTWVzc2FnZVBvcnQ7CitjbGFzcyBJbWFnZUJp
dG1hcEJhY2tpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBlbnVtIGNsYXNzIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOwogCkBAIC0xMTcsNyArMTE2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNo
YXI+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8
dW5zaWduZWQgY2hhcj4mJiwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4pOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5Piwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4gc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMK
KyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tp
bmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiA9IHsgfQogI2VuZGlm
CkBAIC0xMzEsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
bV9kYXRhOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IG1f
YXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXk+IG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheTsKLSAgICBWZWN0b3I8
c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJp
YWxpemF0aW9uU3RhdGU+PiBtX2ltYWdlQnVmZmVyczsKKyAgICBWZWN0b3I8T3B0aW9uYWw8SW1h
Z2VCaXRtYXBCYWNraW5nPj4gbV9iYWNraW5nU3RvcmVzOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5f
Q0FOVkFTKQogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52
YXM+PiBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMjEgKzY5LDEyIEBA
IHN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUKIAogUmVmPEltYWdlQml0
bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEludFNpemUgc2l6ZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlKEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUpKTsKKyAgICByZXR1cm4gY3JlYXRlKHsgSW1hZ2VC
dWZmZXI6OmNyZWF0ZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSwgYnVm
ZmVyUmVuZGVyaW5nTW9kZSkgfSk7CiB9CiAKLVJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZm
ZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4mJiBidWZmZXIpCitSZWY8SW1hZ2VCaXRtYXA+IEltYWdl
Qml0bWFwOjpjcmVhdGUoT3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPiYmIGJhY2tpbmdTdG9y
ZSkKIHsKLSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYnVmZmVyLmZpcnN0
KSk7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBidWZmZXIuc2Vjb25kLm9yaWdp
bkNsZWFuOwotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSBidWZmZXIuc2Vj
b25kLnByZW11bHRpcGx5QWxwaGE7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0
aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5mb3JjaWJseVByZW11bHRpcGx5QWxwaGE7Ci0gICAg
cmV0dXJuIGltYWdlQml0bWFwOwotfQotCi1SZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1hcChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1hcChXVEZNb3ZlKGJhY2tpbmdTdG9yZSkpKTsKIH0K
IAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJ
bWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21p
c2UpCkBAIC05NSwxNSArODYsMTQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShT
Y3JpcHRFeAogICAgICk7CiB9CiAKLVZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFw
OjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCitW
ZWN0b3I8T3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJp
dG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYgYml0bWFwcykKIHsKLSAgICBWZWN0
b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpT
ZXJpYWxpemF0aW9uU3RhdGU+PiBidWZmZXJzOworICAgIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJp
dG1hcEJhY2tpbmc+PiBidWZmZXJzOwogICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykK
LSAgICAgICAgYnVmZmVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYml0bWFwLT50cmFuc2Zlck93
bmVyc2hpcEFuZENsb3NlKCksIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyBiaXRt
YXAtPm9yaWdpbkNsZWFuKCksIGJpdG1hcC0+cHJlbXVsdGlwbHlBbHBoYSgpLCBiaXRtYXAtPmZv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpIH0pKTsKKyAgICAgICAgYnVmZmVycy5hcHBlbmQoYml0
bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpOwogICAgIHJldHVybiBidWZmZXJzOwogfQog
Ci0KIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNvdXJjZSwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50
IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCiB7CiAgICAgLy8gMS4gSWYgZWl0
aGVyIHRoZSBzdyBvciBzaCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCBidXQgemVybywgcmV0dXJu
IGEgcHJvbWlzZQpAQCAtMjQzLDEzICsyMzMsMTUgQEAgdm9pZCBJbWFnZUJpdG1hcDo6cmVzb2x2
ZVdpdGhCbGFua0ltYWdlQgogICAgIC8vIFJlc29sdmUgUHJvbWlzZSB3aXRoIGEgYmxhbmsgMXgx
IEltYWdlQml0bWFwLgogICAgIGF1dG8gYml0bWFwRGF0YSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKDEsIDEpLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsKIAotICAgIC8vIDcuIENyZWF0
ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0
ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDkuIElmIHRoZSBvcmlnaW4gb2YgaW1h
Z2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBvcmlnaW4gc3BlY2lmaWVk
IGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwgdGhlbiBzZXQgdGhlIG9y
aWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncwogICAgIC8vICAgIGJp
dG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5DbGVhbiA9IG9yaWdpbkNs
ZWFuOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0
ZTsKKyAgICBpZiAob3JpZ2luQ2xlYW4pCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisgICAgCisgICAgLy8gNy4gQ3JlYXRl
IGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpLCBzZXJpYWxpemF0aW9uU3Rh
dGUpKTsKIAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1
bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHBy
b21pc2Ugd2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC0z
NzMsMTYgKzM2NSwxOCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4
CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAg
Yml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2VGb3JSZW5kZXIsIGRlc3RSZWN0
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50
YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCi0gICAg
Ly8gNy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KLSAgICBhdXRvIGltYWdlQml0
bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOwotCiAgICAgLy8gOS4gSWYgdGhlIG9y
aWdpbiBvZiBpbWFnZSdzIGltYWdlIGlzIG5vdCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIG9yaWdp
biBzcGVjaWZpZWQgYnkgdGhlCiAgICAgLy8gICAgZW50cnkgc2V0dGluZ3Mgb2JqZWN0LCB0aGVu
IHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzCiAg
ICAgLy8gICAgYml0bWFwIHRvIGZhbHNlLgorICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3Rh
dGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBpZiAoIXRhaW50c09yaWdpbigqY2FjaGVkSW1h
Z2UpKQorICAgICAgICBzZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRz
T3JpZ2luKCpjYWNoZWRJbWFnZSk7CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQ
cmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFk
ZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRt
YXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVs
dGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1h
cCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFnZUJpdG1hcEJhY2tp
bmcoV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXphdGlvblN0YXRlKSk7CiAKICAgICAvLyAx
MC4gUmV0dXJuIGEgbmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBz
IGluIHBhcmFsbGVsLgogICAgIC8vIDExLiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNDM5LDE1ICs0MzMsMTcgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgIEZsb2F0UmVjdCBk
ZXN0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRl
eHQoKS5kcmF3SW1hZ2UoKmltYWdlRm9yUmVuZGVyLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVh
bGl0eShvcHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRp
b24ob3B0aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIAotICAgIC8vIDMuIENyZWF0ZSBhIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZN
b3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDUuIFNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcg
b2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzIGJpdG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhcwog
ICAgIC8vICAgIHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgY2FudmFzIGVsZW1lbnQncyBi
aXRtYXAuCisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0
YXRlOworICAgIGlmIChjYW52YXMub3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlv
blN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAotICAgIGltYWdl
Qml0bWFwLT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7CisgICAgaWYgKGFs
cGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlw
bHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAg
ICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5
QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVBy
ZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxw
aGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDMu
IENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9
IGNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXph
dGlvblN0YXRlKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRp
bnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0
aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4K
QEAgLTUxNCwxNSArNTEwLDE4IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGMsIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHNpemUpKTsKICAgICB9CiAKLSAgICAvLyA1LiBMZXQgaW1hZ2VC
aXRtYXAgYmUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgotICAgIGF1dG8gaW1hZ2VCaXRtYXAg
PSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7Ci0KICAgICAvLyA2LjMuIElmIHRoZSBvcmln
aW4gb2YgaW1hZ2UncyB2aWRlbyBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBlbnRyeQogICAgIC8v
ICAgICAgc2V0dGluZ3Mgb2JqZWN0J3Mgb3JpZ2luLCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFu
IGZsYWcgb2YKICAgICAvLyAgICAgIGltYWdlJ3MgYml0bWFwIHRvIGZhbHNlLgotICAgIGltYWdl
Qml0bWFwLT5tX29yaWdpbkNsZWFuID0gIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250
ZXh0LnNlY3VyaXR5T3JpZ2luKCksICp2aWRlbyk7CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlOworICAgIGlmICghdGFpbnRzT3JpZ2luKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKSkKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAot
ICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNh
dGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICBzZXJpYWxp
emF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSk7CisK
KyAgICAvLyA1LiBMZXQgaW1hZ2VCaXRtYXAgYmUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0Lgor
ICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
Yml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogCiAgICAgLy8gNi40LjEuIFJlc29s
dmUgcCB3aXRoIGltYWdlQml0bWFwLgogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3ZlKGltYWdl
Qml0bWFwKSk7CkBAIC01NjYsMjAgKzU2NSwyNCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQ
cm9taXNlKFNjcmlwdEV4CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0
cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2VGb3JS
ZW5kZXIsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0
eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRp
b24pIH0pOwogCi0gICAgLy8gMy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KLSAg
ICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOwotCiAgICAg
Ly8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0
J3MgYml0bWFwIHRvIHRoZSBzYW1lCiAgICAgLy8gICAgdmFsdWUgYXMgdGhlIG9yaWdpbi1jbGVh
biBmbGFnIG9mIHRoZSBiaXRtYXAgb2YgdGhlIGltYWdlIGFyZ3VtZW50LgotICAgIGltYWdlQml0
bWFwLT5tX29yaWdpbkNsZWFuID0gZXhpc3RpbmdJbWFnZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKTsK
LQotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBs
aWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBPcHRpb25TZXQ8U2Vy
aWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGU7CisgICAgaWYgKGV4aXN0aW5nSW1h
Z2VCaXRtYXAtPm9yaWdpbkNsZWFuKCkpCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisKKyAgICBpZiAoYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIHNlcmlh
bGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsK
KworICAgICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLCB3aGVu
IGNyZWF0aW5nIGFuIEltYWdlQml0bWFwIGZyb20KKyAgICAgICAgLy8gYW4gSW1hZ2VCaXRtYXAs
IHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVu
CisgICAgICAgIC8vIHRob3VnaCB0aGUgYWxwaGEgbW9kZSBvZiB0aGUgaW50ZXJuYWwgc3VyZmFj
ZSBjbGFpbXMgaXQgaXMuIEluc3RydWN0CisgICAgICAgIC8vIHVzZXJzIG9mIHRoaXMgSW1hZ2VC
aXRtYXAgdG8gaWdub3JlIHRoZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4KKyAgICAg
ICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OkZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgfQogCi0gICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUgR3Jh
cGhpY3MgYmFja2VuZCwgd2hlbiBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCi0gICAgLy8g
YW4gSW1hZ2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJl
bXVsdGlwbGllZCBldmVuCi0gICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRl
cm5hbCBzdXJmYWNlIGNsYWltcyBpdCBpcy4gSW5zdHJ1Y3QKLSAgICAvLyB1c2VycyBvZiB0aGlz
IEltYWdlQml0bWFwIHRvIGlnbm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1vZGUu
Ci0gICAgaW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VCaXRt
YXAtPm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRt
YXAgb2JqZWN0LgorICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNr
aW5nKFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogCiAgICAgLy8g
Ni4gUmV0dXJuIGEgbmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBz
IGluIHBhcmFsbGVsLgogICAgIC8vIDcuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3
IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC03NTIsOSArNzU1LDExIEBAIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIoCiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRy
YXdJbWFnZSgqaW1hZ2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZh
bHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVz
aXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdl
T3JpZW50YXRpb24pIH0pOwogCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3Zl
KGJpdG1hcERhdGEpKTsKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxp
emF0aW9uU3RhdGUgPSBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuOworICAgIGlmIChh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAg
ICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBs
eUFscGhhKTsKIAotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFs
cGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBhdXRv
IGltYWdlQml0bWFwID0gY3JlYXRlKEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERh
dGEpLCBzZXJpYWxpemF0aW9uU3RhdGUpKTsKIAogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3Zl
KGltYWdlQml0bWFwKSk7CiB9CkBAIC03OTksNyArODA0LDcgQEAgdm9pZCBJbWFnZUJpdG1hcDo6
Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJu
VmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZQogICAgICAgICAmJiBvcHRpb25zLmltYWdlT3Jp
ZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6Tm9uZSkgewogICAg
ICAgICBiaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZh
bHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgICAgIGF1dG8gaW1hZ2VC
aXRtYXAgPSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7CisgICAgICAgIGF1dG8gaW1hZ2VC
aXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYml0bWFwRGF0YSkpKTsK
ICAgICAgICAgLy8gVGhlIHJlc3VsdCBpcyBpbXBsaWNpdGx5IG9yaWdpbi1jbGVhbiwgYW5kIGFs
cGhhIHByZW11bHRpcGxpY2F0aW9uIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZC4KICAgICAgICAg
cHJvbWlzZS5yZXNvbHZlKFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtODEzLDQ3ICs4MTgsMzAgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3Jp
cHRFeAogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRlbXBCaXRt
YXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShvcHRpb25zLnJlc2l6ZVF1YWxp
dHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0aW9ucy5pbWFnZU9yaWVudGF0
aW9uKSB9KTsKIAogICAgIC8vIDYuNC4xLiBSZXNvbHZlIHAgd2l0aCBJbWFnZUJpdG1hcC4KLSAg
ICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOworICAgIGF1
dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJpdG1hcERhdGEpIH0pOwogICAgIC8v
IFRoZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0
aXBsaWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCiAgICAgcHJvbWlzZS5yZXNvbHZl
KFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKIH0KIAotSW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCi0gICAgOiBtX2JpdG1hcERhdGEo
V1RGTW92ZShidWZmZXIpKQorSW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKE9wdGlvbmFsPEltYWdl
Qml0bWFwQmFja2luZz4mJiBiYWNraW5nU3RvcmUpCisgICAgOiBtX2JhY2tpbmdTdG9yZShXVEZN
b3ZlKGJhY2tpbmdTdG9yZSkpCiB7Ci0gICAgQVNTRVJUKG1fYml0bWFwRGF0YSk7CisgICAgQVNT
RVJUX0lNUExJRVMobV9iYWNraW5nU3RvcmUsIG1fYmFja2luZ1N0b3JlLT5idWZmZXIoKSk7CiB9
CiAKIEltYWdlQml0bWFwOjp+SW1hZ2VCaXRtYXAoKSA9IGRlZmF1bHQ7CiAKLXVuc2lnbmVkIElt
YWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0CitPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+IElt
YWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkKIHsKLSAgICBpZiAobV9kZXRhY2hl
ZCB8fCAhbV9iaXRtYXBEYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIHRoZSByaWdodCB3aWR0aD8KLSAgICByZXR1cm4gbV9iaXRtYXBEYXRhLT5sb2dpY2Fs
U2l6ZSgpLndpZHRoKCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYWNraW5nU3RvcmUs
IFdURjo6bnVsbG9wdCk7CiB9CiAKLXVuc2lnbmVkIEltYWdlQml0bWFwOjpoZWlnaHQoKSBjb25z
dAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dGFrZUltYWdlQnVm
ZmVyKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBEYXRhKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/Ci0gICAg
cmV0dXJuIG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICBpZiAoYXV0
byBiYWNraW5nU3RvcmUgPSB0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpCisgICAgICAgIHJldHVy
biBiYWNraW5nU3RvcmUtPnRha2VJbWFnZUJ1ZmZlcigpOworICAgIEFTU0VSVChpc0RldGFjaGVk
KCkpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEltYWdlQml0bWFwOjpjbG9zZSgp
Ci17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgbV9iaXRtYXBEYXRhID0gbnVsbHB0cjsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJP
d25lcnNoaXBBbmRDbG9zZSgpCi17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgcmV0dXJu
IFdURk1vdmUobV9iaXRtYXBEYXRhKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAkocmV2aXNpb24gMjY3NTczKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcEJhY2tpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC04
MywzOCArODMsMzQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFNvdXJjZSYmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgaW50
IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBQcm9taXNlJiYpOwogCiAgICAgc3RhdGljIFJl
ZjxJbWFnZUJpdG1hcD4gY3JlYXRlKEludFNpemUpOwotICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRt
YXA+IGNyZWF0ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VC
dWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4mJik7CisgICAgc3RhdGljIFJlZjxJbWFnZUJpdG1h
cD4gY3JlYXRlKE9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4mJik7CiAKICAgICB+SW1hZ2VC
aXRtYXAoKTsKIAotICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBjbG9zZSgpOworICAgIEltYWdlQnVmZmVyKiBidWZmZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT5idWZmZXIo
KSA6IG51bGxwdHI7IH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgaW1wbGljaXQgc2lk
ZS1lZmZlY3Qgb2YgZGV0YWNoaW5nIHRoZSBiYWNraW5nIHN0b3JlLgorICAgIC8vIEl0IHJldHVy
bnMgbnVsbHB0ciBpZiB0aGUgSW1hZ2VCaXRtYXAncyBhbHJlYWR5IGRldGFjaGVkLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdlQnVmZmVyKCk7CisgICAgT3B0aW9u
U2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+c2VyaWFsaXphdGlvblN0YXRlKCkg
OiBTZXJpYWxpemF0aW9uU3RhdGUoKTsgfQorCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT53aWR0aCgpIDogMDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9i
YWNraW5nU3RvcmUtPmhlaWdodCgpIDogMDsgfQorCisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlICYmIG1fYmFja2luZ1N0b3JlLT5vcmlnaW5DbGVh
bigpOyB9CisgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nU3RvcmUgJiYgbV9iYWNraW5nU3RvcmUtPnByZW11bHRpcGx5QWxwaGEoKTsgfQorICAgIGJv
b2wgZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3Rv
cmUgJiYgbV9iYWNraW5nU3RvcmUtPmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpOyB9CisKKyAg
ICBPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+IHRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKTsK
KyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9iYWNraW5nU3RvcmUuaGFz
VmFsdWUoKTsgfQorICAgIHZvaWQgY2xvc2UoKSB7IHRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKTsg
fQogCi0gICAgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhY2hlZDsgfQot
Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIHsgcmV0dXJuIG1fYml0bWFwRGF0YS5nZXQoKTsg
fQotCi0gICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47
IH0KLQotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVs
dGlwbHlBbHBoYTsgfQotCi0gICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21p
bmcgZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3Jz
Ci0gICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxw
aGFJbmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgotICAgIC8vIEltYWdlQml0
bWFwcyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBh
Y2N1cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQotICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBh
bHBoYSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0g
ICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNp
Ymx5UHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6
cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXph
dGlvblN0YXRlPj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7
CisgICAgc3RhdGljIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBkZXRhY2hC
aXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmKTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgSW1hZ2VCaXRtYXBJbWFnZU9ic2VydmVyOwogICAgIGZyaWVuZCBjbGFzcyBQ
ZW5kaW5nSW1hZ2VCaXRtYXA7CiAKLSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKLSAgICBJbWFnZUJpdG1hcChzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpOworICAgIEltYWdlQml0bWFwKE9wdGlvbmFsPEltYWdl
Qml0bWFwQmFja2luZz4mJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIoYm9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmKTsKIApAQCAtMTMzLDExICsxMjks
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFJlZlB0cjxUeXBlZE9NQ1NTSW1hZ2VWYWx1ZT4mLCBJbWFnZUJpdG1hcE9w
dGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAgICAgc3RhdGljIHZvaWQg
Y3JlYXRlRnJvbUJ1ZmZlcihSZWY8QXJyYXlCdWZmZXI+JiYsIFN0cmluZyBtaW1lVHlwZSwgbG9u
ZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgVVJMJiwgSW1hZ2VCaXRtYXBPcHRp
b25zJiYsIE9wdGlvbmFsPEludFJlY3Q+LCBQcm9taXNlJiYpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7Ci0gICAgYm9vbCBtX2RldGFjaGVkIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07Ci0gICAgYm9vbCBtX3ByZW11
bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb3JjaWJseVByZW11bHRpcGx5QWxw
aGEgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4gbV9iYWNraW5n
U3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcEJh
Y2tpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXBCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQml0bWFwQmFja2luZy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQml0bWFwQmFja2luZzo6SW1hZ2VCaXRtYXBC
YWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBiaXRtYXBEYXRhLCBPcHRpb25T
ZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBtX2JpdG1h
cERhdGEoV1RGTW92ZShiaXRtYXBEYXRhKSkKKyAgICAsIG1fc2VyaWFsaXphdGlvblN0YXRlKHNl
cmlhbGl6YXRpb25TdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9iaXRtYXBEYXRhKTsKK30KKworSW1h
Z2VCdWZmZXIqIEltYWdlQml0bWFwQmFja2luZzo6YnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9iaXRtYXBEYXRhLmdldCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQml0bWFwQmFja2luZzo6dGFrZUltYWdlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gV1RG
TW92ZShtX2JpdG1hcERhdGEpOworfQorCit1bnNpZ25lZCBJbWFnZUJpdG1hcEJhY2tpbmc6Ondp
ZHRoKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/Cisg
ICAgcmV0dXJuIG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0
aCgpIDogMDsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRtYXBCYWNraW5nOjpoZWlnaHQoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/CisgICAgcmV0dXJu
IG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKSA6IDA7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXBCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcEJhY2tpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgU2VyaWFsaXphdGlvblN0YXRlIDogdWludDhfdCB7CisgICAgT3JpZ2luQ2xlYW4gICAgICAg
ICAgICAgID0gMSA8PCAwLAorICAgIFByZW11bHRpcGx5QWxwaGEgICAgICAgICA9IDEgPDwgMSwK
KyAgICBGb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSAxIDw8IDIKK307CisKK2NsYXNzIEltYWdl
Qml0bWFwQmFja2luZyB7CitwdWJsaWM6CisgICAgSW1hZ2VCaXRtYXBCYWNraW5nKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gPSBT
ZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKKworICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1
ZmZlcigpOworCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBoZWln
aHQoKSBjb25zdDsKKworICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3Nl
cmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFu
KTsgfQorCisgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJp
YWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFs
cGhhKTsgfQorICAgIC8vIFdoZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20g
YW4gSW1hZ2VCaXRtYXAncyBJbWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8v
IHRoZSBhbHBoYSBtb2RlIG9mIHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBp
biB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3Jl
YXRlZCBmcm9tIEltYWdlQml0bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUs
IGFuZCBjYWxsZXJzIG11c3QgYmUKKyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9k
ZSwgYW5kIGZvcmNpYmx5IHByZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wg
Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9u
U3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxw
aGEpOyB9CisKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9u
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9iaXRtYXBEYXRhOworICAgIE9w
dGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVu
Q2FudmFzLmNwcAkocmV2aXNpb24gMjY3NTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgICAgICByZXR1cm4g
eyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFtX2hh
c0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpj
cmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCksIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyB0cnVlLCBmYWxzZSwg
ZmFsc2UgfX0pIH07CisgICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsg
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
IH0pIH07CiAKICAgICAgICAgYXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+
IHsgbnVsbHB0ciB9IH07CiAKLSAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7
IFdURk1vdmUoYnVmZmVyKSwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZSB7IG9yaWdp
bkNsZWFuKCksIGZhbHNlLCBmYWxzZSB9fSkgfTsKKyAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgb3JpZ2luQ2xlYW4oKSA/IFNlcmlhbGl6YXRp
b25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxpemF0aW9uU3RhdGUoKSB9KSB9OwogICAgIH0K
IAogI2lmIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
MjY3NTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXQKICAgICAgICAgY2FudmFzKCktPnNldE9y
aWdpbkNsZWFuKCk7CiAgICAgZWxzZQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRl
ZCgpOwotICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJpdG1h
cC0+dHJhbnNmZXJPd25lcnNoaXBBbmRDbG9zZSgpKTsKKyAgICBjYW52YXMoKS0+c2V0SW1hZ2VC
dWZmZXJBbmRNYXJrRGlydHkoaW1hZ2VCaXRtYXAtPnRha2VJbWFnZUJ1ZmZlcigpKTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojp0cmFuc2ZlckZy
b21JbWFnZUJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lv
biAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgsNiBAQCBjbGFzcyBEcmF3aW5nQ29udGV4
dDsKIAogY2xhc3MgSW1hZ2VCdWZmZXIgewogcHVibGljOgotICAgIHN0cnVjdCBTZXJpYWxpemF0
aW9uU3RhdGUgewotICAgICAgICBib29sIG9yaWdpbkNsZWFuIHsgZmFsc2UgfTsKLSAgICAgICAg
Ym9vbCBwcmVtdWx0aXBseUFscGhhIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBmb3JjaWJseVBy
ZW11bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIH07Ci0KICAgICAvLyBXaWxsIHJldHVybiBh
IG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIFNob3VsZEFjY2VsZXJhdGUsIFNob3VsZFVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJw
b3NlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6
U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Cg==
</data>
<flag name="commit-queue"
          id="425558"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409752</attachid>
            <date>2020-09-25 15:53:40 -0700</date>
            <delta_ts>2020-09-25 18:42:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216565-20200925155339.patch</filename>
            <type>text/plain</type>
            <size>47505</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NzU5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDIwLTA5LTI1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBTZXJp
YWxpemF0aW9uU3RhdGUgZnJvbSBJbWFnZUJ1ZmZlciB0byBJbWFnZUJpdG1hcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NTY1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgorCisgICAgICAgIEludHJvZHVjZSBJbWFnZUJp
dG1hcEJhY2tpbmcgYW5kIG1ha2UgaXQgYSBtZW1iZXIgb2YgSW1hZ2VCaXRtYXAuIEl0CisgICAg
ICAgIHJlcHJlc2VudHMgdGhlIGJhY2tpbmcgc3RvcmUgb2YgYW4gSW1hZ2VCaXRtYXAuIEN1cnJl
bnRseSBpdCBlbmNhcHN1bGF0ZXMKKyAgICAgICAgYW4gSW1hZ2VCdWZmZXIgYW5kIHRoZSBuZXcg
ZW51bSBTZXJpYWxpemF0aW9uU3RhdGUuIEluIHRoZSBmdXR1cmUsIGl0IGNhbgorICAgICAgICBi
ZSBleHRlbmRlZCB0byBlbmNhcHN1bGF0ZSBlaXRoZXIgYSB0ZXh0dXJlIG9yIGFuIEltYWdlQnVm
ZmVyLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OnJlYWRUcmFuc2ZlcnJlZEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjb21wdXRlTWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0
bWFwOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OmRldGFjaEJpdG1h
cHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnJlc29sdmVXaXRoQmxhbmtJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6Y3JlYXRlRnJvbUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcDo6SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJpdG1hcEJhY2tpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCaXRtYXA6OnRha2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJpdG1hcDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
aXRtYXA6OmhlaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcDo6Y2xvc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXA6OnRy
YW5zZmVyT3duZXJzaGlwQW5kQ2xvc2UpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvSW1hZ2VC
aXRtYXAuaDoKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjpJbWFnZUJpdG1hcEJhY2tpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjpidWZmZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjp0YWtlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBCYWNraW5nOjp3aWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OmhlaWdodCBjb25zdCk6CisgICAgICAg
ICogaHRtbC9JbWFnZUJpdG1hcEJhY2tpbmcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJpdG1hcEJhY2tpbmc6Om9yaWdpbkNsZWFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQml0bWFwQmFja2luZzo6cHJlbXVsdGlwbHlBbHBoYSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcEJhY2tpbmc6OnNlcmlhbGl6YXRpb25T
dGF0ZSBjb25zdCk6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1h
cCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisKIDIwMjAtMDktMjUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNv
bT4KIAogICAgICAgICBHZXQgcmlkIG9mIEF1ZGlvTm9kZTo6UmVmVHlwZQpJbmRleDogU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC02NTMsNiArNjUzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIGh0bWwvSFRNTFVua25vd25FbGVtZW50LmgKICAgICBo
dG1sL0hUTUxWaWRlb0VsZW1lbnQuaAogICAgIGh0bWwvSW1hZ2VCaXRtYXAuaAorICAgIGh0bWwv
SW1hZ2VCaXRtYXBCYWNraW5nLmgKICAgICBodG1sL0ltYWdlRGF0YS5oCiAgICAgaHRtbC9JbWFn
ZURvY3VtZW50LmgKICAgICBodG1sL0lucHV0TW9kZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjY3NTczKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTExOTMsNiArMTE5Myw3IEBAIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKIGh0bWwv
SFRNTFdCUkVsZW1lbnQuY3BwCiBodG1sL0hpZGRlbklucHV0VHlwZS5jcHAKIGh0bWwvSW1hZ2VC
aXRtYXAuY3BwCitodG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHAKIGh0bWwvSW1hZ2VEYXRhLmNw
cAogaHRtbC9JbWFnZURvY3VtZW50LmNwcAogaHRtbC9JbWFnZUlucHV0VHlwZS5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDI2NzU3MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjE1Niw2ICsyMTU2LDcgQEAKIAkJNzFG
MDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0NDBDMDA3
MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZH
UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYx
MkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMUI0OTc0MjUxMkJBM0IwMEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMUI0OTcwMjUxMkFDMDQw
MEZFOUQzQiAvKiBJbWFnZUJpdG1hcEJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1h
Z2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
NEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYx
M0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTg4NCw2
ICs5ODg1LDggQEAKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRv
dWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEw
MEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIx
QjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJpdG1hcEJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjFCNDk3MDI1MTJBQzA0MDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQml0bWFwQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYx
M0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMDY4LDYg
KzIzMDcxLDggQEAKIAkJCQkzMUQyNkJDMjFGODZEMThDMDA4RkYyNTUgLyogSW1hZ2VCaXRtYXAu
Y3BwICovLAogCQkJCTMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICov
LAogCQkJCTMxRDI2QkMxMUY4NkQxOEIwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5pZGwgKi8sCisJ
CQkJNzIxQjQ5NkYyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5jcHAgKi8s
CisJCQkJNzIxQjQ5NzAyNTEyQUMwNDAwRkU5RDNCIC8qIEltYWdlQml0bWFwQmFja2luZy5oICov
LAogCQkJCTMxRDI2QkMwMUY4NkQxOEEwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcE9wdGlvbnMuaCAq
LywKIAkJCQkzMUQyNkJCRDFGODZEMTg3MDA4RkYyNTUgLyogSW1hZ2VCaXRtYXBPcHRpb25zLmlk
bCAqLywKIAkJCQlBNzc5NzkxMzBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCAqLywK
QEAgLTMxNzE3LDYgKzMxNzIyLDcgQEAKIAkJCQlCMjc1MzU3MDBCMDUzODE0MDAyQ0U2NEYgLyog
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1QTMzNkY5MUQ4MjFFM0MwMDIyQzRDNyAvKiBJ
bWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4MTVBMzExRjlBNkM4RjAw
RkNCRjg5IC8qIEltYWdlQml0bWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFCNDk3NDI1MTJC
QTNCMDBGRTlEM0IgLyogSW1hZ2VCaXRtYXBCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAJKHJldmlzaW9uIDI2NzU3MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbmNsdWRlICJDcnlwdG9LZXlSU0FDb21wb25lbnRzLmgiCiAjaW5jbHVkZSAiQ3J5cHRvS2V5
UmF3LmgiCiAjaW5jbHVkZSAiSURCVmFsdWUuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcEJhY2tp
bmcuaCIKICNpbmNsdWRlICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0NyeXB0b0tleS5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgpAQCAtMTA0Myw5ICsxMDQ0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIHdyaXRlKEltYWdlQml0bWFwVGFnKTsKLSAgICAgICAgd3JpdGUo
c3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAub3JpZ2luQ2xlYW4oKSkpOwotICAgICAg
ICB3cml0ZShzdGF0aWNfY2FzdDx1aW50OF90PihpbWFnZUJpdG1hcC5wcmVtdWx0aXBseUFscGhh
KCkpKTsKLSAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWludDhfdD4oaW1hZ2VCaXRtYXAuZm9y
Y2libHlQcmVtdWx0aXBseUFscGhhKCkpKTsKKyAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oaW1hZ2VCaXRtYXAuc2VyaWFsaXphdGlvblN0YXRlKCkudG9SYXcoKSkpOwogICAgICAg
ICB3cml0ZShzdGF0aWNfY2FzdDxpbnQzMl90Pihsb2dpY2FsU2l6ZS53aWR0aCgpKSk7CiAgICAg
ICAgIHdyaXRlKHN0YXRpY19jYXN0PGludDMyX3Q+KGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAg
ICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGRvdWJsZT4oYnVmZmVyLT5yZXNvbHV0aW9uU2NhbGUo
KSkpOwpAQCAtMTkzMSw3ICsxOTMwLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwog
ICAgIH0KIAotICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBW
ZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVy
OjpTZXJpYWxpemF0aW9uU3RhdGU+PiYmIGltYWdlQnVmZmVycworICAgIHN0YXRpYyBEZXNlcmlh
bGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBWZWN0b3I8T3B0aW9uYWw8SW1hZ2VCaXRtYXBC
YWNraW5nPj4mJiBiYWNraW5nU3RvcmVzCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAg
ICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4+
JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0xOTQzLDcgKzE5NDIsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoanNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpVbnNwZWNpZmllZEVycm9yKTsKLSAgICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxp
emVyKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNo
YXJlZEJ1ZmZlcnMsIFdURk1vdmUoaW1hZ2VCdWZmZXJzKQorICAgICAgICBDbG9uZURlc2VyaWFs
aXplciBkZXNlcmlhbGl6ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBtZXNz
YWdlUG9ydHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxv
YkZpbGVQYXRocywgc2hhcmVkQnVmZmVycywgV1RGTW92ZShiYWNraW5nU3RvcmVzKQogI2lmIEVO
QUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAgICAgLCBXVEZNb3ZlKGRldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzZXMpCiAjZW5kaWYKQEAgLTE5OTYsNyArMTk5NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHNpemVfdCBtX2luZGV4OwogICAgIH07CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMs
IEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVm
ZmVyCisgICAgQ2xvbmVEZXNlcmlhbGl6ZXIoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFy
cmF5QnVmZmVyQ29udGVudHMsIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYm
IGJhY2tpbmdTdG9yZXMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyCiAjaWYgRU5BQkxF
KE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRh
Y2hlZE9mZnNjcmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcyA9IHsgfQog
I2VuZGlmCkBAIC0yMDE0LDggKzIwMTMsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fbWVzc2Fn
ZVBvcnRzKG1lc3NhZ2VQb3J0cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVudHMoYXJy
YXlCdWZmZXJDb250ZW50cykKICAgICAgICAgLCBtX2FycmF5QnVmZmVycyhhcnJheUJ1ZmZlckNv
bnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkKLSAgICAgICAgLCBtX2lt
YWdlQnVmZmVycyhXVEZNb3ZlKGltYWdlQnVmZmVycykpCi0gICAgICAgICwgbV9pbWFnZUJpdG1h
cHMobV9pbWFnZUJ1ZmZlcnMuc2l6ZSgpKQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlcyhXVEZN
b3ZlKGJhY2tpbmdTdG9yZXMpKQorICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKG1fYmFja2luZ1N0
b3Jlcy5zaXplKCkpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgICAgICwgbV9k
ZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKFdURk1vdmUoZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNl
cykpCiAgICAgICAgICwgbV9vZmZzY3JlZW5DYW52YXNlcyhtX2RldGFjaGVkT2Zmc2NyZWVuQ2Fu
dmFzZXMuc2l6ZSgpKQpAQCAtMjAyOCw3ICsyMDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fdmVyc2lvbiA9IDB4RkZGRkZGRkY7CiAgICAgfQogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIo
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRz
LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eSogc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMK
KyAgICBDbG9uZURlc2VyaWFsaXplcihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlC
dWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocywg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzLCBWZWN0b3I8T3B0aW9uYWw8
SW1hZ2VCaXRtYXBCYWNraW5nPj4mJiBiYWNraW5nU3RvcmVzCiAjaWYgRU5BQkxFKE9GRlNDUkVF
Tl9DQU5WQVMpCiAgICAgICAgICwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNj
cmVlbkNhbnZhcz4+JiYgZGV0YWNoZWRPZmZzY3JlZW5DYW52YXNlcwogI2VuZGlmCkBAIC0yMDQ5
LDggKzIwNDgsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fYmxvYlVSTHMoYmxvYlVSTHMpCiAg
ICAgICAgICwgbV9ibG9iRmlsZVBhdGhzKGJsb2JGaWxlUGF0aHMpCiAgICAgICAgICwgbV9zaGFy
ZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCi0gICAgICAgICwgbV9pbWFnZUJ1ZmZlcnMoV1RGTW92
ZShpbWFnZUJ1ZmZlcnMpKQotICAgICAgICAsIG1faW1hZ2VCaXRtYXBzKG1faW1hZ2VCdWZmZXJz
LnNpemUoKSkKKyAgICAgICAgLCBtX2JhY2tpbmdTdG9yZXMoV1RGTW92ZShiYWNraW5nU3RvcmVz
KSkKKyAgICAgICAgLCBtX2ltYWdlQml0bWFwcyhtX2JhY2tpbmdTdG9yZXMuc2l6ZSgpKQogI2lm
IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgICAgICAsIG1fZGV0YWNoZWRPZmZzY3JlZW5D
YW52YXNlcyhXVEZNb3ZlKGRldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpKQogICAgICAgICAsIG1f
b2Zmc2NyZWVuQ2FudmFzZXMobV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzLnNpemUoKSkKQEAg
LTI4ODMsMTMgKzI4ODIsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHVpbnQzMl90IGlu
ZGV4OwogICAgICAgICBib29sIGluZGV4U3VjY2Vzc2Z1bGx5UmVhZCA9IHJlYWQoaW5kZXgpOwot
ICAgICAgICBpZiAoIWluZGV4U3VjY2Vzc2Z1bGx5UmVhZCB8fCBpbmRleCA+PSBtX2ltYWdlQnVm
ZmVycy5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFpbmRleFN1Y2Nlc3NmdWxseVJlYWQgfHwgaW5k
ZXggPj0gbV9iYWNraW5nU3RvcmVzLnNpemUoKSkgewogICAgICAgICAgICAgZmFpbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghbV9p
bWFnZUJpdG1hcHNbaW5kZXhdKQotICAgICAgICAgICAgbV9pbWFnZUJpdG1hcHNbaW5kZXhdID0g
SW1hZ2VCaXRtYXA6OmNyZWF0ZShXVEZNb3ZlKG1faW1hZ2VCdWZmZXJzLmF0KGluZGV4KSkpOwor
ICAgICAgICAgICAgbV9pbWFnZUJpdG1hcHNbaW5kZXhdID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZShX
VEZNb3ZlKG1fYmFja2luZ1N0b3Jlcy5hdChpbmRleCkpKTsKIAogICAgICAgICBhdXRvIGJpdG1h
cCA9IG1faW1hZ2VCaXRtYXBzW2luZGV4XS5nZXQoKTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFs
dWUoYml0bWFwKTsKQEAgLTI5NjIsMTUgKzI5NjEsMTMgQEAgcHJpdmF0ZToKIAogICAgIEpTVmFs
dWUgcmVhZEltYWdlQml0bWFwKCkKICAgICB7Ci0gICAgICAgIHVpbnQ4X3Qgb3JpZ2luQ2xlYW47
Ci0gICAgICAgIHVpbnQ4X3QgcHJlbXVsdGlwbHlBbHBoYTsKLSAgICAgICAgdWludDhfdCBmb3Jj
aWJseVByZW11bHRpcGx5QWxwaGE7CisgICAgICAgIHVpbnQ4X3Qgc2VyaWFsaXphdGlvblN0YXRl
OwogICAgICAgICBpbnQzMl90IGxvZ2ljYWxXaWR0aDsKICAgICAgICAgaW50MzJfdCBsb2dpY2Fs
SGVpZ2h0OwogICAgICAgICBkb3VibGUgcmVzb2x1dGlvblNjYWxlOwogICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyOwogCi0gICAgICAgIGlmICghcmVhZChvcmlnaW5DbGVh
bikgfHwgIXJlYWQocHJlbXVsdGlwbHlBbHBoYSkgfHwgIXJlYWQoZm9yY2libHlQcmVtdWx0aXBs
eUFscGhhKSB8fCAhcmVhZChsb2dpY2FsV2lkdGgpIHx8ICFyZWFkKGxvZ2ljYWxIZWlnaHQpIHx8
ICFyZWFkKHJlc29sdXRpb25TY2FsZSkgfHwgIXJlYWRBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikp
IHsKKyAgICAgICAgaWYgKCFyZWFkKHNlcmlhbGl6YXRpb25TdGF0ZSkgfHwgIXJlYWQobG9naWNh
bFdpZHRoKSB8fCAhcmVhZChsb2dpY2FsSGVpZ2h0KSB8fCAhcmVhZChyZXNvbHV0aW9uU2NhbGUp
IHx8ICFyZWFkQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CkBAIC0yOTk5LDcgKzI5
OTYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsgSW50UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUgfSk7CiAKLSAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0
YXRlIHsgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pLCBzdGF0aWNfY2FzdDxib29sPihw
cmVtdWx0aXBseUFscGhhKSwgc3RhdGljX2Nhc3Q8Ym9vbD4oZm9yY2libHlQcmVtdWx0aXBseUFs
cGhhKSB9fSk7CisgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFn
ZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXIpLCBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0
YXRlPjo6ZnJvbVJhdyhzZXJpYWxpemF0aW9uU3RhdGUpKSk7CiAgICAgICAgIHJldHVybiBnZXRK
U1ZhbHVlKGJpdG1hcCk7CiAgICAgfQogCkBAIC0zNDM0LDcgKzM0MzEsNyBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9i
RmlsZVBhdGhzOwogICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9zaGFyZWRCdWZmZXJz
OwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1h
Z2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IG1faW1hZ2VCdWZmZXJzOworICAgIFZlY3Rv
cjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBtX2JhY2tpbmdTdG9yZXM7CiAgICAgVmVj
dG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IG1faW1hZ2VCaXRtYXBzOwogI2lmIEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3Jl
ZW5DYW52YXM+PiBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXM7CkBAIC0zNjU4LDcgKzM2NTUs
NyBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWCiAgICAgbV9tZW1v
cnlDb3N0ID0gY29tcHV0ZU1lbW9yeUNvc3QoKTsKIH0KIAotU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVpbnQ4X3Q+JiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRl
bnRzQXJyYXk+IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgc3RkOjp1bmlxdWVfcHRyPEFycmF5
QnVmZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSwgVmVjdG9yPHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFs
aXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXksIFZlY3RvcjxPcHRpb25h
bDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tpbmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NS
RUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zm
c2NyZWVuQ2FudmFzPj4mJiBkZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzCiAjZW5kaWYKQEAgLTM2
NjksNyArMzY2Niw3IEBAIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFYK
ICAgICA6IG1fZGF0YShXVEZNb3ZlKGJ1ZmZlcikpCiAgICAgLCBtX2FycmF5QnVmZmVyQ29udGVu
dHNBcnJheShXVEZNb3ZlKGFycmF5QnVmZmVyQ29udGVudHNBcnJheSkpCiAgICAgLCBtX3NoYXJl
ZEJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5KSkK
LSAgICAsIG1faW1hZ2VCdWZmZXJzKFdURk1vdmUoaW1hZ2VCdWZmZXJzKSkKKyAgICAsIG1fYmFj
a2luZ1N0b3JlcyhXVEZNb3ZlKGJhY2tpbmdTdG9yZXMpKQogI2lmIEVOQUJMRShPRkZTQ1JFRU5f
Q0FOVkFTKQogICAgICwgbV9kZXRhY2hlZE9mZnNjcmVlbkNhbnZhc2VzKFdURk1vdmUoZGV0YWNo
ZWRPZmZzY3JlZW5DYW52YXNlcykpCiAjZW5kaWYKQEAgLTM2OTksOSArMzY5Niw5IEBAIHNpemVf
dCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNvbXB1dGVNZW0KICAgICAgICAgICAgIGNvc3QgKz0g
Y29udGVudC5zaXplSW5CeXRlcygpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgcGFpciA6IG1f
aW1hZ2VCdWZmZXJzKSB7Ci0gICAgICAgIGlmIChwYWlyLmZpcnN0KQotICAgICAgICAgICAgY29z
dCArPSBwYWlyLmZpcnN0LT5tZW1vcnlDb3N0KCk7CisgICAgZm9yIChhdXRvJiBiYWNraW5nU3Rv
cmUgOiBtX2JhY2tpbmdTdG9yZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gYnVmZmVyID0gYmFja2lu
Z1N0b3JlID8gYmFja2luZ1N0b3JlLT5idWZmZXIoKSA6IG51bGxwdHIpCisgICAgICAgICAgICBj
b3N0ICs9IGJ1ZmZlci0+bWVtb3J5Q29zdCgpOwogICAgIH0KIAogI2lmIEVOQUJMRShPRkZTQ1JF
RU5fQ0FOVkFTKQpAQCAtMzkyNSw3ICszOTIyLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4+IAogICAgIGlmIChhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkuaGFzRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFz
ZUV4Y2VwdGlvbigpOwogCi0gICAgYXV0byBpbWFnZUJ1ZmZlcnMgPSBJbWFnZUJpdG1hcDo6ZGV0
YWNoQml0bWFwcyhXVEZNb3ZlKGltYWdlQml0bWFwcykpOworICAgIGF1dG8gYmFja2luZ1N0b3Jl
cyA9IEltYWdlQml0bWFwOjpkZXRhY2hCaXRtYXBzKFdURk1vdmUoaW1hZ2VCaXRtYXBzKSk7CiAK
ICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4gZGV0YWNoZWRDYW52YXNlczsKQEAgLTM5MzMsNyAr
MzkzMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiAKICAgICAg
ICAgZGV0YWNoZWRDYW52YXNlcy5hcHBlbmQob2Zmc2NyZWVuQ2FudmFzLT5kZXRhY2goKSk7CiAj
ZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShX
VEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFz
ZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6OldvcmtlclBv
c3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxwdHIsIFdURk1vdmUoaW1h
Z2VCdWZmZXJzKQorICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVs
ZWFzZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6Oldvcmtl
clBvc3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51bGxwdHIsIFdURk1vdmUo
YmFja2luZ1N0b3JlcykKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgICAg
ICAgICAsIFdURk1vdmUoZGV0YWNoZWRDYW52YXNlcykKICNlbmRpZgpAQCAtMzk4OSw3ICszOTg2
LDcgQEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaQogCiBKU1ZhbHVl
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxp
emF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9ucykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25S
ZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgV1RGTW92ZShtX2ltYWdlQnVm
ZmVycykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIG1lc3Nh
Z2VQb3J0cywgV1RGTW92ZShtX2JhY2tpbmdTdG9yZXMpCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9D
QU5WQVMpCiAgICAgICAgICwgV1RGTW92ZShtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXMpCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyAr
MjcsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvU3Ryb25nLmg+CkBAIC01MSw4ICs1MCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzOwogI2VuZGlmCiBjbGFzcyBJREJWYWx1
ZTsKLWNsYXNzIEltYWdlQml0bWFwOwogY2xhc3MgTWVzc2FnZVBvcnQ7CitjbGFzcyBJbWFnZUJp
dG1hcEJhY2tpbmc7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBlbnVtIGNsYXNzIFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOwogCkBAIC0xMTcsNyArMTE2LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNo
YXI+JiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8
dW5zaWduZWQgY2hhcj4mJiwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4pOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5Piwgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eT4gc2hhcmVkQnVmZmVycywgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXphdGlvblN0YXRlPj4mJiBpbWFnZUJ1ZmZlcnMK
KyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNo
YXJlZEJ1ZmZlcnMsIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiYmIGJhY2tp
bmdTdG9yZXMKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICAgICAgLCBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPj4mJiA9IHsgfQogI2VuZGlm
CkBAIC0xMzEsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
bV9kYXRhOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IG1f
YXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXk+IG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheTsKLSAgICBWZWN0b3I8
c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpTZXJp
YWxpemF0aW9uU3RhdGU+PiBtX2ltYWdlQnVmZmVyczsKKyAgICBWZWN0b3I8T3B0aW9uYWw8SW1h
Z2VCaXRtYXBCYWNraW5nPj4gbV9iYWNraW5nU3RvcmVzOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5f
Q0FOVkFTKQogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52
YXM+PiBtX2RldGFjaGVkT2Zmc2NyZWVuQ2FudmFzZXM7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMjEgKzY5LDEyIEBA
IHN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUKIAogUmVmPEltYWdlQml0
bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEludFNpemUgc2l6ZSkKIHsKLSAgICByZXR1cm4gY3Jl
YXRlKEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSksIGJ1ZmZlclJlbmRlcmluZ01vZGUpKTsKKyAgICByZXR1cm4gY3JlYXRlKHsgSW1hZ2VC
dWZmZXI6OmNyZWF0ZShGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSwgYnVm
ZmVyUmVuZGVyaW5nTW9kZSkgfSk7CiB9CiAKLVJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VCdWZm
ZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4mJiBidWZmZXIpCitSZWY8SW1hZ2VCaXRtYXA+IEltYWdl
Qml0bWFwOjpjcmVhdGUoT3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPiYmIGJhY2tpbmdTdG9y
ZSkKIHsKLSAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYnVmZmVyLmZpcnN0
KSk7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSBidWZmZXIuc2Vjb25kLm9yaWdp
bkNsZWFuOwotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSBidWZmZXIuc2Vj
b25kLnByZW11bHRpcGx5QWxwaGE7Ci0gICAgaW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0
aXBseUFscGhhID0gYnVmZmVyLnNlY29uZC5mb3JjaWJseVByZW11bHRpcGx5QWxwaGE7Ci0gICAg
cmV0dXJuIGltYWdlQml0bWFwOwotfQotCi1SZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1hcChXVEZNb3ZlKGJ1ZmZlcikpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJbWFnZUJpdG1hcChXVEZNb3ZlKGJhY2tpbmdTdG9yZSkpKTsKIH0K
IAogdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBJbWFnZUJpdG1hcDo6U291cmNlJiYgc291cmNlLCBJ
bWFnZUJpdG1hcE9wdGlvbnMmJiBvcHRpb25zLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21p
c2UpCkBAIC05NSwxNSArODYsMTQgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShT
Y3JpcHRFeAogICAgICk7CiB9CiAKLVZlY3RvcjxzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgSW1hZ2VCdWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4+IEltYWdlQml0bWFw
OjpkZXRhY2hCaXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmIGJpdG1hcHMpCitW
ZWN0b3I8T3B0aW9uYWw8SW1hZ2VCaXRtYXBCYWNraW5nPj4gSW1hZ2VCaXRtYXA6OmRldGFjaEJp
dG1hcHMoVmVjdG9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+JiYgYml0bWFwcykKIHsKLSAgICBWZWN0
b3I8c3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEltYWdlQnVmZmVyOjpT
ZXJpYWxpemF0aW9uU3RhdGU+PiBidWZmZXJzOworICAgIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJp
dG1hcEJhY2tpbmc+PiBidWZmZXJzOwogICAgIGZvciAoYXV0byYgYml0bWFwIDogYml0bWFwcykK
LSAgICAgICAgYnVmZmVycy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYml0bWFwLT50cmFuc2Zlck93
bmVyc2hpcEFuZENsb3NlKCksIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyBiaXRt
YXAtPm9yaWdpbkNsZWFuKCksIGJpdG1hcC0+cHJlbXVsdGlwbHlBbHBoYSgpLCBiaXRtYXAtPmZv
cmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpIH0pKTsKKyAgICAgICAgYnVmZmVycy5hcHBlbmQoYml0
bWFwLT50YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpOwogICAgIHJldHVybiBidWZmZXJzOwogfQog
Ci0KIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1hZ2VCaXRtYXA6OlNvdXJjZSYmIHNvdXJjZSwg
SW1hZ2VCaXRtYXBPcHRpb25zJiYgb3B0aW9ucywgaW50IHN4LCBpbnQgc3ksIGludCBzdywgaW50
IHNoLCBJbWFnZUJpdG1hcDo6UHJvbWlzZSYmIHByb21pc2UpCiB7CiAgICAgLy8gMS4gSWYgZWl0
aGVyIHRoZSBzdyBvciBzaCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCBidXQgemVybywgcmV0dXJu
IGEgcHJvbWlzZQpAQCAtMjQzLDEzICsyMzMsMTUgQEAgdm9pZCBJbWFnZUJpdG1hcDo6cmVzb2x2
ZVdpdGhCbGFua0ltYWdlQgogICAgIC8vIFJlc29sdmUgUHJvbWlzZSB3aXRoIGEgYmxhbmsgMXgx
IEltYWdlQml0bWFwLgogICAgIGF1dG8gYml0bWFwRGF0YSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKDEsIDEpLCBidWZmZXJSZW5kZXJpbmdNb2RlKTsKIAotICAgIC8vIDcuIENyZWF0
ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0
ZShXVEZNb3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDkuIElmIHRoZSBvcmlnaW4gb2YgaW1h
Z2UncyBpbWFnZSBpcyBub3QgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBvcmlnaW4gc3BlY2lmaWVk
IGJ5IHRoZQogICAgIC8vICAgIGVudHJ5IHNldHRpbmdzIG9iamVjdCwgdGhlbiBzZXQgdGhlIG9y
aWdpbi1jbGVhbiBmbGFnIG9mIHRoZSBJbWFnZUJpdG1hcCBvYmplY3QncwogICAgIC8vICAgIGJp
dG1hcCB0byBmYWxzZS4KLSAgICBpbWFnZUJpdG1hcC0+bV9vcmlnaW5DbGVhbiA9IG9yaWdpbkNs
ZWFuOworICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IHNlcmlhbGl6YXRpb25TdGF0
ZTsKKyAgICBpZiAob3JpZ2luQ2xlYW4pCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisgICAgCisgICAgLy8gNy4gQ3JlYXRl
IGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KKyAgICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRl
KEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERhdGEpLCBzZXJpYWxpemF0aW9uU3Rh
dGUpKTsKIAogICAgIC8vIDEwLiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRpbnVlIHJ1
bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gMTEuIFJlc29sdmUgdGhlIHBy
b21pc2Ugd2l0aCB0aGUgbmV3IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC0z
NzMsMTYgKzM2NSwxOCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKFNjcmlwdEV4
CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAg
Yml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2VGb3JSZW5kZXIsIGRlc3RSZWN0
LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0eSksIGltYWdlT3JpZW50
YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRpb24pIH0pOwogCi0gICAg
Ly8gNy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KLSAgICBhdXRvIGltYWdlQml0
bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOwotCiAgICAgLy8gOS4gSWYgdGhlIG9y
aWdpbiBvZiBpbWFnZSdzIGltYWdlIGlzIG5vdCB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIG9yaWdp
biBzcGVjaWZpZWQgYnkgdGhlCiAgICAgLy8gICAgZW50cnkgc2V0dGluZ3Mgb2JqZWN0LCB0aGVu
IHNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzCiAg
ICAgLy8gICAgYml0bWFwIHRvIGZhbHNlLgorICAgIE9wdGlvblNldDxTZXJpYWxpemF0aW9uU3Rh
dGU+IHNlcmlhbGl6YXRpb25TdGF0ZTsKKyAgICBpZiAoIXRhaW50c09yaWdpbigqY2FjaGVkSW1h
Z2UpKQorICAgICAgICBzZXJpYWxpemF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6
T3JpZ2luQ2xlYW4pOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fb3JpZ2luQ2xlYW4gPSAhdGFpbnRz
T3JpZ2luKCpjYWNoZWRJbWFnZSk7CisgICAgaWYgKGFscGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQ
cmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlwbHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAgICAgc2VyaWFsaXphdGlvblN0YXRlLmFk
ZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRt
YXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVs
dGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDcuIENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1h
cCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShJbWFnZUJpdG1hcEJhY2tp
bmcoV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXphdGlvblN0YXRlKSk7CiAKICAgICAvLyAx
MC4gUmV0dXJuIGEgbmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBz
IGluIHBhcmFsbGVsLgogICAgIC8vIDExLiBSZXNvbHZlIHRoZSBwcm9taXNlIHdpdGggdGhlIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QgYXMgdGhlIHZhbHVlLgpAQCAtNDM5LDE1ICs0MzMsMTcgQEAg
dm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgIEZsb2F0UmVjdCBk
ZXN0UmVjdChGbG9hdFBvaW50KCksIG91dHB1dFNpemUpOwogICAgIGJpdG1hcERhdGEtPmNvbnRl
eHQoKS5kcmF3SW1hZ2UoKmltYWdlRm9yUmVuZGVyLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVh
bGl0eShvcHRpb25zLnJlc2l6ZVF1YWxpdHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRp
b24ob3B0aW9ucy5pbWFnZU9yaWVudGF0aW9uKSB9KTsKIAotICAgIC8vIDMuIENyZWF0ZSBhIG5l
dyBJbWFnZUJpdG1hcCBvYmplY3QuCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZN
b3ZlKGJpdG1hcERhdGEpKTsKLQogICAgIC8vIDUuIFNldCB0aGUgb3JpZ2luLWNsZWFuIGZsYWcg
b2YgdGhlIEltYWdlQml0bWFwIG9iamVjdCdzIGJpdG1hcCB0byB0aGUgc2FtZSB2YWx1ZSBhcwog
ICAgIC8vICAgIHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgY2FudmFzIGVsZW1lbnQncyBi
aXRtYXAuCisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0
YXRlOworICAgIGlmIChjYW52YXMub3JpZ2luQ2xlYW4oKSkKKyAgICAgICAgc2VyaWFsaXphdGlv
blN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAotICAgIGltYWdl
Qml0bWFwLT5tX29yaWdpbkNsZWFuID0gY2FudmFzLm9yaWdpbkNsZWFuKCk7CisgICAgaWYgKGFs
cGhhUHJlbXVsdGlwbGljYXRpb25Gb3JQcmVtdWx0aXBseUFscGhhKG9wdGlvbnMucHJlbXVsdGlw
bHlBbHBoYSkgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKKyAgICAg
ICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OlByZW11bHRpcGx5
QWxwaGEpOwogCi0gICAgaW1hZ2VCaXRtYXAtPm1fcHJlbXVsdGlwbHlBbHBoYSA9IChhbHBoYVBy
ZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRpcGx5QWxw
aGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIC8vIDMu
IENyZWF0ZSBhIG5ldyBJbWFnZUJpdG1hcCBvYmplY3QuCisgICAgYXV0byBpbWFnZUJpdG1hcCA9
IGNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShiaXRtYXBEYXRhKSwgc2VyaWFsaXph
dGlvblN0YXRlKSk7CiAKICAgICAvLyA2LiBSZXR1cm4gYSBuZXcgcHJvbWlzZSwgYnV0IGNvbnRp
bnVlIHJ1bm5pbmcgdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgLy8gNy4gUmVzb2x2ZSB0
aGUgcHJvbWlzZSB3aXRoIHRoZSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0IGFzIHRoZSB2YWx1ZS4K
QEAgLTUxNCwxNSArNTEwLDE4IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21pc2UoU2Ny
aXB0RXgKICAgICAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGMsIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHNpemUpKTsKICAgICB9CiAKLSAgICAvLyA1LiBMZXQgaW1hZ2VC
aXRtYXAgYmUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0LgotICAgIGF1dG8gaW1hZ2VCaXRtYXAg
PSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7Ci0KICAgICAvLyA2LjMuIElmIHRoZSBvcmln
aW4gb2YgaW1hZ2UncyB2aWRlbyBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBlbnRyeQogICAgIC8v
ICAgICAgc2V0dGluZ3Mgb2JqZWN0J3Mgb3JpZ2luLCB0aGVuIHNldCB0aGUgb3JpZ2luLWNsZWFu
IGZsYWcgb2YKICAgICAvLyAgICAgIGltYWdlJ3MgYml0bWFwIHRvIGZhbHNlLgotICAgIGltYWdl
Qml0bWFwLT5tX29yaWdpbkNsZWFuID0gIXRhaW50c09yaWdpbihzY3JpcHRFeGVjdXRpb25Db250
ZXh0LnNlY3VyaXR5T3JpZ2luKCksICp2aWRlbyk7CisgICAgT3B0aW9uU2V0PFNlcmlhbGl6YXRp
b25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlOworICAgIGlmICghdGFpbnRzT3JpZ2luKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuc2VjdXJpdHlPcmlnaW4oKSwgKnZpZGVvKSkKKyAgICAgICAgc2Vy
aWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKIAot
ICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBsaWNh
dGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBpZiAoYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICBzZXJpYWxp
emF0aW9uU3RhdGUuYWRkKFNlcmlhbGl6YXRpb25TdGF0ZTo6UHJlbXVsdGlwbHlBbHBoYSk7CisK
KyAgICAvLyA1LiBMZXQgaW1hZ2VCaXRtYXAgYmUgYSBuZXcgSW1hZ2VCaXRtYXAgb2JqZWN0Lgor
ICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUo
Yml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogCiAgICAgLy8gNi40LjEuIFJlc29s
dmUgcCB3aXRoIGltYWdlQml0bWFwLgogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3ZlKGltYWdl
Qml0bWFwKSk7CkBAIC01NjYsMjAgKzU2NSwyNCBAQCB2b2lkIEltYWdlQml0bWFwOjpjcmVhdGVQ
cm9taXNlKFNjcmlwdEV4CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgb3V0
cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRyYXdJbWFnZSgqaW1hZ2VGb3JS
ZW5kZXIsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZhbHVlKCksIHsg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVzaXplUXVhbGl0
eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdlT3JpZW50YXRp
b24pIH0pOwogCi0gICAgLy8gMy4gQ3JlYXRlIGEgbmV3IEltYWdlQml0bWFwIG9iamVjdC4KLSAg
ICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOwotCiAgICAg
Ly8gNS4gU2V0IHRoZSBvcmlnaW4tY2xlYW4gZmxhZyBvZiB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0
J3MgYml0bWFwIHRvIHRoZSBzYW1lCiAgICAgLy8gICAgdmFsdWUgYXMgdGhlIG9yaWdpbi1jbGVh
biBmbGFnIG9mIHRoZSBiaXRtYXAgb2YgdGhlIGltYWdlIGFyZ3VtZW50LgotICAgIGltYWdlQml0
bWFwLT5tX29yaWdpbkNsZWFuID0gZXhpc3RpbmdJbWFnZUJpdG1hcC0+b3JpZ2luQ2xlYW4oKTsK
LQotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQcmVtdWx0aXBs
aWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBPcHRpb25TZXQ8U2Vy
aWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGU7CisgICAgaWYgKGV4aXN0aW5nSW1h
Z2VCaXRtYXAtPm9yaWdpbkNsZWFuKCkpCisgICAgICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQo
U2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbik7CisKKyAgICBpZiAoYWxwaGFQcmVtdWx0
aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFscGhhKSA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIHNlcmlh
bGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFscGhhKTsK
KworICAgICAgICAvLyBBdCBsZWFzdCBpbiB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLCB3aGVu
IGNyZWF0aW5nIGFuIEltYWdlQml0bWFwIGZyb20KKyAgICAgICAgLy8gYW4gSW1hZ2VCaXRtYXAs
IHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJlbXVsdGlwbGllZCBldmVu
CisgICAgICAgIC8vIHRob3VnaCB0aGUgYWxwaGEgbW9kZSBvZiB0aGUgaW50ZXJuYWwgc3VyZmFj
ZSBjbGFpbXMgaXQgaXMuIEluc3RydWN0CisgICAgICAgIC8vIHVzZXJzIG9mIHRoaXMgSW1hZ2VC
aXRtYXAgdG8gaWdub3JlIHRoZSBpbnRlcm5hbCBzdXJmYWNlJ3MgYWxwaGEgbW9kZS4KKyAgICAg
ICAgc2VyaWFsaXphdGlvblN0YXRlLmFkZChTZXJpYWxpemF0aW9uU3RhdGU6OkZvcmNpYmx5UHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgfQogCi0gICAgLy8gQXQgbGVhc3QgaW4gdGhlIENvcmUgR3Jh
cGhpY3MgYmFja2VuZCwgd2hlbiBjcmVhdGluZyBhbiBJbWFnZUJpdG1hcCBmcm9tCi0gICAgLy8g
YW4gSW1hZ2VCaXRtYXAsIHRoZSBhbHBoYSBjaGFubmVsIG9mIGJpdG1hcERhdGEgaXNuJ3QgcHJl
bXVsdGlwbGllZCBldmVuCi0gICAgLy8gdGhvdWdoIHRoZSBhbHBoYSBtb2RlIG9mIHRoZSBpbnRl
cm5hbCBzdXJmYWNlIGNsYWltcyBpdCBpcy4gSW5zdHJ1Y3QKLSAgICAvLyB1c2VycyBvZiB0aGlz
IEltYWdlQml0bWFwIHRvIGlnbm9yZSB0aGUgaW50ZXJuYWwgc3VyZmFjZSdzIGFscGhhIG1vZGUu
Ci0gICAgaW1hZ2VCaXRtYXAtPm1fZm9yY2libHlQcmVtdWx0aXBseUFscGhhID0gaW1hZ2VCaXRt
YXAtPm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAvLyAzLiBDcmVhdGUgYSBuZXcgSW1hZ2VCaXRt
YXAgb2JqZWN0LgorICAgIGF1dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNr
aW5nKFdURk1vdmUoYml0bWFwRGF0YSksIHNlcmlhbGl6YXRpb25TdGF0ZSkpOwogCiAgICAgLy8g
Ni4gUmV0dXJuIGEgbmV3IHByb21pc2UsIGJ1dCBjb250aW51ZSBydW5uaW5nIHRoZXNlIHN0ZXBz
IGluIHBhcmFsbGVsLgogICAgIC8vIDcuIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgbmV3
IEltYWdlQml0bWFwIG9iamVjdCBhcyB0aGUgdmFsdWUuCkBAIC03NTIsOSArNzU1LDExIEBAIHZv
aWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZUZyb21CdWZmZXIoCiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
KEZsb2F0UG9pbnQoKSwgb3V0cHV0U2l6ZSk7CiAgICAgYml0bWFwRGF0YS0+Y29udGV4dCgpLmRy
YXdJbWFnZSgqaW1hZ2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZh
bHVlKCksIHsgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JSZXNpemVRdWFsaXR5KG9wdGlvbnMucmVz
aXplUXVhbGl0eSksIGltYWdlT3JpZW50YXRpb25Gb3JPcmllbnRhdGlvbihvcHRpb25zLmltYWdl
T3JpZW50YXRpb24pIH0pOwogCi0gICAgYXV0byBpbWFnZUJpdG1hcCA9IGNyZWF0ZShXVEZNb3Zl
KGJpdG1hcERhdGEpKTsKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxp
emF0aW9uU3RhdGUgPSBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuOworICAgIGlmIChh
bHBoYVByZW11bHRpcGxpY2F0aW9uRm9yUHJlbXVsdGlwbHlBbHBoYShvcHRpb25zLnByZW11bHRp
cGx5QWxwaGEpID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCisgICAg
ICAgIHNlcmlhbGl6YXRpb25TdGF0ZS5hZGQoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBs
eUFscGhhKTsKIAotICAgIGltYWdlQml0bWFwLT5tX3ByZW11bHRpcGx5QWxwaGEgPSAoYWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbkZvclByZW11bHRpcGx5QWxwaGEob3B0aW9ucy5wcmVtdWx0aXBseUFs
cGhhKSA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICBhdXRv
IGltYWdlQml0bWFwID0gY3JlYXRlKEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJpdG1hcERh
dGEpLCBzZXJpYWxpemF0aW9uU3RhdGUpKTsKIAogICAgIHByb21pc2UucmVzb2x2ZShXVEZNb3Zl
KGltYWdlQml0bWFwKSk7CiB9CkBAIC03OTksNyArODA0LDcgQEAgdm9pZCBJbWFnZUJpdG1hcDo6
Y3JlYXRlUHJvbWlzZShTY3JpcHRFeAogICAgICAgICAmJiBzb3VyY2VSZWN0YW5nbGUucmV0dXJu
VmFsdWUoKS5zaXplKCkgPT0gb3V0cHV0U2l6ZQogICAgICAgICAmJiBvcHRpb25zLmltYWdlT3Jp
ZW50YXRpb24gPT0gSW1hZ2VCaXRtYXBPcHRpb25zOjpPcmllbnRhdGlvbjo6Tm9uZSkgewogICAg
ICAgICBiaXRtYXBEYXRhLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0YW5nbGUucmVsZWFzZVJldHVyblZh
bHVlKCksIHsgfSwgYWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgICAgIGF1dG8gaW1hZ2VC
aXRtYXAgPSBjcmVhdGUoV1RGTW92ZShiaXRtYXBEYXRhKSk7CisgICAgICAgIGF1dG8gaW1hZ2VC
aXRtYXAgPSBjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYml0bWFwRGF0YSkpKTsK
ICAgICAgICAgLy8gVGhlIHJlc3VsdCBpcyBpbXBsaWNpdGx5IG9yaWdpbi1jbGVhbiwgYW5kIGFs
cGhhIHByZW11bHRpcGxpY2F0aW9uIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZC4KICAgICAgICAg
cHJvbWlzZS5yZXNvbHZlKFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtODEzLDQ3ICs4MTgsMzAgQEAgdm9pZCBJbWFnZUJpdG1hcDo6Y3JlYXRlUHJvbWlzZShTY3Jp
cHRFeAogICAgIGJpdG1hcERhdGEtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRlbXBCaXRt
YXBEYXRhLCBkZXN0UmVjdCwgc291cmNlUmVjdGFuZ2xlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpLCB7
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yUmVzaXplUXVhbGl0eShvcHRpb25zLnJlc2l6ZVF1YWxp
dHkpLCBpbWFnZU9yaWVudGF0aW9uRm9yT3JpZW50YXRpb24ob3B0aW9ucy5pbWFnZU9yaWVudGF0
aW9uKSB9KTsKIAogICAgIC8vIDYuNC4xLiBSZXNvbHZlIHAgd2l0aCBJbWFnZUJpdG1hcC4KLSAg
ICBhdXRvIGltYWdlQml0bWFwID0gY3JlYXRlKFdURk1vdmUoYml0bWFwRGF0YSkpOworICAgIGF1
dG8gaW1hZ2VCaXRtYXAgPSBjcmVhdGUoeyBXVEZNb3ZlKGJpdG1hcERhdGEpIH0pOwogICAgIC8v
IFRoZSByZXN1bHQgaXMgaW1wbGljaXRseSBvcmlnaW4tY2xlYW4sIGFuZCBhbHBoYSBwcmVtdWx0
aXBsaWNhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuCiAgICAgcHJvbWlzZS5yZXNvbHZl
KFdURk1vdmUoaW1hZ2VCaXRtYXApKTsKIH0KIAotSW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpCi0gICAgOiBtX2JpdG1hcERhdGEo
V1RGTW92ZShidWZmZXIpKQorSW1hZ2VCaXRtYXA6OkltYWdlQml0bWFwKE9wdGlvbmFsPEltYWdl
Qml0bWFwQmFja2luZz4mJiBiYWNraW5nU3RvcmUpCisgICAgOiBtX2JhY2tpbmdTdG9yZShXVEZN
b3ZlKGJhY2tpbmdTdG9yZSkpCiB7Ci0gICAgQVNTRVJUKG1fYml0bWFwRGF0YSk7CisgICAgQVNT
RVJUX0lNUExJRVMobV9iYWNraW5nU3RvcmUsIG1fYmFja2luZ1N0b3JlLT5idWZmZXIoKSk7CiB9
CiAKIEltYWdlQml0bWFwOjp+SW1hZ2VCaXRtYXAoKSA9IGRlZmF1bHQ7CiAKLXVuc2lnbmVkIElt
YWdlQml0bWFwOjp3aWR0aCgpIGNvbnN0CitPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+IElt
YWdlQml0bWFwOjp0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkKIHsKLSAgICBpZiAobV9kZXRhY2hl
ZCB8fCAhbV9iaXRtYXBEYXRhKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJ
cyB0aGlzIHRoZSByaWdodCB3aWR0aD8KLSAgICByZXR1cm4gbV9iaXRtYXBEYXRhLT5sb2dpY2Fs
U2l6ZSgpLndpZHRoKCk7CisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9iYWNraW5nU3RvcmUs
IFdURjo6bnVsbG9wdCk7CiB9CiAKLXVuc2lnbmVkIEltYWdlQml0bWFwOjpoZWlnaHQoKSBjb25z
dAorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dGFrZUltYWdlQnVm
ZmVyKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9iaXRtYXBEYXRhKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/Ci0gICAg
cmV0dXJuIG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICBpZiAoYXV0
byBiYWNraW5nU3RvcmUgPSB0YWtlSW1hZ2VCaXRtYXBCYWNraW5nKCkpCisgICAgICAgIHJldHVy
biBiYWNraW5nU3RvcmUtPnRha2VJbWFnZUJ1ZmZlcigpOworICAgIEFTU0VSVChpc0RldGFjaGVk
KCkpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi12b2lkIEltYWdlQml0bWFwOjpjbG9zZSgp
Ci17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgbV9iaXRtYXBEYXRhID0gbnVsbHB0cjsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJpdG1hcDo6dHJhbnNmZXJP
d25lcnNoaXBBbmRDbG9zZSgpCi17Ci0gICAgbV9kZXRhY2hlZCA9IHRydWU7Ci0gICAgcmV0dXJu
IFdURk1vdmUobV9iaXRtYXBEYXRhKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuaAkocmV2aXNpb24gMjY3NTczKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJpdG1hcEJhY2tpbmcuaCIKICNpbmNsdWRl
ICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCkBAIC04
MywzOCArODMsMzQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYsIFNvdXJjZSYmLCBJbWFnZUJpdG1hcE9wdGlvbnMmJiwgaW50
IHN4LCBpbnQgc3ksIGludCBzdywgaW50IHNoLCBQcm9taXNlJiYpOwogCiAgICAgc3RhdGljIFJl
ZjxJbWFnZUJpdG1hcD4gY3JlYXRlKEludFNpemUpOwotICAgIHN0YXRpYyBSZWY8SW1hZ2VCaXRt
YXA+IGNyZWF0ZShzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgSW1hZ2VC
dWZmZXI6OlNlcmlhbGl6YXRpb25TdGF0ZT4mJik7CisgICAgc3RhdGljIFJlZjxJbWFnZUJpdG1h
cD4gY3JlYXRlKE9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4mJik7CiAKICAgICB+SW1hZ2VC
aXRtYXAoKTsKIAotICAgIHVuc2lnbmVkIHdpZHRoKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgaGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdm9pZCBjbG9zZSgpOworICAgIEltYWdlQnVmZmVyKiBidWZmZXIo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT5idWZmZXIo
KSA6IG51bGxwdHI7IH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgaW1wbGljaXQgc2lk
ZS1lZmZlY3Qgb2YgZGV0YWNoaW5nIHRoZSBiYWNraW5nIHN0b3JlLgorICAgIC8vIEl0IHJldHVy
bnMgbnVsbHB0ciBpZiB0aGUgSW1hZ2VCaXRtYXAncyBhbHJlYWR5IGRldGFjaGVkLgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdlQnVmZmVyKCk7CisgICAgT3B0aW9u
U2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gc2VyaWFsaXphdGlvblN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+c2VyaWFsaXphdGlvblN0YXRlKCkg
OiBTZXJpYWxpemF0aW9uU3RhdGUoKTsgfQorCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT53aWR0aCgpIDogMDsgfQor
ICAgIHVuc2lnbmVkIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9i
YWNraW5nU3RvcmUtPmhlaWdodCgpIDogMDsgfQorCisgICAgYm9vbCBvcmlnaW5DbGVhbigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlICYmIG1fYmFja2luZ1N0b3JlLT5vcmlnaW5DbGVh
bigpOyB9CisgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNr
aW5nU3RvcmUgJiYgbV9iYWNraW5nU3RvcmUtPnByZW11bHRpcGx5QWxwaGEoKTsgfQorICAgIGJv
b2wgZm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3Rv
cmUgJiYgbV9iYWNraW5nU3RvcmUtPmZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSgpOyB9CisKKyAg
ICBPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+IHRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKTsK
KyAgICBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9iYWNraW5nU3RvcmUuaGFz
VmFsdWUoKTsgfQorICAgIHZvaWQgY2xvc2UoKSB7IHRha2VJbWFnZUJpdG1hcEJhY2tpbmcoKTsg
fQogCi0gICAgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZXRhY2hlZDsgfQot
Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlcigpIHsgcmV0dXJuIG1fYml0bWFwRGF0YS5nZXQoKTsg
fQotCi0gICAgYm9vbCBvcmlnaW5DbGVhbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luQ2xlYW47
IH0KLQotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVs
dGlwbHlBbHBoYTsgfQotCi0gICAgLy8gV2hlbiBXZWJHTCBjb25zdW1lcyBhbiBJbWFnZSBjb21p
bmcgZnJvbSBhbiBJbWFnZUJpdG1hcCdzIEltYWdlQnVmZmVyLCBpdCB0eXBpY2FsbHkgaG9ub3Jz
Ci0gICAgLy8gdGhlIGFscGhhIG1vZGUgb2YgdGhhdCBuYXRpdmUgaW1hZ2UgLSBDR0ltYWdlQWxw
aGFJbmZvIGluIHRoZSBDb3JlIEdyYXBoaWNzIGJhY2tlbmQuIEZvcgotICAgIC8vIEltYWdlQml0
bWFwcyBjcmVhdGVkIGZyb20gSW1hZ2VCaXRtYXBzLCB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBh
Y2N1cmF0ZSwgYW5kIGNhbGxlcnMgbXVzdCBiZQotICAgIC8vIHRvbGQgdG8gaWdub3JlIHRoZSBh
bHBoYSBtb2RlLCBhbmQgZm9yY2libHkgcHJlbXVsdGlwbHkgdGhlIGFscGhhIGNoYW5uZWwuCi0g
ICAgYm9vbCBmb3JjaWJseVByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNp
Ymx5UHJlbXVsdGlwbHlBbHBoYTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiB0cmFuc2Zlck93bmVyc2hpcEFuZENsb3NlKCk7Ci0KLSAgICBzdGF0aWMgVmVjdG9yPHN0ZDo6
cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBJbWFnZUJ1ZmZlcjo6U2VyaWFsaXph
dGlvblN0YXRlPj4gZGV0YWNoQml0bWFwcyhWZWN0b3I8UmVmUHRyPEltYWdlQml0bWFwPj4mJik7
CisgICAgc3RhdGljIFZlY3RvcjxPcHRpb25hbDxJbWFnZUJpdG1hcEJhY2tpbmc+PiBkZXRhY2hC
aXRtYXBzKFZlY3RvcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiYmKTsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgSW1hZ2VCaXRtYXBJbWFnZU9ic2VydmVyOwogICAgIGZyaWVuZCBjbGFzcyBQ
ZW5kaW5nSW1hZ2VCaXRtYXA7CiAKLSAgICBzdGF0aWMgUmVmPEltYWdlQml0bWFwPiBjcmVhdGUo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiYmKTsKLSAgICBJbWFnZUJpdG1hcChzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiYpOworICAgIEltYWdlQml0bWFwKE9wdGlvbmFsPEltYWdl
Qml0bWFwQmFja2luZz4mJik7CiAKICAgICBzdGF0aWMgdm9pZCByZXNvbHZlV2l0aEJsYW5rSW1h
Z2VCdWZmZXIoYm9vbCBvcmlnaW5DbGVhbiwgUHJvbWlzZSYmKTsKIApAQCAtMTMzLDExICsxMjks
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZVByb21pc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYsIFJlZlB0cjxUeXBlZE9NQ1NTSW1hZ2VWYWx1ZT4mLCBJbWFnZUJpdG1hcE9w
dGlvbnMmJiwgT3B0aW9uYWw8SW50UmVjdD4sIFByb21pc2UmJik7CiAgICAgc3RhdGljIHZvaWQg
Y3JlYXRlRnJvbUJ1ZmZlcihSZWY8QXJyYXlCdWZmZXI+JiYsIFN0cmluZyBtaW1lVHlwZSwgbG9u
ZyBsb25nIGV4cGVjdGVkQ29udGVudExlbmd0aCwgY29uc3QgVVJMJiwgSW1hZ2VCaXRtYXBPcHRp
b25zJiYsIE9wdGlvbmFsPEludFJlY3Q+LCBQcm9taXNlJiYpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBtX2JpdG1hcERhdGE7Ci0gICAgYm9vbCBtX2RldGFjaGVkIHsgZmFs
c2UgfTsKLSAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07Ci0gICAgYm9vbCBtX3ByZW11
bHRpcGx5QWxwaGEgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb3JjaWJseVByZW11bHRpcGx5QWxw
aGEgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPEltYWdlQml0bWFwQmFja2luZz4gbV9iYWNraW5n
U3RvcmU7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcEJh
Y2tpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXBCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQml0bWFwQmFja2luZy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQml0bWFwQmFja2luZzo6SW1hZ2VCaXRtYXBC
YWNraW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiBiaXRtYXBEYXRhLCBPcHRpb25T
ZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9uU3RhdGUpCisgICAgOiBtX2JpdG1h
cERhdGEoV1RGTW92ZShiaXRtYXBEYXRhKSkKKyAgICAsIG1fc2VyaWFsaXphdGlvblN0YXRlKHNl
cmlhbGl6YXRpb25TdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9iaXRtYXBEYXRhKTsKK30KKworSW1h
Z2VCdWZmZXIqIEltYWdlQml0bWFwQmFja2luZzo6YnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9iaXRtYXBEYXRhLmdldCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQml0bWFwQmFja2luZzo6dGFrZUltYWdlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gV1RG
TW92ZShtX2JpdG1hcERhdGEpOworfQorCit1bnNpZ25lZCBJbWFnZUJpdG1hcEJhY2tpbmc6Ondp
ZHRoKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgd2lkdGg/Cisg
ICAgcmV0dXJuIG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS53aWR0
aCgpIDogMDsKK30KKwordW5zaWduZWQgSW1hZ2VCaXRtYXBCYWNraW5nOjpoZWlnaHQoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCBoZWlnaHQ/CisgICAgcmV0dXJu
IG1fYml0bWFwRGF0YSA/IG1fYml0bWFwRGF0YS0+bG9naWNhbFNpemUoKS5oZWlnaHQoKSA6IDA7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW1hZ2VCaXRtYXBCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcEJhY2tpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvblNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgU2VyaWFsaXphdGlvblN0YXRlIDogdWludDhfdCB7CisgICAgT3JpZ2luQ2xlYW4gICAgICAg
ICAgICAgID0gMSA8PCAwLAorICAgIFByZW11bHRpcGx5QWxwaGEgICAgICAgICA9IDEgPDwgMSwK
KyAgICBGb3JjaWJseVByZW11bHRpcGx5QWxwaGEgPSAxIDw8IDIKK307CisKK2NsYXNzIEltYWdl
Qml0bWFwQmFja2luZyB7CitwdWJsaWM6CisgICAgSW1hZ2VCaXRtYXBCYWNraW5nKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4mJiwgT3B0aW9uU2V0PFNlcmlhbGl6YXRpb25TdGF0ZT4gPSBT
ZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFuKTsKKworICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1
ZmZlcigpOworCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBoZWln
aHQoKSBjb25zdDsKKworICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX3Nl
cmlhbGl6YXRpb25TdGF0ZS5jb250YWlucyhTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFu
KTsgfQorCisgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJp
YWxpemF0aW9uU3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpQcmVtdWx0aXBseUFs
cGhhKTsgfQorICAgIC8vIFdoZW4gV2ViR0wgY29uc3VtZXMgYW4gSW1hZ2UgY29taW5nIGZyb20g
YW4gSW1hZ2VCaXRtYXAncyBJbWFnZUJ1ZmZlciwgaXQgdHlwaWNhbGx5IGhvbm9ycworICAgIC8v
IHRoZSBhbHBoYSBtb2RlIG9mIHRoYXQgbmF0aXZlIGltYWdlIC0gQ0dJbWFnZUFscGhhSW5mbyBp
biB0aGUgQ29yZSBHcmFwaGljcyBiYWNrZW5kLiBGb3IKKyAgICAvLyBJbWFnZUJpdG1hcHMgY3Jl
YXRlZCBmcm9tIEltYWdlQml0bWFwcywgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3QgYWNjdXJhdGUs
IGFuZCBjYWxsZXJzIG11c3QgYmUKKyAgICAvLyB0b2xkIHRvIGlnbm9yZSB0aGUgYWxwaGEgbW9k
ZSwgYW5kIGZvcmNpYmx5IHByZW11bHRpcGx5IHRoZSBhbHBoYSBjaGFubmVsLgorICAgIGJvb2wg
Zm9yY2libHlQcmVtdWx0aXBseUFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zZXJpYWxpemF0aW9u
U3RhdGUuY29udGFpbnMoU2VyaWFsaXphdGlvblN0YXRlOjpGb3JjaWJseVByZW11bHRpcGx5QWxw
aGEpOyB9CisKKyAgICBPcHRpb25TZXQ8U2VyaWFsaXphdGlvblN0YXRlPiBzZXJpYWxpemF0aW9u
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3NlcmlhbGl6YXRpb25TdGF0ZTsgfQorCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9iaXRtYXBEYXRhOworICAgIE9w
dGlvblNldDxTZXJpYWxpemF0aW9uU3RhdGU+IG1fc2VyaWFsaXphdGlvblN0YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVu
Q2FudmFzLmNwcAkocmV2aXNpb24gMjY3NTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsMTMgKzI1MCwxMyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgICAgICByZXR1cm4g
eyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFtX2hh
c0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpj
cmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCksIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0aW9uU3RhdGUgeyB0cnVlLCBmYWxzZSwg
ZmFsc2UgfX0pIH07CisgICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKElt
YWdlQml0bWFwQmFja2luZyhJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCkpKSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdl
QnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVm
UHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCi0gICAgICAgIHJldHVybiB7IEltYWdl
Qml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIEltYWdlQnVmZmVyOjpTZXJpYWxpemF0
aW9uU3RhdGUgeyBvcmlnaW5DbGVhbigpLCBmYWxzZSwgZmFsc2UgfX0pIH07CisgICAgICAgIHJl
dHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYnVm
ZmVyKSwgb3JpZ2luQ2xlYW4oKSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBT
ZXJpYWxpemF0aW9uU3RhdGUoKSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNjc1NzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6
OnNldE91dAogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luQ2xlYW4oKTsKICAgICBlbHNlCiAg
ICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7Ci0gICAgY2FudmFzKCktPnNldElt
YWdlQnVmZmVyQW5kTWFya0RpcnR5KGltYWdlQml0bWFwLT50cmFuc2Zlck93bmVyc2hpcEFuZENs
b3NlKCkpOworICAgIGNhbnZhcygpLT5zZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0eShpbWFnZUJp
dG1hcC0+dGFrZUltYWdlQnVmZmVyKCkpOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKFJlZlB0cjxJbWFn
ZUJpdG1hcD4gaW1hZ2VCaXRtYXApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI2NzU3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDEyICszOCw2IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0OwogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7
CiBwdWJsaWM6Ci0gICAgc3RydWN0IFNlcmlhbGl6YXRpb25TdGF0ZSB7Ci0gICAgICAgIGJvb2wg
b3JpZ2luQ2xlYW4geyBmYWxzZSB9OwotICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgeyBm
YWxzZSB9OwotICAgICAgICBib29sIGZvcmNpYmx5UHJlbXVsdGlwbHlBbHBoYSB7IGZhbHNlIH07
Ci0gICAgfTsKLQogICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRp
b24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgU2hvdWxkQWNjZWxlcmF0ZSwgU2hv
dWxkVXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2UsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9
IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3Qg
SG9zdFdpbmRvdyogPSBudWxscHRyKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>